Содержимое таблиц table1 и table2 представлено в табл. 1.
Табл. 1. Содержимое таблиц table1 и table2
table1
table2
с1
с2
с3
с1
с2
с3
Пример 1.
Выполнение простейшей команды SELECT:
SELECT 2+5 as EX_COL
даст следующий результат:
EX_COL
Пример 2.
Использование секций FROM, ORDER BY и опций секции SELECT.
В результате выполнения команды
SELECT DISTINCT c1, c2 FROM table1
будет получен следующий набор строк:
c1
с2
т.е., двух одинаковых строк в результирующем множестве нет.
В результате же выполнения команды
SELECT DISTINCT TOP 4 c1, c2 FROM table1
будут получены только 1-ые 4 строки из множества строк, возвращаемых предыдущей командой.
Если же выполнить такую команду
SELECT TOP 2 WITH TIES c1, c2 FROM table1 ORDER BY c1
то результирующее множество строк будет следующим:
с1
с2
несмотря на то, что должны быть получены только две 1-ых строки. Это произойдет потому, что использована опция WITH TIES, применение которой приводит к тому, что выбираются все строки, у которых значения в столбцах c1 и c2 совпадают со значениями 2-ой строки.
Пример 3.
Использование секций INTO и WHERE.
При необходимости скопировать часть строк таблицы table1, удовлетворяющих некоторому условию, в новую таблицу, например table3, необходимо выполнить следующую команду:
SELECT * INTO table3 FROM table1 WHERE c1 > 1 and c2 != 5
В результате выполнения этой команды таблица table3 (не должна существовать перед выполнением команды) будет содержать следующие 5 строчек:
с1
с2
с3
Пример 4.
Вертикальные объединения.
Все примеры вертикальных объединений рассмотрим с использованием таблиц table1 и table2. INNER JOIN:
SELECT * from table1 t1 JOIN table2 t2 ON t1.c2 = t2.c2
Результат (сначала столбцы table1, затем – table2):
с1
с2
с3
с1
с2
с3
LEFT JOIN:
SELECT * from table1 t1 LEFT JOIN table2 t2 ON t1.c2 = t2.c2
Результат (сначала столбцы table1, затем – table2):
с1
с2
с3
с1
с2
с3
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
RIGHT JOIN:
SELECT * from table1 t1 RIGHT JOIN table2 t2 ON t1.c2 = t2.c2
Результат (сначала столбцы table1, затем – table2):
с1
с2
с3
с1
с2
с3
NULL
NULL
NULL
NULL
NULL
NULL
FULL JOIN:
SELECT * from table1 t1 FULL JOIN table2 t2 ON t1.c2 = t2.c2
Результат (сначала столбцы table1, затем – table2):
с1
с2
с3
с1
с2
с3
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
CROSS JOIN:
SELECT * from table1 CROSS JOIN table2
что эквивалентно
SELECT * from table1, table2
Результат (сначала столбцы table1, затем – table2):
с1
с2
с3
с1
с2
с3
Использование оператора APPLY. Для демонстрации возможностей такого оператора объединения напишем функцию, которая возвращает набор строк из таблицы table1, значения столбца c2 у которых совпадает с аргументом функции:
/* Проверяем существование функции с именем func1 */
IF EXISTS (SELECT name, type FROM sys.all_objects WHERE name = 'func1'
AND type = 'FN')
/* Если такая функция существует, то удаляем ее */