Выборка данных (оператор select)

Простейшие SELECT-запросы

Оператор SELECT (ВЫБРАТЬ) языка SQL является самым важным и наиболее часто используемым оператором. Он предназначен для выборки информации из таблиц базы данных. Упрощенный синтаксис оператора SELECT выглядит следующим образом.

SELECT [DISTINCT] <список выражений над атрибутами и константами>
FROM <список таблиц>

[WHERE <условие выборки ]

[GROUP BY <скисок итрибутов>]

[HAVING <условие>]

[UNION <выражение с оператором SELECT>]

[ORDER BY <список атрибутов>];

В квадратных скобках указаны элементы, которые могут отсутствовать в запросе.

Ключевое слово SELECT сообщает базе данных, что данное предложение является запросом на выборку информации. После слова SELECT через запятую перечисляются наименования полей (список атрибутов), содержимое которых запрашивается.

Обязательным ключевым словом в предложении-запросе SELECT является слово FROM (ИЗ). За ключевым словом FROM указывается список разделенных запятыми имен таблиц, из которых извлекается информация.

Например,

SELECT NAME, SURNAME FROM STUDENT;

Любой SQL-запрос должен заканчиваться символом ";" (точка с запятой).

Приведенный запрос осуществляет выборку всех значений полей NAME и SURNAME из таблицы STUDENT.

Его результатом является таблица:

Порядок следования столбцов в этой таблице соответствует порядку полей NAME и SURNAME, указанному в запросе; а не их порядку во входной таблице STUDENT.

Если необходимо вывести значения всех столбцов таблицы, то можно вместо перечисления их имен использовать символ "*" (звездочка).

SELECT *

FROM STUDENT;

В данном случае в результате выполнения запроса будет получена вся таблица STUDENT.

Еще раз обратим внимание на то, что получаемые в результате SQL-запроса таблицы не в полной мере отвечают определению реляционного отношения. В частности, в них могут оказаться кортежи с одинаковыми значениями атрибутов.

Например, запрос "Получить список названий городов, где проживают студенты, сведения о которых находятся в таблице STUDENT", можно записать в следующем виде:

SELECT ClTY FROM STUDENT;

Его результатом будет таблица

Видно, что в таблице встречаются одинаковые строки (выделены жирным шрифтом).

Для исключения из результата SELECT-запроса повторяющихся записей используется ключевое слово DISTINCT (ОТЛИЧНЫЙ). Если запрос SELECT извлекает множество полей, то DISTINCT исключает дубликаты строк, в которых значения всех выбранных полей идентичны.

Запрос "Определить список названий различных-roponoa, где проживают студенты, сведения о которых находятся в таблице STUDENT" можно записать в следующем виде.

SELECT DISTINCTCITY FROM STUDENT;

В результате получим таблицу, в которой дубликаты строк исключены:

Ключевое слово ALL (ВСЕ), в отличие от DISTINCT, оказывает противоположное действие, т. е. при его использовании повторяющиеся строки включаются в состав выходных данных. Режим, задаваемый ключевым словом ALL, действует по умолчанию, поэтому в реальных запросах для этих целей оно практически не используется.

Использование в операторе SELECT предложения, определяемого ключевым словом WHERE (ГДЕ), позволяет задавать выражение- условия (предикат), принимающее значение истина или ложь (а также неизвестно при использовании NULL) для значений полей строк таблиц, к которым обращается оператор SELECT. Предложение WHERE определяет, какие строки указанных таблиц должны быть выбраны. В таблицу, являющуюся результатом запроса, включаются только те строки, для которых условие (предикат); указанное в предложении WHERE, принимает значение истина.

Пример.

Написать запрос, выполняющий выборку имен (NAME) всех студентов с фамилией (SURNAME) Петров, сведения о которых находятся в таблице STUDENT.

SELECT SURNAME, NAME

FROM STUDENT

WHERE SURNAME = 'Петров'

Результатом этого запроса будет таблица

выборка данных (оператор select) - student2.ru

В задаваемых в предложении WHERE условиях могут использоваться операции сравнения, определяемые следующими операторами: = (равно), > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), <> (не равно), а также логические операторы AND, ORи NOT.

Например, запрос для получения имен и фамилий студентов, обучающихся на третьем курсе и получающих стипендию (размер стипендии больше нуля) будет выглядеть таким образом:

SELECT NAME, SURNAME

FROM STUDENT

WHERE (KURS = 3 AND STIPEND > 0);

Результат выполнения этого запроса имеет вид:

выборка данных (оператор select) - student2.ru

УПРАЖНЕНИЯ

1. Напишите запрос к таблице SUBJECT, выводящий для каждой ее строки идентификатор (номер) предмета обучения, его наименование, семестр, в котором он читается, и количество отводимых на него часов.

2. Напишите запрос, позволяющий вывести -все строки таблицы EXAM_MARKS, в которых предмет обучения имеет номер (SUBJ_ID), равный 12.

3. Напишите запрос, выбирающий все данные из таблицы STUDENT, расположив столбцы таблицы в следующем порядке: KURS, SURNAME, МАМЕ, STIPEND.

4. Напишите запрос SELECT, который для каждого предмета обучения (SUBJECT) выполняет вывод его наименования (SUBJ_NAMЕ) и следом за ним количества часов (HOUR) в 4-м семестре (SEMESTR).

5. Напишите запрос, позволяющий получить из таблицы

EXAM_MARKS значения столбца МАRК (экзаменационная оценка) для всех студентов, исключив из списка повторение одинаковых строк.

6. Напишите запрос, который выполняет вывод списка фамилий студентов, обучающихся на третьем и более старших курсах.

7. Напишите запрос, выбирающий данные фамилию, имя и номер курса для студентов, получающих стипендию больше 140.

8. Напишите запрос, выполняющий выборку нз таблицы SUBJECT названий всех предметов обучения, на которые отводится более 30 часов.

9. Напишите запрос, который выполняет вывод.списка университетов, рейтинг которых превышает 300 баллов.

10. Напишите запрос к таблице STUDENT для вывода списка всех студентов со стипендией wне меньше 100, живущих в Воронеже- с указанием фамилии (SURNAME), имени (NAME) и номера курса (KURS)

11. Какие данные будут получены в результате выполнения запроса?// ничего

SELECT *

FROM STUDENT

WHERE(STIPEND < 100 OR

NOT (BIRTHDAY >= '#10/03/1980#'

AND STUDENT_ID > 1003));

12. Какие данные будут получены в результате. выполнения запроса? //ничего

SELECT *

FROM STUDENT

WHERE NOT ((BIRTHDAY = '#10/03/1980#' OR STIPEND > 100)

AND STUDENT_ID ) >= 1003);

13. Напишите запрос для получения списка студентов старше 25 лет, обучающихся на 1-м курсе.

14. Напишите запрос для получения списка предметов, для которых в 1-м семестре отведено более 100 часов.

15. Напишите запрос для получения списка преподавателей, живущих в Воронеже.

16. Напишите запрос для получения списка университетов, расположенных в Москве и имеющих рейтинг меньший, чем у ВГУ. Константу в ограничении на рейтинг можно определить по этой же таблице.

17. Напишите запрос для получения списка студентов, проживающих в Воронеже и не получающих стипендию.

18. Напишите запрос для получения списка студентов моложе--20 лет.

19. Напишите запрос для получения списка студентов без определенного места жительства.

Наши рекомендации