Оператор выборки SELECT
1.6. Оператор выборки SELECT
Оператор SELECT - один из наиболее важных и самых распространенных операторов SQL. Он позволяет производить выборки данных из таблиц и преобразовывать к нужному виду полученные результаты. Будучи очень мощным, он способен выполнять действия, эквивалентные операторам реляционной алгебры, причем в пределах единственной выполняемой команды. При его помощи можно реализовать сложные и громоздкие условия отбора данных из различных таблиц.
Оператор SELECT - средство, которое полностью абстрагировано от вопросов представления данных, что помогает сконцентрировать внимание на проблемах доступа к данным. Примеры его использования наглядно демонстрируют один из основополагающих принципов больших (промышленных) СУБД: средства хранения данных и доступа к ним отделены от средств представления данных. Операции над данными производятся в масштабе наборов данных, а не отдельных записей.
SELECT [ALL | DISTINCT ] {*|[имя_столбца [AS новое__имя]]}
FROM имя таблицы [[AS] псевдоним] [,...п]
[WHERE <условие отбора>]
[ORDER BY <список полей> desc или asc]
[GROUP BY <список полей>]
Используются встроенные функции
Рекомендуемые материалы
COUNT – подсчет количества в группе
AVJ – среднее арифметическое значение
МАХ
SUM
MIN
[HAVING <критерии выбора групп>]
Обработка элементов оператора SELECT выполняется в следующей последовательности:
- FROM – определяются имена используемых таблиц;
- WHERE – выполняется фильтрация строк объекта в соответствии с заданными условиями, при формирования запроса можно использовать , >, and, nod, or;
- GROUP BY – образуются группы строк , имеющих одно и то же значение в указанном столбце;
- HAVING – фильтруются группы строк объекта в соответствии с указанным условием, определят условие по которому группы включаются в выходные данные, применяется только с GROUP BY;
- SELECT – устанавливается, какие столбцы должны присутствовать в выходных данных;
- ORDER BY – определяется упорядоченность результатов выполнения операторов. сортировка). Сортировать можно по нескольким полям. ASC возрастающий он принят по умолчанию, DESC убывающий;
Порядок предложений и фраз в операторе SELECT не может быть изменен. Только два предложения SELECT и FROM являются обязательными, все остальные могут быть опущены. SELECT – закрытая операция: результат запроса к таблице представляет собой другую таблицу. Существует множество вариантов записи данного оператора, что иллюстрируется приведенными ниже примерами.
Оператор SELECT определяет поля (столбцы), которые будут входить в результат выполнения запроса. В списке они разделяются запятыми и приводятся в такой очередности, в какой должны быть представлены в результате запроса. Если используется имя поля, содержащее пробелы или разделители, его следует заключить в квадратные скобки. Символом * можно выбрать все поля, а вместо имени поля применить выражение из нескольких имен.
Если обрабатывается ряд таблиц, то (при наличии одноименных полей в разных таблицах) в списке полей используется полная спецификация поля, т.е. Имя_таблицы. Имя_поля.
1.6.1. Предложение FROM
Предложение FROM задает имена таблиц и просмотров, которые содержат поля, перечисленные в операторе SELECT. Необязательный параметр псевдонима – это сокращение, устанавливаемое для имени таблицы.
Пример 1. Показать фамилии и имена студентов из таблицы «студент».
SELECT Fam, Imy FROM Student;
При указании списка полей данные будут выводиться в соответствие с этим списком, а не в соответствии со структурой.
Пример 2. Показать студентов и день рождения.
SELECT Fam, Birthday FROM Student;
SELECT * FROM Student;
Пример 3. Показать города, в которых живут студенты.
SELECT City FROM Student;
SELECT DISTING City FROM Student;
Пример 4. Составить список сведений о всех клиентах.
SELECT * FROM Klient
Пример 5. Составить список всех фирм.
SELECT ALL Klient.Firma FROM Klient Или (что эквивалентно)
SELECT Klient.Firma FROM Klient
Результат выполнения запроса может содержать дублирующиеся значения, поскольку в отличие от операций реляционной алгебры оператор SELECT не исключает повторяющихся значений при выполнении выборки данных.
Предикат DISTINCT следует применять в тех случаях, когда требуется отбросить блоки данных, содержащие дублирующие записи в выбранных полях. Значения для каждого из приведенных в инструкции SELECT полей должны быть уникальными, чтобы содержащая их запись смогла войти в выходной набор.
Причиной ограничения в применении DISTINCT является то обстоятельство, что его использование может резко замедлить выполнение запросов.
1.6.2.. Предложение WHERE
С помощью WHERE – параметра пользователь определяет, какие блоки данных из приведенных в списке FROM таблиц появятся в результате запроса. За ключевым словом WHERE! следует перечень условий поиска, определяющих те строки, которые должны быть выбраны при выполнении запроса. Существует пять основных типов условий поиска (или предикатов):
- сравнение, сравниваются результаты вычисления одного выражения с результатами вычисления другого.
- диапазон: проверяется, попадает ли результат вычисления выражения в заданный диапазон значений.
- принадлежность множеству, проверяется, принадлежит ли результат вычислений выражения заданному множеству значений.
- соответствие шаблону, проверяется, отвечает ли некоторое строковое значение заданному шаблону.
- значение NULL: проверяется, содержит ли данный столбец определитель NULL (неизвестное значение).
Пример 6. Отобразить студентов с ФИО Петров.
SELECT Fam, Imy FROM Student WHERE Fam = "Петров";
Пример 7. Выбрать студентов 3 – его курса получивших стипендию.
SELECT Fam, Imy FROM Student WHERE Kurs = 3 AND Stip > 0;
Запрос выбирающий в следующем порядке Курс, ФИО, Стипендия. SELECT Kurs, Fam, Stip FROM Student;
Сравнение
В языке SQL можно использовать следующие операторы сравнения: = – равенство; < – меньше; > – больше; <= – меньше или равно; >= – больше или равно; <> – не равно.
Пример 8. Показать все операции отпуска товаров объемом больше 20.
SELECT *
FROM Sdelka
WHERE Kolichestvo>20
Более сложные предикаты могут быть построены с помощью логических операторов AND, OR или NOT, а также скобок, используемых для определения порядка вычисления выражения. Вычисление выражения в условиях выполняется по следующим правилам.
- Выражение вычисляется слева направо.
- Первыми вычисляются подвыражения в скобках.
- Операторы NOT выполняются до выполнения операторов AND и OR.
- Операторы AND выполняются до выполнения операторов OR.
Для устранения любой возможной неоднозначности рекомендуется использовать скобки.
Пример 9. Вывести список товаров, цена которых больше или равна 100 и меньше или равна 150.
SELECT Nazvanie,Cena
FROM Tovar
WHERE Cena>=100 And Cena<=150
Пример 10. Вывести список клиентов из Москвы или из Самары.
SELECT Familiya, GorodKlienta
FROM Klient
WHERE GorodKlienta="Москва" Or GorodKlienta ="Самара"
Диапазон
Оператор BETWEEN используется для поиска значения внутри некоторого интервала, определяемого своими минимальным и максимальным значениями. При этом указанные значенья включаются в условие поиска.
BETWEEN <выражение 1> AND <выражение 2>
Пример 11. Вывести список товаров, цена которых лежит в диапазоне от 100 до 150.
SELECT Nazvanie, Cena
FROM Tovar
WHERE Cena Between 100 And 150
Пример 12. Список товаров, цена которых не лежит в диапазоне от 100 до 150.
SELECT * FROM Subject
WHERE Hour BETWEEN 30 AND 40 i*
Пример 13. Получить сведения о студентах получающих стипендию от 100 – 140 руб.
SELECT * FROM Student WHERE Stip BETWEEN 100 AND 140
Пример 14. Вывести список товаров, цена которых лежит в диапазоне от 100 до 150.
SELECT Nazvanie, Cena
FROM Tovar
WHERE Cena Between 100 And 150
Принадлежность множеству
Оператор IN используется для сравнения некоторого значения со списком заданных значений, при этом проверяется, соответствует ли результат вычисления выражения одному из значений в предоставленном списке. При помощи оператора IN может быть достигнут тот же результат, что и в случае применения оператора OR, однако оператор IN выполняется быстрее.
IN (<выражение 1>, <выражение 2>)
Пример 15. Вывести список клиентов из Москвы или из Самары
SELECT Familiya, GorodKlienta
FROM Klient
WHERE GorodKlienta in ("Москва", "Самара")
NOT IN используется для отбора любых значений, кроме тех, которые указаны в представленном списке.
Пример 16. Вывести список клиентов, проживающих не в Москве и не в Самаре.
SELECT Familiya, GorodKlienta
FROM Klient
WHERE GorodKlienta Not in ("Москва","Самара")
Пример 17. Получить список предметов 1 – ого, 2 – ого семестра.
SELECT * FROM Subject WHERE Curs IN (1, 2) 4
Пример 18. Получить фамилии студентов 1 – ого, 4 – ого курса.
SELECT Fam FROM Student WHERE Curs IN (1, 4)
Пример 19. Определить товары, покупку которых осуществляют только клиенты из Москвы, и никто другой.
SELECT DISTINCT Tovar.Nazvanie, Klient. GorodKlientа
FROM Tovar INNER JOIN
(Klient INNER JOIN Sdelka
ON Klient.KodKlientа=Sdelka.KodKlientа)
ON Tovar. КодTovarа=Sdelka. Kod Tovarа WHERE Tovar.Nazvanie NOT IN
(SELECT Tovar.Nazvanie
FROM Tovar INNER JOIN Klient INNER JOIN Sdelka
ON Klient.KodKlientа=Sdelka.KodKlientа)
ON Tovar.KodTovarа=Sdelka.KodTovarа
WHERE Klient.GorodKlientао'Москва')
Пример 20. Какие товары ни разу не купили московские клиенты?
SELECT DISTINCT Tovar.Nazvanie, Klient. GorodKlientа
FROM Tovar INNER JOIN
(Klient INNER JOIN Sdelka
ON Klient.KodKlientа=Sdelka.KodKlientа)
ON Tovar.KodTovarа=Sdelka.KodTovarа WHERE Tovar.Nazvanie NOT IN
(SELECT Tovar.Nazvanie FROM Tovar INNER JOIN
(Klient INNER JOIN Sdelka
ON Klient.KodKlientа=Sdelka.KodKlientа)
ON Tovar. KodTovarа=Sdelka.KodTovarа WHERE.GorodKlientа='Москва')
Соответствие шаблону
С помощью оператора можно выполнять сравнение выражения с заданным шаблоном, в котором допускается использование символов – заменителей:
- Символ % – вместо этого символа может быть подставлено любое Kolichestvo произвольных символов.
- Символ __ заменяет один символ строки.
- [] – вместо символа строки будет подставлен один из возможных символов, указанный в этих ограничителях.
- [^] – вместо соответствующего символа строки будут подставлены все символы, кроме указанных в ограничителях.
Like применяется только с символьными выражениями. Просматривает символьное поле и выявляет совпадает ли значение поля с выражением в операторе Like.
Like <выражение>
Пример 21. Показать фамилии студентов начинающихся с буквы А SELECT * FROM Student WHERE Fam LIKE "A%"
Пример 22. Найти клиентов, у которых в номере телефона вторая цифра – 4.
SELECT Klient.Familiya, Klient.Telefon
FROM Klient
WHERE Klient.Telefon Like"_4%"
Пример 23. Найти клинтов, у которых в номере телефона вторая цифра – 2 или 4.
SELiiCT Klient.Familiya, Klient.Telefon
FROM Klient
WHERE Klient.Telefon Like "_[24]%"
Пример 24. Найти клиентов, у которых в номере телефона вторая цифра 2, 3 или 4.
SELECT Klient.Familiya, Klient.Telefon
FROM Klient.
WHERE Klient.Telefon Like "[2 – 4]%"
Пример 25. Найти клинтов, у которых в фамилии встречается слог "ро".
SELECT Klient.Familiya
FP ОМ Klient.
WHERE Klient.Familiya Like "%ро%"
Значение NULL
Оператор IS NULL используется для сравнения текущего значения со значением NULL – специальным значением, указывающим на отсутствие любого значения. NULL – это не то же самое, что знак пробела (пробел – допустимый символ) или ноль (0 – допустимое число). NULL отличается и от строки нулевой длины (пустой строки).
Пример 26. Найти сотрудников, у которых нет телефона (поле Телефон не содержит никакого значения).
SELECT Familiya, Telefon
FROM Klient
WHERE Telefon Is Null
Пример 27. Выборка сотрудников, у которых есть телефон (поле Телефон, содержит какое – либо значение).
SELECT Klient.Familiya, Klient.Telefon
FROM Klient.
WHERE Klient.Telefon Is Not ull
1.6.3. Предложение ORDER BY
В общем случае строки в результирующей таблице SQL – запроса никак не упорядочены. Однако их можно требуемым образом отсортировать, для чего в оператор SELECT помещается фраза ORDER BY, которая сортирует данные выходного набора в заданной последовательности. Сортировка может выполняться по нескольким полям, в этом случае они перечисляются за ключевым словом ORDER BY через запятую. Способ сортировки задается ключевым словом, указываемым в рамках параметра ORDER BY следом за названием поля, по которому выполняется сортировка. По умолчанию реализуется сортировка по возрастанию. Явно ога задается ключевым словом ASC. Для выполнения сортировки в обратной последовательности необходимо после имени поля, по которому она выполняется, указать ключевое слово DESC. Фраза ORDER BY позволяет упорядочить выбранные записи в порядке возрастания или убывания значений любого столбца или комбинации столбцов, независимо от того, присутствуют эти столбцы в таблице результата или нет. Фраза ORDER BY всегда должна быть последним элементом в операторе SELECT.
Пример 28. Вывести список клиентов в алфавитном порядке.
SELECT Klient.Familiya, Klient.Telefon
FROM Klient
ORDER BY Klient.Familiya,
Пример 29. Показать записи из таблицы предметы в алфавитном порядке наименование предметов.
SELECT * FROM Subject ORDER BY Name;
Пример 30. Показать в убывающем порядке количество часов
SELECT * FROM Subject ORDER BY Hours DESC;
Пример 31. Упорядочить по 2-м полям.
SELECT * FROM Subject ORDER BY Sem, Name;
Лекция "16. Потери напора по длине потока" также может быть Вам полезна.
Во фразе ORDER BY может быть указано и больше одного элемента. Главный (первый) ключ сортировки определяет общую упорядоченность строк результирующей таблицы. Если во всех строках результирующей таблицы значения главного ключа сортировки являются уникальными, нет необходимости использовать дополнительные ключи сортировки. Однако, если значения главного ключа не уникальны, в результирующей таблице будет присутствовать несколько строк с одним и тем же значением старшего ключа сортировки. В этом случае, возможно, придется упорядочить строки с одним и тем же значением главного ключа по какому – либо дополнительному ключу сортировки.
Пример 32. Вывести список фирм и клиентов. Названия фирм упорядочить в алфавитном порядке, имена клиентов в каждой фирме отсортировать в обратном порядке.
SELECT Klient.Firma, Klient.Familiya
FROM Klient
ORDER BY Klient.Firma, Klient.Familiya DESC