Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бд / Лекция 5 - Запросы.docx
Скачиваний:
25
Добавлен:
14.05.2015
Размер:
97.54 Кб
Скачать

Лекция 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;

Арифметические операторы:

+ сложение

- вычитание

* умножение

/ деление