Автор работы: Пользователь скрыл имя, 05 Ноября 2009 в 13:11, Не определен
Лекции
4.
Выборка всех столбцов. Выбрать
все сведения обо всех
SELECT
* FROM S
Результат: копия таблицы S.
Этот оператор эквивалентен по своему действию оператору:
SELECT
nomer, familia, kapital, gorod FROM S.
Звездочка ("*") обозначает список всех столбцов в таблице(ах), указанных в части FROM в том порядке, в котором эти столбцы заданы в операторе CREATE TABLE. Звездочка может дополняться именем таблицы.
SELECT
S.* FROM S
5.
Ограниченная выборка. Выбрать
номера поставщиков из Парижа,
капитал которых больше 20.
SELECT
nomer FROM S WHERE (kapital>20) AND (gorod='Париж')
Результат:
nomer |
S3 |
Условие части WHERE может включать в себя
6.
Выборка с упорядочением.
SELECT
nomer, kapital FROM S WHERE gorod='Париж' ORDER BY kapital
DESC
ASC - упорядочение по возрастанию значений (по умолчанию).
DESC
- упорядочение по убыванию
Каждый
столбец, упомянутый в части ORDER BY должен
присутствовать в результирующей таблице,
поэтому, например, такой оператор недопустим:
SELECT
nomer FROM S ORDER BY gorod;
Правильно
будет:
SELECT
nomer, gorod FROM S ORDER BY gorod;
7.
Выборка с применением
SELECT
* FROM P WHERE ves IN (12, 16, 17);
Результат:
nomer | nazvan | zvet | ves | gorod |
P1 | Гайка | Красный | 12 | Лондон |
P2 | Болт | Зеленый | 17 | Париж |
P3 | Винт | Голубой | 17 | Рим |
P5 | Кулачок | Голубой | 12 | Париж |
8.
Выборка с применением похожести
(LIKE). Выбрать все детали, название которых
начинается с буквы 'в'.
SELECT
* FROM P WHERE nazvan LIKE 'в%';
Результат:
nomer | nazvan | zvet | ves | gorod |
P3 | Винт | Голубой | 17 | Рим |
P4 | Винт | Красный | 14 | Лондон |
Общий
вид оператора похожести: <имя столбца>
LIKE <строковая константа>
<имя столбца> типа CHAR.
<строковая константа> - это образец, в котором:
Операция,
в которой выборка данных проводится
более чем из одной таблицы
называется "соединение". Результирующая
таблица также называется соединением.
Простое эквисоединение
Пример:
Выбрать
все данные о поставщиках и
деталях, размещенных в одном и том же
городе, то есть соразмещенных.
SELECT
S.*, P.* FROM S, P WHERE S.gorod=P.gorod;
Очевидно,
что нужные данные получаются из двух
таблиц S и P - они указаны в части
FROM, а условие соединения записывается
в части WHERE.
Поля таблицы "S" | Поля таблицы "P" | |||||||
nomer | familia | kapital | gorod | nomer | nazvan | zvet | ves | gorod |
S1 | Смит | 20 | Лондон | P1 | Гайка | Красный | 12 | Лондон |
S1 | Смит | 20 | Лондон | P4 | Винт | Красный | 14 | Лондон |
S1 | Смит | 20 | Лондон | P6 | Блюм | Красный | 19 | Лондон |
S2 | Джонс | 10 | Париж | P2 | Болт | Зеленый | 17 | Париж |
S2 | Джонс | 10 | Париж | P5 | Кулачок | Голубой | 12 | Париж |
S3 | Блейк | 30 | Париж | P2 | Болт | Зеленый | 17 | Париж |
S3 | Блейк | 30 | Париж | P5 | Кулачок | Голубой | 12 | Париж |
S4 | Кларк | 20 | Лондон | P1 | Гайка | Красный | 12 | Лондон |
S4 | Кларк | 20 | Лондон | P4 | Винт | Красный | 14 | Лондон |
S4 | Кларк | 20 | Лондон | P6 | Блюм | Красный | 19 | Лондон |
Поставщик из Сарова не попал в результирующую таблицу, так как в этом городе не хранятся никакие детали. Аналогично, результат не содержит детали P3, так как ее город - Рим.
Некоторые замечания
SELECT * FROM S, P WHERE S.gorod=P.gorod;
Соединение по условию "больше, чем"
Пример:
Выбрать
все данные о поставщиках и
деталях таких, что город поставщика
следует за городом, где хранится
деталь в алфавитном порядке.
SELECT
S.*, P.* FROM S, P WHERE S.gorod > P.gorod;
Соединение с дополнительным условием
Пример:
Выбрать
все комбинации номеров поставщиков,
номеров деталей и состояний
такие, что поставщик и деталь
соразмещены. Опустить поставщиков
с капиталом 20.
SELECT S.nomer, P.nomer, S.kapital FROM S, P
WHERE
(S.gorod = P.gorod) AND (kapital <> 20);
S.gorod = P.gorod - условие соединения
kapital
<> 20 - дополнительное
условие
Результат:
nomer | nomer | kapital |
S2 | P2 | 10 |
S2 | P5 | 10 |
S3 | P2 | 30 |
S3 | P5 | 30 |
Соединение таблицы с ней самой
Пример:
Выбрать
все пары номеров поставщиков
такие, что оба поставщика находятся
в одном и том же городе.
SELECT PERV.nomer, VTOR.nomer FROM S PERV, S VTOR
WHERE PERV.gorod = VTOR.gorod;
Таблица
S дважды упоминается в части FROM,
чтобы различать два ее упоминания
вводятся произвольные псевдонимы.
Результат:
nomer | nomer |
S1 | S1 |
S1 | S4 |
S2 | S2 |
S2 | S3 |
S3 | S3 |
S3 | S2 |
S4 | S4 |
S4 | S1 |
S5 | S5 |
Можно
привести этот результат в порядок,
если расширить часть WHERE.
SELECT PERV.nomer, VTOR.nomer
FROM S PERV, S VTOR
WHERE
(PERV.gorod = VTOR.gorod) AND (PERV.nomer < VTOR.nomer);
Последнее условие ("<") даст двоякий эффект:
а) оно исключает пары номеров вида (x,x);
б)
гарантирует, что пары вида (x,y) и (y,x)
не будут появляться одновременно.
Результат:
nomer | nomer |
S1 | S4 |
S2 | S3 |
Подзапрос - это SELECT, который вложен во внешний оператор SELECT.
Обычно
подзапросы требуются для выборки
значений, когда во внешнем запросе
применяется операция принадлежности
(IN).