Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6.96 Mб
Скачать

Секция where. Директива where содержит условия отбора (предикат). Синтаксис where выглядит следующим образом:

WHERE [NOT] <условие1> [ AND | OR <условие2>]

Запрос возвращает только строки, для которых предикат имеет значение true. Типы предикатов, используемых в предложении WHERE:

Сравнение: =(равно); <> (не равно); !=(не равно); > (больше); < (меньше); >= (больше или равно);<= (меньше или равно); BETWEEN, IN, LIKE, CONTAINING, IS NULL, EXIST, ANY, ALL.

Предикат BETWEEN задает диапазон значений, для которого истинно значение выражения. Например:

SELECT StudName, Stipend FROM Student WHERE Stipend BETWEEN 120 AND 200 – получить список студентов, стипендия которых больше 120 и меньше 200.

Тот же запрос с использованием операторов сравнения будет выглядеть следующим образом:

SELECT StudName, Stipend FROM Student WHERE Stipend>=120000 AND Stipend<=200000

Предикат IN (NOT IN) проверяет, входит ли значение, предшествующее ключевому слову "IN", в указанный в скобках список. Например:

SELECT name FROM employee WHERE job_code IN ("VP", "Admin", "Finan") – получить список сотрудников, занимающих должности "вице-президент", "администратор", "финансовый директор".

Предикат LIKE проверяет, соответствует ли данное символьное значение строке с указанной маской. В качестве маски используются все разрешенные символы (с учетом верхнего и нижнего регистров), а также специальные символы: % – замещает любое количество символов, _ – замещает только один символ. Например:

SELECT StudName FROM Student WHERE StudName LIKE "Ф%" – получить список студентов, фамилии которых начинаются с буквы ‘Ф’.

Предикат CONTAINING аналогичен предикату LIKE, однако он не чувствителен к регистру букв.

Примеры запросов с операторами сравнения:

SELECT * FROM Table WHERE Field > 100

SELECT * FROM Table WHERE Field1 <= (Field2 + 25)

Операция соединения позволяет соединять строки из более чем одной таблицы:

SELECT StudName, Exammark FROM Students, Exams WHERE Students.Stud_Id =Exams.Stud_Id – получить список студентов и экзаменационных оценок.

Операция объединения позволяет объединять результаты отдельных запросов. Предложение UNION объединяет вывод двух или более SQL-запросов.

SELECT name FROM employee WHERE country = "Беларусь" UNION SELECT contact_nаме, FROM customer WHERE country = "Беларусь"; – получить список работников и заказчиков, проживающих в Беларуси.

Язык SQL, в отличие от языков программирования, имеет встроенные средства поддержки факта отсутствия каких-либо данных. Осуществляется это с помощью NULL-концепции. NULL – это индикатор, говорящий пользователю (и SQL) о том, что данные в поле записи отсутствуют. Поэтому его нельзя использовать в операциях сравнения. Выражение IS [NOT] NULL проверяет данные на [не]пустые значения:

SELECT * FROM Table WHERE Field IS NOT NULL

SELECT * FROM Table WHERE Field IS NULL

Выражение [NOT] LIKE используется при проверке текстовых данных на [не]соответствие заданному шаблону. Символ ‘%’ (процент) в шаблоне за­меняет собой любую последовательность символов, а символ ‘_’ (подчеркивание) – один любой символ.

SELECT * FROM Employees WHERE Name LIKE ‘Иван%’

Попадающие под заданное условие фамилии: Иванов

SELECT * FROM Employees WHERE Name LIKE ‘__д%’

Попадающие под заданное условие фамилии: Сидоров

Выражение [NOT] IN проверяет значения на [не]вхождение в определенный список:

SELECT * FROM Employees WHERE Position IN (‘Начальник’, ‘Менеджер’)

Выражение [NOT] BETWEEN проверяет значения на [не]попадание в некоторый диапазон:

SELECT * FROM Employees WHERE Salary BETWEEN 200 AND 500

Этот запрос вернет список работников, зарплата которых больше либо равна 200 у.е. и меньше либо равна 500 у.е.

Несколько условий поиска могут комбинироваться посредством логических операторов AND, OR или NOT:

SELECT * FROM Employees WHERE Position IN

(‘Начальник’, ‘Менеджер’) AND Salary BETWEEN 200 AND 500

SELECT * FROM Employees WHERE (Position = ‘Начальник’ OR Position = ‘Менеджер’)AND Salary BETWEEN 200 AND 500

SELECT * FROM Employees WHERE NOT (Position = ‘Начальник’ OR Position = ‘Менеджер’)

Необязательная секция ORDER BY в команде SELECT предназначена для сортировки строк результирующего набора данных. Ключевое слово ASC предписывает производить сортировку по возрастанию, а DESC – по убыванию. Если ASC и DESC отсутствуют, по умолчанию подразумевается ASC. Например, выберем записи о начальниках и отсортируем результат в порядке убывания размера зарплат:

SELECT * FROM Employees WHERE Position = ‘Начальник’

ORDER BY Salary DESC

Следующий запрос отсортирует сотрудников по отделам (в порядке возрастания номера отдела) и по размеру зарплат внутри каждого отдела (в порядке убывания зарплаты):

SELECT * FROM Employees ORDER BY DeptNum ASC,

Salary DESC

Ключевое слово ASC можно опустить, ибо оно действует по умолчанию:

SELECT * FROM Employees

ORDER BY DeptNum, Salary DESC