Лекция 5. Запросы на выборку. Оператор select. Соединение таблиц в запросах.
Синтаксис оператора SELECT очень сложен и состоит из множества фраз и ключевых слов, в упрощенном виде выглядит так:
SELECT [TOP n [PERCENT]] список_столбцов
FROM список_источников
[WHERE условие_поиска]
[ORDER BY выражение]
Обязательными являются только первая и вторая фразы (разделы) оператора SELECT. Первая фраза, SELECT список_столбцов, задает столбцы, которые будут возвращены запросом. Список столбцов может содержать реальные столбцы из таблицы и представления (виды), на которых основывается запрос, либо содержать вычисляемые столбцы, получаемые из оригинальных столбцов.
Вторая фраза, FROM список_источников, задает таблицы и представления, на которых основывается запрос.
Для выполнения примеров создадим таблицу и наполним её данными.
CREATE TABLE Student
(
idSt int identity primary key, --код студента
nameSt varchar(20), --имя
lNameSt varchar(20), --отчество
sNameSt varchar(30), --фамилия
dateB datetime, --дата рождения
placeB varchar(200), --место рождения
adressByReg varchar(300), --адрес регистрации
adressByFact varchar(300), --адрес фактического проживания
dateZach datetime, --дата зачисления
nameGroup varchar(10), --группа
nameFacult varchar(200), --факультет
priceKurs money, --стоимость обучения
sumOpl money --оплаченная сумма
)
INSERT INTO Student VALUES
('Анна', 'Ивановна', 'Иванова','02.08.1990', 'г. Белгород', 'г.Белгород, ул. Садовая, д.4',
'г.Белгород, ул. Садовая, д.4', '01.09.2010', 'ИС-11', 'Информационных систем и защиты информации',40000,20000);
INSERT INTO Student VALUES
('Антон', 'Сергеевич', 'Смирнов','04.06.1990', 'г. Курск', 'г.Курск, ул. Мира, д.4',
'г.Белгород, ул. Садовая, д.120, кв.3', '01.09.2010', 'ИС-11', 'Информационных систем и защиты информации',40000,35000);
INSERT INTO Student VALUES
('Евгения', 'Петровна', 'Семенова','04.01.1990', 'г. Белгород', 'г.Белгород, ул. Щорса, д.2',
'г.Белгород, ул. Щорса, д.2', '01.09.2010', 'ИС-11', 'Информационных систем и защиты информации',40000,40000);
INSERT INTO Student VALUES
('Алексей', 'Анатольевич', 'Бойченко','12.09.1990', 'город Белгород', 'г.Белгород, ул. Студенческая, д.23, кв.5',
'г.Белгород, ул. Студенческая, д.23, кв.5', '01.09.2010', 'ИС-21', 'Информационных систем и защиты информации',40000,40000);
INSERT INTO Student VALUES
('Александр', 'Федорович', 'Петров','09.03.1991', 'г. Воронеж', 'г.Воронеж, ул. Победы, д.2',
'г.Белгород, ул. Некрасова, д.54', '01.09.2010', 'ИС-21', 'Информационных систем и защиты информации',40000,15000);
В общем виде синтаксис команды SELECT следующий:
SELECT <список столбцов>
FROM <список таблиц>
WHERE <условие отбора>
GROUP BY <список столбцов>
HAVING <условие на группы>
ORDER BY <спецификатор сортировки>
В запросе обязательно должны быть предложения SELECT и FROM. Остальные выражения используются по мере необходимости.
Выражение SELECT включает в себя список столбцов, возвращаемых запросом.
Выражение FROM включает в себя список таблиц для выполнения запроса.
Выражение WHERE устанавливает условие поиска, если необходимо вернуть не все строки, а только ту часть, которая удовлетворяет условиям поиска.
Выражение GROUP BY позволяет создать итоговой запрос, разбитый на группы.
Выражение HAVING определяет условие возврата групп и используется только совместно с GROUP BY.
Выражение ORDER BY определяет порядок сортировки результирующего набора данных.
Простейшим случаем использования оператора SELECT является выборка всех столбцов из одной таблицы.
Как большинство версий языка SQL, Transact-SQL позволяет вам использовать знак звездочки (*), если вы хотите задать все столбцы, поэтому в этом простом случае оператор будет иметь следующую форму:
SELECT *
FROM имя_таблицы
Для нашего примера:
SELECT * FROM Student;
Использование * не рекомендуется для практического использования, поскольку на SQL Server возлагается задача определения количества столбцов в таблице и их названий.
Часто требуется, чтобы запрос возвращал только избранные столбцы. Для этого следует указать возвращаемые столбцы оператора SELECT. Возвращаемый столбец может представлять собой:
- имя конкретного столбца в таблице;
- константу, показывающую, что в каждой строке результатов запроса должно содержаться одно и то же значение;
- выражение.
Указание имен столбцов из таблицы:
SELECT nameSt, lNameSt, sNameSt
FROM Student;
Указание константы:
SELECT 'БУКЭП', nameSt, lNameSt, sNameSt
FROM Student;
Столбцам можно присвоить псевдонимы, например:
SELECT nameSt as [Имя студента],
lNameSt as [Отчество],
sNameSt as [Фамилия]
FROM Student;
Использование квадратных скобок обязательно, если псевдонимы содержат пробелы или служебные команды SQL Server.
В дополнение к столбцам, которые просто отображают информацию из исходных таблиц и представлений, запрос может также содержать столбцы, которые вычисляются на основе исходных данных, функций SQL Server или любой их комбинации. Вычисляемый столбец создается путем задания выражения в качестве столбца. В примере ниже первый столбец получается в результате конкатенации (сцепления) строк с помощью оператора +, второй столбец – путем вычитания из суммы к оплате оплаченной суммы, третий столбец является результатом работы встроенной функции GETDATE().
SELECT sNameSt+' '+nameSt+' '+lNameSt as [Фамилия, имя, отчество],
priceKurs-sumOpl as [Сумма задолженности],
GETDATE() as [Текущая дата]
FROM Student;
Арифметические операторы:
+ сложение
- вычитание
* умножение
/ деление