- •Введение в язык sql92.
- •О нотации грамматики языка sql.
- •Оператор select.
- •Выбор строк (фраза where).
- •Сортировка результата (фраза order by).
- •Стандартные обобщающие функции языка sql.
- •Группировка результата (фраза group by).
- •Примеры простой группировки.
- •Подзапросы и другие операции.
- •Многотабличные запросы.
- •Операции union, intersect, except.
- •Операции обновления базы данных.
- •Insert into table_name [ ( colomn_list ) ]
- •Values ( data_value_list )
- •Определение данных в языке sql.
- •Типы данных языка isq sql92.
- •Integer (можно сократить до int)
- •Скалярные операторы языка sql.
- •Создание баз данных.
- •Представления (виды).
Подзапросы и другие операции.
“Бог в нас самих” Платон 428-347 гг. до н.э.
Можно использовать законченный оператор SELECT, внедренный в тело другого оператораSELECT. Внешний (второй) оператор использует результата внутреннего (первого) оператора для определения содержания окончательного результата всей операции. Внутренние запросы могут быть помещены в в предложенияWHERE и HAVING внешнего оператора SELECT. Проэтому они называются его подзапросами (вложенными запросами).
Подзапрос с проверкой на равенство.
SELECT столб_1_1, столб_1_2, столб_1_3, столб_1_4
FROM табл_1
WHERE столб_1_5 =
(SELECT столб_2_1
FROM табл_2
WHERE столб_2_2 = ‘корп.1106’);
В данном примере подзапрос необходим только для одного – определения значения эталона для фильтации из первой таблицы. Разумеется, что обе таблицы должны быть семантически связанными друг с другом. При выполнении подзапроса формируется виртуальная таблица из одного столбца и строки.
Подзапросы с обобщающими функциями.
SELECT столб_1, столб_2 – (SELECT avg(столб_2) FROM табл) AS столб
FROM табл
WHERE столб_2 >
( SELECT столб_2
FROM табл);
В данном примере подзапрос используется в списке предложения SELECT для определения разницы значения столб_2 со среднем уровнем. При этом фильтация строк выделяет по условию превышения среднего уровня. При выполнении подзапроса вSELECTдля каждой строки формируется виртуальная таблица из одного столбца и строки, скалярное значение которой сохраняется в столбце по именистолбтаблицы общего результата.
Правила и ограничения использования подзапросов.
Подзапросы должны удовлетворять следующим правилам и ограничениям.
В них не должна использоваться фраза ORDER BY, хотя она и допускается для внешнего запроса.
Список в предложении SELECT подзапроса должен состоять из имен отдельных столбцов или составленных из них выражений – за исключением случая, когда в запросе используется ключевое слово EXISTS.
По умолчанию имена столбцов в подзапросе относятся к таблице, имя которой указано в в его предложении FROM. Однако допускается ссылаться на и на столбцы таблицы внешнего запроса. Для этого используются квалифицированные имена столбцов.
Если подзапрос является одним из двух операндов, участвующих в операции сравнении, то запрос должен указываться в правой части этих операндов.
Подзапрос с предикатом IN.
В данном примере самый внутренний подзапрос необходим только для одного – определения значения эталона фильтации из другого подзапроса. Разумеется, что таблицы подзапросов должны быть семантически связанными друг с другом. При выполнении внешнего подзапроса формируется виртуальная таблица из одного столбца и множества сторок. Следовательно, мы не можем использовать знак равенства, вместо которого мы используем служебное слово IN.
SELECT столб_1_1, столб_1_2, столб_1_3, столб_1_4
FROM табл_1
WHERE столб_1_5 IN
(SELECT столб_2_1
FROM табл_2
WHERE столб_2_2 =
(SELECT табл_3_2
FROM табл_3
WHERE столб_3_1 = ‘корп.1106’));
Ключевые слова ANY и ALL.
Данные ключевые слова используются в случаях, когда возвращается столбец чисел. Если подзапросу предшествует ALL, то сравнение будет считаться выполненым, если оно выполняется для всех значений в результирующем столбце подзапроса. Если предшествует словоANY, то условие считается выполненым, если оно удовлетворяет хотя бы одному значению в векторе. Пустой результат считается дляALL выполненым, а дляANY – нет. Ключевое слово SOME – синонимANY.
Использование ключевых слов ANY и SOME.
SELECT столб_1, столб_2, столб_3, столб_4, столб_5
FROM табл
WHERE столб_5 > SOME
(SELECT столб_5
FROM табл
WHERE столб_6 = ‘B3’);
Использование ключевого слова ALL.
SELECT столб_1, столб_2, столб_3, столб_4, столб_5
FROM табл
WHERE столб_5 > ALL
(SELECT столб_5
FROM табл
WHERE столб_6 = ‘B3’);