Лабораторная работа № 1. Язык запросов SQL

Для создания запросов будем использовать демонстрационную базу данных Northwind. Прежде всего, подсоедините базу данных к SQL Server. После того как БД появится в списке баз данных можно приступать к написанию запросов.

Запросы на выборку.Создание простых запросов.

Для выборки всех полей и всех строк из таблицы необходимо выполнить запрос следующего вида:

select * from [имя_таблицы]

Например, выберем все строки и столбцы из таблицы Employees

select * from Employees

Примечание. Для выполнения запросов необходимо находиться в контексте нужной базы данных или записывать полное название таблицы, включая имя базы данных. Для переключения к нужной базе данных используйте команду USE [имя_БД] (например, USE Northwind) или выберите нужную БД из соответствующего списка на панели SQL Server Management Studio.

Для того чтобы указать SQL-серверу, что необходимо выбрать только ограниченное количество столбцов, то необходимо перечислить столбцы в списке выбора через запятую:

select EmployeeID, LastName, FirstName, Title, BirthDate

from Employees

Для того чтобы переименовать столбец в результирующем наборе данных необходимо использовать ключевое слово AS (хотя это слово можно и опускать):

select EmployeeID AS [Код сотрудника], LastName AS [Фамилия], FirstName AS [Имя], BirthDate [Дата рождения]

from Employees

Для ограничения размера выборки и выбора только определенных строк из таблицы необходимо использовать предложение WHERE. Например, выберем сотрудников только из определенного города:

select EmployeeID, LastName, FirstName, BirthDate

from Employees

where City = 'London'

Выберем только продажи с количеством больше 100:

select * from [Order Details]

where Quantity > 100

Выберем продажи со стоимостью продукта меньше 2,5:

select * from [Order Details]

where UnitPrice < 2.5

Обратите внимание, что символьные данные заключаются в апострофы, а числовые – нет.

Сравнение со значением NULL несколько отличается от обычного. В этом случае нельзя (на самом деле можно с использованием команды SET) использовать обычные операции сравнения, например, следующий запрос вернет неожиданный результат, так как такие записи есть:

select * from employees

where Region = null

Чтобы заставить запрос работать так, как предполагалось вместо операции сравнения “=”необходимо использовать IS [NOT] NULL:

select * from employees

where Region IS NULL

В предложение WHERE можно включать множество логических условий:

select *,

EmployeeID, LastName, FirstName, BirthDate

from Employees

where City = 'London' and TitleOfCourtesy = 'Mr.'

Оператор IN позволяет задать множество значений, например, следующий запрос SELECT вернет сотрудников из Лондона или Сиэтла:

select *

from Employees

where City IN ('London', 'Seattle')

Оператор LIKE позволяет задавать для символьных данных не просто равенство, но осуществлять поиск и сравнение по шаблону. Запишем запрос на выборку всех сотрудников, у которых фамилия начинается с “D”:

select *

from Employees

where LastName LIKE 'D%'

Для задания шаблона можно использовать следующие специальные символы и шаблоны:

Символ-шаблон Описание Пример
% Любая строка длиной от нуля и более символов. Инструкция WHERE Название LIKE '%компьютер%' выполняет поиск и выдает все названия книг, содержащие слово «компьютер».
_ (подчеркивание) Любой одиночный символ. Инструкция WHERE фамилия_автора LIKE '_етров' выполняет поиск и выдает все имена, состоящие из шести букв и заканчивающиеся сочетанием «етров» (Петров, Ветров и т.п.).
[ ] Любой одиночный символ, содержащийся в диапазоне ([a-f]) или наборе ([abcdef]). Инструкция WHERE Фамилия_автора LIKE '[Л-С]омов' выполняет поиск и выдает все фамилии авторов, заканчивающиеся на «омов» и начинающиеся на любую букву в промежутке от «Л» до «С», например Ломов, Ромов, Сомов и т.п.
[^] Любой символ, не содержащийся в диапазоне ([^a-f]) или наборе ([^abcdef]). Инструкция WHERE Фамилия_автора LIKE 'ив[^а]%' выполняет поиск и выдает все фамилии, начинающиеся на «ив», в которых третья буква отличается от «а».

Можно использовать следующие логические операторы:

Оператор Значение
ALL TRUE, если все сравнения в наборе равны TRUE.
AND TRUE, если оба выражения типа Boolean равны TRUE.
ANY TRUE, если любое из сравнений в наборе равно TRUE.
BETWEEN TRUE, если операнд принадлежит указанному диапазону.
EXISTS TRUE, если вложенный запрос возвращает как минимум одну строку.
IN TRUE, если операнд содержится в заданном списке выражений.
LIKE TRUE, если оператор удовлетворяет шаблону.
NOT Меняет значение оператора типа Boolean на противоположное.
OR TRUE, если одно из выражений типа Boolean равно TRUE.
SOME TRUE, если некоторые из сравнений в наборе равны TRUE.

И следующие операторы сравнения

Оператор Значение
= (равно) Равно
> (больше) Больше
< (меньше) Меньше
>= (больше или равно) Больше или равно
<= (меньше или равно) Меньше или равно
<> (не равно) Не равно
!= (не равно) Не равно (не входит в стандарт SQL-92)
!< (не меньше) Не меньше (не входит в стандарт SQL-92)
!> (не больше) Не больше (не входит в стандарт SQL-92)

Запишем запрос, возвращающий работников, нанятых после 1 января 1994 года. Обратите внимание, что тип дата-время не является символьным:

select * from employees

where HireDate >= '01.01.1994'

Задание.

1. Составить запрос на выборку всех столбцов и только тех строк из таблицы Order Details, где цена единицы (UnitPrice) больше 15 и количество между 24 и 30.

2. Найти всех сотрудников, в номере телефона которых встречается последовательность символов '77'

3. Найти список заказов (Orders), сделанных в 1998 году.

4. Найти список заказов, сделанных в 1998 году, заключенных сотрудником с кодом 5.

5. Найти список заказов, сделанных в 1998 году, отправленных в Италию (ShipCountry).

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

Команда SELECT является универсальной и может быть применена как к таблицам, так и к любым другим данным, например:

select 5, null, 5*5, 'New'

Создадим выборку с вычисляемым столбцом, в котором будет сумма, равная цене за единицу, умноженной на количество из таблицы Order Details:

select *, UnitPrice*Quantity as [Summa]

from [order details]

Задание.

1. Добавить в таблицу еще столбец, с сумой скидки по продаже.

2. Добавить еще один столбец, с фактической стоимостью, равной «сумма – скидка»