Цель работы: Научиться создавать запросы с условием, в т.ч. с использованием логических операторов, сортировать данные по возрастанию и убыванию.
Ключевые слова:операторы WHERE, GROUP BY, ORDER BY, HAVING ,IN, BETWEEN, LIKE, is NULL.
Теоретический материал:
Использование в операторе SELECT предложения, определяемого ключевым словом WHERE (где), позволяет задавать выражение условия (предикат), принимающее значение истина или ложь для значений полей строк таблиц, к которым обращается оператор SELECT. Предложение WHERE определяет, какие строки указанных таблиц должны быть выбраны. В таблицу, являющуюся результатом запроса, включаются только те строки, для которых условие (предикат), указанное в предложении WHERE, принимает значение истина.
В задаваемых в предложении WHERE условиях могут использоваться операции сравнения, определяемые операторами = (равно), > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), <> (не равно), а также логические операторы AND, OR и NOT.
Пример 1. Выбрать студентов 3 группы.
SELECT * FROM DANNIE WHERE KOD_GRUPPY=3
Пример 2. Вывести родителей, работающих водителями и поварами.
SELECT FIO_ROD FROM RODITELI WHERE RABOTA=’ВОДИТЕЛЬ’ OR RABOTA=’ПОВАР’
Оператор GROUP BY (группировать по) служит для группировки записей по значениям одного или нескольких столбцов. Он собирает записи в группы и упорядочивает группы по алфавиту (точнее по ASCII- кодам символов).
Пример 3. Вывести родителей студентов сгруппированных по месту работы.
SELECT RABOTA, FIO_ROD FROM RODITELI GROUP BY RABOTA
Оператор HAVING (имеющие, при условии) обычно применяются совместно с оператором группировки GROUP BY и задает фильтр записей в группах
Пример 4. Вывести родителей студентов сгруппированных по месту работы, если они водители или учителя.
SELECT RABOTA, FIO_ROD FROM RODITELI GROUP BY RABOTA HAVING (RABOTA=‘ВОДИТЕЛЬ’) OR (RABOTA=’УЧИТЕЛЬ’)
При задании логического условия в предложении WHERE могут быть использованы операторы IN, BETWEEN, LIKE, IS NULL.
Операторы IN (равен любому из списка) и NOT IN (не равен ни одному из списка) используются для сравнения проверяемого значения поля с заданным списком. Этот список значений указывается в скобках справа от оператора IN.
Построенный с использованием IN предикат (условие) считается истинным, если значение поля, имя которого указано слева от IN, совпадает (подразумевается точное совпадение) с одним из значений, перечисленных в списке, указанном в скобках справа от IN.
Предикат, построенный с использованием NOT IN, считается истинным, если значение поля, имя которого указано слева от NOT IN, не совпадает ни с одним из значений, перечисленных в списке, указанном в скобках справа от NOT IN.
Пример 5. Вывести родителей, работающих водителями и поварами.
SELECT FIO_ROD FROM RODITELI WHERE RABOTA IN (‘ВОДИТЕЛЬ’, ’ПОВАР’)
Пример 6. Вывести всех родителей, кроме работающих учителями и врачами.
SELECT FIO_ROD FROM RODITELI WHERE RABOTA NOT IN (‘УЧИТЕЛЬ’, ’ВРАЧ’)
Оператор BETWEEN используется для проверки условия вхождения значения поля в заданный интервал, то есть вместо списка значений атрибута этот оператор задает границы его изменения.
Пример 7. Вывести информацию о родителях с кодом от 2 до 9:
SELECT * FROM RODITELI WHERE KOD_RODITEL BETWEEN 2 AND 10;
Левая граница (в данном случае 2) входитво множество значений, с которыми производится сравнение, правая граница (в данном случае 10) не входит. Оператор BETWEEN может использоваться как для числовых, так и для символьных типов полей.
Пример 8. Вывести фамилии родителей, заглавные буквы которых находятся в диапозоне от А до И.
SELECT * FROM RODITELI WHERE FAM BETWEEN ‘А’ AND ‘К’;
Оператор LIKE(поиск значений, удовлетворяющих образцу) просматривает строковые значения полей с целью определения, входит ли заданная в операторе LIKE подстрока (образец поиска) в символьную строку-значение проверяемого поля.
Для выборки строковых значений по заданному образцу подстроки можно применять шаблон искомого образца строки, использующий следующие символы:
• символ подчеркивания «_», указанный в шаблоне, определяет возможность наличия в указанном месте одного любогосимвола;
• символ «%» допускает присутствие в указанном месте проверяемой строки последовательности любых символов произвольной длины.
Этот оператор применим только к символьным полям типа CHAR или VARCHAR.
Пример 9. Выбрать сведения о родителях, фамилии которых начинаются на букву «П».
SELECT * FROM RODITELI WHERE FAM LIKE 'П%'
Оператор IS NULLвыводит строки, содержащие значение NULL в проверяемом поле.
Пример 10. Выбрать записи, содержащие пустые значения в данных о работе родителей.
SELECT * FROM RODITELI WHERE RABOTA IS NULL;
Для сортировки в SQL существует ключевое слово ORDER BY, после которого указывается имя столбца, по которому будет происходить сортировка. Команда имеет следующий синтаксис:
SELECT <поля> FROM <таблица> ORDER BY <поле>
После ORDER BY <поле> можно указать направление сортировки. По умолчанию записи сортируются по возрастанию (ASC), ключевое слово DESC задает сортировку в порядке, обратном алфавитному.
Пример 11. Отсортировать фамилии родителей в алфавитном порядке.
SELECT FIO_ROD FROM RODITELI ORDER BY FIO_ROD
Пример 12. Отсортировать место работы родителей в порядке, обратном алфавитному.
SELECT RABOTA FROM RODITELI ORDER BY RABOTA DESC
Сортировку можно производить сразу по нескольким столбцам. В этом случае сортировка идет сначала по первому полю в указанном направлении, а если в этом столбце есть одинаковые значения, то они будут отсортированы по второму полю.
Пример 13. Отсортировать место работы родителей в алфавитном порядке, а фамилии в порядке, обратном алфавитному.
SELECT FIO_ROD , RABOTA FROM RODITELI ORDER BY FIO_ROD, FIO_ROD DESC;
Задания:
1. Вывести фамилии студентов, обучающихся в группе с кодом 3.
2. Вывести название региона с кодом 1.
3. Вывести фамилию преподавателя с кодом 2.
4. Вывести информацию о студентах, обучающихся в группах с кодами 1 и 2.
5. Вывести названия дисциплин с кодами 2 и 3.
6. Вывести имена студентов, заглавные буквы которых находятся в диапазоне от «В» до «М».
7. Вывести данные о студентах, фамилии которых начинаются на букву «М».
8. Выбрать записи, содержащие пустые значения о номере квартире студентов (проживающих в доме).
9. Отсортировать фамилии студентов в алфавитном порядке.
10. Вывести данные о студентах, отсортировав номера телефонов по возрастанию.
11. Отсортировать студентов по номеру группы в порядке возрастания, а для одинаковых групп - фамилии в порядке, обратном алфавитному.
12. Выбрать студентов, фамилии которых заканчиваются на «а».
13. Отсортировать в порядке возрастания фамилии студентов, чьи отчества заканчиваются на «ич».
14. Отсортировать в порядке возрастания фамилии студентов, обучающихся в группе 3.
15. Вывести студентов, родившихся в 1990 году.
16. Отсортировать в алфавитном порядке фамилии студентов, у которых начальные буквы имени заключены в диапазоне от «И» до «Я».
17. Вывести данные о студентах с фамилиями «Петров», «Смелов».
18. Вывести в порядке, обратном алфавитному, все имена и фамилии студентов, родившихся не в 1991 году.
19. Вывести информацию о всех студентах, кроме Варечкина и Климовой.
20. Выбрать студентов, у которых номера телефонов связи МТС и начинаются с 3.
21. Сгруппировать список улиц по коду города.
22. Сгруппировать данные о студентах по дате рождения.
23. Вывести по группам коды городов для улиц Ставропольская и Комсомольская.
24. Сгруппировать по улицам данные о студентах, обучающихся в группе с кодом 1.
25. Отсортировать в алфавитном порядке фамилии студентов, у которых в отчестве встречается «..ев..».