SQL (structured query language — язык структурированных запросов)

Содержание

Слайд 2

Содержание

1. ВВЕДЕНИЕ В SQL 1.1. Общее представление о SQL
1.2. Отличия SQL от языков

Содержание 1. ВВЕДЕНИЕ В SQL 1.1. Общее представление о SQL 1.2. Отличия
программирования
1.3. Трехзначная логика. Основные операции в трехзначной логике
1.4. Реализации SQL
1.5. Основные понятия языка
1.6. Типы данных, доступные в SQL
1.7. Предикаты
2. ЗАПРОСЫ SQL
2.1. Оператор SELECT
2.2. Групповые операции в запросах
2.3. Запросы с несколькими таблицами (соединение таблиц)
2.4. Использование подзапросов (подчиненные запросы)
2.5. Запросы на модификацию данных
2.6. Перекрестные запросы
3. СОЗДАНИЕ БД В SQL

Куликова Елена Васильевна

Слайд 3

1. ВВЕДЕНИЕ В SQL 1.1. Общее представление о SQL

Куликова Елена Васильевна

1. ВВЕДЕНИЕ В SQL 1.1. Общее представление о SQL Куликова Елена Васильевна

Слайд 4

Понятие языка

SQL (обычно произносимый как «СИКВЭЛ» или «ЭСКЮЭЛЬ») символизирует собой структурированный язык

Понятие языка SQL (обычно произносимый как «СИКВЭЛ» или «ЭСКЮЭЛЬ») символизирует собой структурированный
запросов.
Это язык, который дает возможность работать в реляционных базах данных.
Конкретные реализации языка SQL незначительно отличаются в различных SQL-серверах, однако базовые предложения остаются одинаковыми для всех реализаций.

Куликова Елена Васильевна

Слайд 5

Официальный стандарт - ANSI/ISO

Язык SQL имеет официальный стандарт - ANSI/ISO (ANSI

Официальный стандарт - ANSI/ISO Язык SQL имеет официальный стандарт - ANSI/ISO (ANSI
- Американский национальный институт стандартов, ISO – Международный организация по стандартизации).

Куликова Елена Васильевна

Слайд 6

1.2. Отличия SQL от языков программирования

SQL не является языком программирования в традиционном

1.2. Отличия SQL от языков программирования SQL не является языком программирования в
представлении.

На SQL пишутся не программы, а запросы к базе данных.
Поэтому SQL - декларативный язык. Это означает, что с его помощью можно сформулировать, что необходимо получить, но нельзя указать, как это следует сделать.
В частности, в отличие от ЯП (Си, Паскаль), в SQL отсутствуют такие операторы, как if...then...else, for, while, хотя в некоторых версиях (TRANSACT_SQL) они есть.

Работа с отношением

SQL работает не с отдельной записью, а с отношением.

Трехзначная логика

В большинстве ЯП ВУ используют двухзначную логику (TRUE и FALSE). SQL анализирует NULL-значения и использует трехзначную логику (добавляя значение «неизвестно» Unknown).
NULL-значение («неизвестно») нельзя путать с нулем: нуль – это определенное значение, a NULL подразумевает, что никакого определенного значения в поле или в переменную никогда не записывалось.

SQL – избыточный язык.

Существует много способов формирования одного и того же запроса.

SQL – лаконичный язык.

Имеет гораздо меньше зарезервированных слов, чем в известных языках.

Куликова Елена Васильевна

Слайд 7

1.3. Трехзначная логика. Основные операции в трехзначной логике

Операция НЕ

Куликова Елена Васильевна

1.3. Трехзначная логика. Основные операции в трехзначной логике Операция НЕ Куликова Елена Васильевна

Слайд 8

1.3. Трехзначная логика. Основные операции в трехзначной логике

Операция ИЛИ

Куликова Елена Васильевна

1.3. Трехзначная логика. Основные операции в трехзначной логике Операция ИЛИ Куликова Елена Васильевна

Слайд 9

1.3. Трехзначная логика. Основные операции в трехзначной логике

Операция И

Куликова Елена Васильевна

1.3. Трехзначная логика. Основные операции в трехзначной логике Операция И Куликова Елена Васильевна

Слайд 10

1.3. Трехзначная логика. Основные операции в трехзначной логике

ЯВЛЯЕТСЯ ли (IS)

Куликова Елена Васильевна

1.3. Трехзначная логика. Основные операции в трехзначной логике ЯВЛЯЕТСЯ ли (IS) Куликова Елена Васильевна

Слайд 11

1.4. Реализации SQL

Интерактивный (автономный) SQL представляет собой непосредственный ввод команд пользователем. Интерактивный

1.4. Реализации SQL Интерактивный (автономный) SQL представляет собой непосредственный ввод команд пользователем.
SQL используется в специальных утилитах (типа WISQL или DBD), позволяющих в интерактивном режиме вводить запросы с использованием команд SQL, посылать их для выполнения на сервер и получать результаты в предназначенном для этого окне.

Статический SQL – это записанный заранее код SQL, используемый в приложениях.

Динамический SQL – это код, сгенерированный приложением во время работы, когда заранее неизвестны желания пользователя.

Куликова Елена Васильевна

Слайд 12

1.5. Основные понятия языка

Оператор SQL состоит из набора лексем.
Лексемы – это

1.5. Основные понятия языка Оператор SQL состоит из набора лексем. Лексемы –
ключевые (зарезервированные) слова, идентификаторы, выражения, операторы.
Все ключевые слова делят на группы:

инструкции

Пример. DROP, SELECT

предложения

Пример. DISTINCT, WHERE

модификаторы

Пример. ORDER BY

операторы

Пример. UNION, JOIN

статфункции

Пример. SUM,COUNT

прочие

Пример. ANY, AS

Куликова Елена Васильевна

Слайд 13

Операторы языка разбиты на категории в соответствии с их функциями:

1
язык определения данных

Операторы языка разбиты на категории в соответствии с их функциями: 1 язык
(Data Definition Language, DDL);
2
язык выполнения запросов (Data Query Language, DQL);
3
язык манипулирования данными (Data Manipulation Language, DML);
4
управление курсором (Cursor Control Language, CCL);
5
управление транзакциями (Transaction Processing Language, TPL);
6
язык управления данными (Data Control Language, DCL);
7
обеспечение целостности.

это не отдельные языки, а различные команды одного языка. Такое деление проведено только лишь с точки зрения различного функционального назначения этих команд.

Куликова Елена Васильевна

Слайд 14

Язык определения данных DDL

Язык определения данных используется для создания и изменения структуры

Язык определения данных DDL Язык определения данных используется для создания и изменения
базы данных и ее составных частей – таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур.
Основными его командами являются:
CREATE (создать),
ALTER (изменить),
DROP (удалить).

Куликова Елена Васильевна

Слайд 15

Язык выполнения запросов DQL

Язык выполнения запросов используется для различных выборок из данных

Язык выполнения запросов DQL Язык выполнения запросов используется для различных выборок из
и состоит из команды SELECT (выбрать).

Куликова Елена Васильевна

Слайд 16

Язык манипулирования данными DML

Язык манипулирования данными используется для выполнения действий над данными.

Язык манипулирования данными DML Язык манипулирования данными используется для выполнения действий над

Включает команды
INSERT (вставить),
UPDATE (обновить),
DELETE (удалить).

Куликова Елена Васильевна

Слайд 17

Язык управления курсором CCL

Язык управления курсором включает команды, оперирующие курсором.
Под курсором

Язык управления курсором CCL Язык управления курсором включает команды, оперирующие курсором. Под
понимают данные результатов запросов.

Куликова Елена Васильевна

Слайд 18

Язык управления транзакциями TPL

Язык управления транзакциями объединяет команды DML в группы (транзакции).
Состоит

Язык управления транзакциями TPL Язык управления транзакциями объединяет команды DML в группы
из команд:
COMMIT,
ROLLBACK,
SET TRANSACTION.

Куликова Елена Васильевна

Слайд 19

Язык управления данными DCL

Язык управления данными используется для управления правами доступа к

Язык управления данными DCL Язык управления данными используется для управления правами доступа
данным и выполнения процедур в многопользовательской среде. Более точно его можно назвать «язык управления доступом».
Включает команды:
GRANT (права),
REVOKE (отмена).

Куликова Елена Васильевна

Слайд 20

1.6. Типы данных, доступные в SQL

Куликова Елена Васильевна

1.6. Типы данных, доступные в SQL Куликова Елена Васильевна

Слайд 21

1.6. Типы данных, доступные в SQL

Куликова Елена Васильевна

1.6. Типы данных, доступные в SQL Куликова Елена Васильевна

Слайд 22

1.6. Типы данных, доступные в SQL

Куликова Елена Васильевна

1.6. Типы данных, доступные в SQL Куликова Елена Васильевна

Слайд 23

1.7. Предикаты

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

1.7. Предикаты В условиях отбора записей используют различные конструкции языка – предикаты:
(>, <, =, и т.д.).
Оператор BETWEEN AND – проверка на попадание в диапазон значений.
Оператор IN – проверка на вхождение элемента в отношение.
Оператор LIKE – проверка на приблизительное значение.
Оператор NULL – проверка на пустое значение.
Оператор SOME, ANY, ALL – проверка при сравнениях в подзапросах.
Оператор EXISTS – проверка на пустое отношение.
Оператор UNIQUE – проверка на неуникальность записей.
Оператор MATCH – проверка на неполное совпадение.
Оператор OVERLAP – проверка попадания временного интервала в заданное значение.

Куликова Елена Васильевна

Слайд 24

2. ЗАПРОСЫ SQL

Запрос на языке SQL состоит из одного или нескольких операторов,

2. ЗАПРОСЫ SQL Запрос на языке SQL состоит из одного или нескольких
следующих один за другим и разделенных точкой с запятой.

Куликова Елена Васильевна

Слайд 25

Операторы

Наиболее важные операторы, которые входят в стандарт ANSI/ISO SQL:

Куликова Елена Васильевна

Операторы Наиболее важные операторы, которые входят в стандарт ANSI/ISO SQL: Куликова Елена Васильевна

Слайд 26

2.1. Оператор SELECT

Куликова Елена Васильевна

2.1. Оператор SELECT Куликова Елена Васильевна

Слайд 27

База данных «Успеваемость» для рассмотрения примеров.

Куликова Елена Васильевна

База данных «Успеваемость» для рассмотрения примеров. Куликова Елена Васильевна

Слайд 28

База данных «Успеваемость» для рассмотрения примеров.

Куликова Елена Васильевна

База данных «Успеваемость» для рассмотрения примеров. Куликова Елена Васильевна

Слайд 29

База данных «Успеваемость» для рассмотрения примеров.

Куликова Елена Васильевна

База данных «Успеваемость» для рассмотрения примеров. Куликова Елена Васильевна

Слайд 30

База данных «Успеваемость» (MS SQL Server)

Куликова Елена Васильевна

База данных «Успеваемость» (MS SQL Server) Куликова Елена Васильевна

Слайд 31

Если появляется сообщение об ошибке при попытке сохранения таблицы…

Куликова Елена Васильевна

Если появляется сообщение об ошибке при попытке сохранения таблицы… Куликова Елена Васильевна

Слайд 32

База данных «Успеваемость» (MS SQL Server)

Создание диаграммы (схемы данных)

Куликова Елена Васильевна

База данных «Успеваемость» (MS SQL Server) Создание диаграммы (схемы данных) Куликова Елена Васильевна

Слайд 33

База данных «Успеваемость» (MS SQL Server)

Создание диаграммы (схемы данных)

Куликова Елена Васильевна

База данных «Успеваемость» (MS SQL Server) Создание диаграммы (схемы данных) Куликова Елена Васильевна

Слайд 34

База данных «Успеваемость» (MS SQL Server)

Создание связей

Куликова Елена Васильевна

База данных «Успеваемость» (MS SQL Server) Создание связей Куликова Елена Васильевна

Слайд 35

База данных «Успеваемость» (MS SQL Server)

Заполнение данными

Куликова Елена Васильевна

База данных «Успеваемость» (MS SQL Server) Заполнение данными Куликова Елена Васильевна

Слайд 36

1. Операция выборки

Операция выборки позволяет получить все строки (записи) либо часть строк

1. Операция выборки Операция выборки позволяет получить все строки (записи) либо часть
одной таблицы. Каждая таблица или представление, о которых упоминается в запросе, должны быть перечислены в предложении FROM.
Список выбираемых элементов может содержать:
имена полей,
знак «*»,
вычисления,
литералы,
функции.

Куликова Елена Васильевна

Слайд 37

1. Операция выборки

Пример 1.1: показать все записи из таблицы «Студент».
SELECT *

1. Операция выборки Пример 1.1: показать все записи из таблицы «Студент». SELECT
FROM Студент;
Знак (*) указывает на то, что требуется вернуть все поля из таблицы.

Куликова Елена Васильевна

Слайд 38

1. Операция выборки

Пример 1.2: показать записи о студентах из таблицы «Студент», у

1. Операция выборки Пример 1.2: показать записи о студентах из таблицы «Студент»,
которых внесенная оплата за обучение составила 45000 рублей.
SELECT * FROM Студент WHERE [внесенная оплата за обучение]=45000;
Число возвращаемых в результате запроса строк ограничено путем использования предложения WHERE, содержащего предикат.

Куликова Елена Васильевна

Слайд 39

2. Операция проекции

Операция проекции позволяет выделить подмножество столбцов таблицы.
Требуемые поля перечисляются

2. Операция проекции Операция проекции позволяет выделить подмножество столбцов таблицы. Требуемые поля
после SELECT.

Куликова Елена Васильевна

Слайд 40

2. Операция проекции

Пример 2.1: показать записи из таблицы «Студент» (Фамилия, Номер группы,

2. Операция проекции Пример 2.1: показать записи из таблицы «Студент» (Фамилия, Номер
Внесенная оплата за обучение).
SELECT Фамилия,[Номер группы],[Внесенная оплата за обучение] FROM Студент;

Куликова Елена Васильевна

Слайд 41

Комбинация выборки и проекции: выделение подмножества столбцов и строк таблицы

Пример 2.2: показать

Комбинация выборки и проекции: выделение подмножества столбцов и строк таблицы Пример 2.2:
записи из таблицы «Студент» (Фамилия, Номер группы, Внесенная оплата за обучение), у которых внесенная оплата за обучение менее 45000 рублей.
SELECT Фамилия, [Номер группы], [Внесенная оплата за обучение] FROM Студент WHERE [внесенная оплата за обучение]<45000;

Куликова Елена Васильевна

Слайд 42

3. Операция объединения

Операция объединения позволяет объединять результаты отдельных запросов по нескольким таблицам

3. Операция объединения Операция объединения позволяет объединять результаты отдельных запросов по нескольким
в единую результирующую таблицу.
Основное ограничение: количество полей в запросах должно быть одинаковым и возвращаемые поля должны быть одного типа.

Куликова Елена Васильевна

Слайд 43

3. Операция объединения

Пример 3.1: показать коды всех студентов группы БП-115 и студентов,

3. Операция объединения Пример 3.1: показать коды всех студентов группы БП-115 и
сдавших дисциплину «Информатика и программирование».
SELECT [Код студента] FROM Студент WHERE [Номер группы]="БП-115"
UNION
SELECT [Код студента] FROM Успеваемость WHERE [Код дисциплины]=102;

Куликова Елена Васильевна

Слайд 44

4. Вычисления

Вычисления можно проводить над каждою записью таблицы.
Заголовок вычисляемого столбца

4. Вычисления Вычисления можно проводить над каждою записью таблицы. Заголовок вычисляемого столбца
подставляется после ключевого слова AS.

Куликова Елена Васильевна

Слайд 45

4. Вычисления

Пример 4.1: показать все записи таблицы Студент (Фамилия, Номер группы,

4. Вычисления Пример 4.1: показать все записи таблицы Студент (Фамилия, Номер группы,
Внесенная оплата за обучение), а также вычисляемое поле Остаток.
SELECT Фамилия, [Номер группы], [Внесенная оплата за обучение], 45000-[Внесенная оплата за обучение] AS [Остаток] FROM Студент;

Куликова Елена Васильевна

Слайд 46

5. Литералы

Для придания большей наглядности получаемому результату можно использовать литералы.
Литералы в

5. Литералы Для придания большей наглядности получаемому результату можно использовать литералы. Литералы
данном случае представляют собой строковые константы, которые применяются наряду с наименованиями.
Строка символов, представляющая собой литерал, должна быть заключена в одинарные или двойные кавычки.

Куликова Елена Васильевна

Слайд 47

5. Литералы

Пример 5.1: для предыдущего запроса можно для каждой записи добавить текст

5. Литералы Пример 5.1: для предыдущего запроса можно для каждой записи добавить
45000-внесенная оплата=
SELECT Фамилия, [Номер группы], [Внесенная оплата за обучение],"45000-внесенная оплата=" AS Формула, 45000-[Внесенная оплата за обучение] AS Остаток FROM Студент;

Куликова Елена Васильевна

Слайд 48

6. Соединение строк

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

6. Соединение строк Имеется возможность соединять два или более столбца, имеющих строковый
друг с другом, а также соединять их с литералами.
Для этого используется операция конкатенации (в Access это знак +).

Куликова Елена Васильевна

Слайд 49

6. Соединение строк

Пример 6.1: вывести список студентов, объединив фамилию, имя, отчество в

6. Соединение строк Пример 6.1: вывести список студентов, объединив фамилию, имя, отчество
один столбец.
SELECT Фамилия+" "+Имя+" "+Отчество AS ФИО FROM Студент;

Куликова Елена Васильевна

Слайд 50

7. Операции сравнения

Реляционные операторы могут использоваться с различными элементами.
При этом важно

7. Операции сравнения Реляционные операторы могут использоваться с различными элементами. При этом
соблюдать следующее правило: элементы должны иметь сравнимые типы.
Если в базе данных определены домены, то сравниваемые элементы должны относиться к одному домену.

Куликова Елена Васильевна

Слайд 51

7. Операции сравнения

Операторы, применяемые в построении комплексных запросов:

Куликова Елена Васильевна

7. Операции сравнения Операторы, применяемые в построении комплексных запросов: Куликова Елена Васильевна

Слайд 52

7. Операции сравнения

Пример 7.1: вывести список студентов (Фамилия, Имя, Номер группы) кроме

7. Операции сравнения Пример 7.1: вывести список студентов (Фамилия, Имя, Номер группы)
студентов группы БП-113:
SELECT Фамилия, Имя, [Номер группы] FROM Студент WHERE [Номер группы]<>"БП-113";
Замечание. При сравнении литералов конечные пробелы игнорируются. Так, предложение WHERE Имя = ‘Сергей ’ будет иметь тот же результат, что и предложение WHERE Имя = ‘Сергей’.

Куликова Елена Васильевна

Слайд 53

8. Предикат BETWEEN

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

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

Куликова Елена Васильевна

Слайд 54

8. Предикат BETWEEN

Пример 8.1: вывести список студентов (Фамилия, Имя), оплативших обучение в

8. Предикат BETWEEN Пример 8.1: вывести список студентов (Фамилия, Имя), оплативших обучение
размере 10000-20000 рублей:
SELECT Фамилия, Имя FROM Студент
WHERE [Внесенная оплата за обучение] BETWEEN 10000 AND 20000;
Пример 8.2: тот же запрос с использованием операторов сравнения будет выглядеть следующим образом:
SELECT Фамилия, Имя FROM Студент
WHERE [Внесенная оплата за обучение]>= 10000 AND [Внесенная оплата за обучение]<= 20000;

Куликова Елена Васильевна

Слайд 55

9. Предикат IN

Предикат IN проверяет, входит ли заданное значение в указанный в

9. Предикат IN Предикат IN проверяет, входит ли заданное значение в указанный
скобках список.
Если заданное проверяемое значение равно какому-либо элементу в списке, то предикат принимает значение true.

Куликова Елена Васильевна

Слайд 56

9. Предикат IN

Пример 9.1: вывести данные о преподавателях Волков, Петров, Иванова:
SELECT *

9. Предикат IN Пример 9.1: вывести данные о преподавателях Волков, Петров, Иванова:
FROM Преподаватель WHERE Фамилия IN ("Волков", "Петров", "Иванова");

Куликова Елена Васильевна

Слайд 57

10. Предикат LIKE

Предикат LIKE используется только с символьными данными. Он проверяет, соответствует

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

Куликова Елена Васильевна

Слайд 58

10. Предикат LIKE

Пример 10.1: вывести данные о студентах с фамилией на букву

10. Предикат LIKE Пример 10.1: вывести данные о студентах с фамилией на
С:
SELECT * FROM Студент WHERE Фамилия LIKE "С*";

Куликова Елена Васильевна

Слайд 59

11. Поиск пустых значений

В SQL-запросах NULL означает, что значение столбца неизвестно.
Предикат

11. Поиск пустых значений В SQL-запросах NULL означает, что значение столбца неизвестно.
IS NULL принимает значение true только тогда, когда выражение слева от ключевых слов “IS NULL” имеет значение null (пусто, не определено).
Разрешено также использовать конструкцию IS NOT NULL, которая означает “не пусто”, “имеет какое-либо значение”.
Пример 11.1: вывести данные о преподавателях с пустым значением Телефон:
SELECT * FROM Преподаватель WHERE Телефон IS NULL;

Куликова Елена Васильевна

Слайд 60

12. Логические операции

К логическим относят операторы AND, OR, NOT, позволяющие выполнять различные

12. Логические операции К логическим относят операторы AND, OR, NOT, позволяющие выполнять
логические действия.
Использование этих операторов позволяет гибко “настроить” условия отбора записей.

Куликова Елена Васильевна

Слайд 61

12. Логические операции

Пример 12.1: вывести данные о студентах из группы БП-115 с

12. Логические операции Пример 12.1: вывести данные о студентах из группы БП-115
оплатой выше 10000 рублей:
SELECT * FROM Студент WHERE [Внесенная оплата за обучение] >10000 AND [Номер группы] = "БП-113";

Куликова Елена Васильевна

Слайд 62

12. Логические операции

Пример 12.2: вывести данные о студентах с оплатой равной 45000

12. Логические операции Пример 12.2: вывести данные о студентах с оплатой равной
рублей, кроме студентов группы БП-115 :
SELECT * FROM Студент
WHERE [Внесенная оплата за обучение]=45000
AND NOT ([Номер группы]="БП-115");
Пример 12.2 (способ 2):
SELECT * FROM Студент
WHERE [Внесенная оплата за обучение]=45000
AND ([Номер группы]<>"БП-115");

Куликова Елена Васильевна

Слайд 63

12. Логические операции: порядок выполнения

В одном предикате логические операторы выполняются в следующем

12. Логические операции: порядок выполнения В одном предикате логические операторы выполняются в
порядке:
сначала выполняется оператор NOT, затем – AND и только после этого – оператор OR;
для изменения порядка выполнения операторов разрешается использовать скобки:
сначала проверяется условие, которое находится внутри самых «глубоких» скобок.

Куликова Елена Васильевна

Слайд 64

13. Сортировка

Порядок выводимых строк может быть изменен с помощью предложения ORDER BY

13. Сортировка Порядок выводимых строк может быть изменен с помощью предложения ORDER
в конце SQL-запроса.
Это предложение имеет вид
ORDER BY <порядок> [ASC | DESC]
Порядок строк может задаваться именами столбцов или номерами столбцов из списка после SELECT.
Способом по умолчанию – если ничего не указано – является упорядочивание «по возрастанию» (ASC).
Если же указано слово «DESC», то упорядочивание будет производиться «по убыванию».

Куликова Елена Васильевна

Слайд 65

13. Сортировка

Пример 13.1: выдать информацию о студентах с внесенной оплатой за обучение

13. Сортировка Пример 13.1: выдать информацию о студентах с внесенной оплатой за
по убыванию.
SELECT * FROM Студент ORDER BY [Внесенная оплата за обучение] DESC;

Куликова Елена Васильевна

Слайд 66

13. Сортировка

Столбец, определяющий порядок вывода строк, не обязательно должен присутствовать в списке

13. Сортировка Столбец, определяющий порядок вывода строк, не обязательно должен присутствовать в
выбираемых элементов (столбцов).
Пример 13.2: выдать информацию о студентах (Фамилия, Имя) с внесенной оплатой за обучение по убыванию.
SELECT Фамилия, Имя FROM Студент ORDER BY [Внесенная оплата за обучение] DESC;

Куликова Елена Васильевна

Слайд 67

13. Сортировка

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

13. Сортировка Допускается использование нескольких уровней вложенности при упорядочивании выводимой информации по
при этом разрешается смешивать оба способа.
Пример 13.3: выдать информацию о студентах по убыванию внесенной оплаты за обучение и по алфавиту в каждой «группе» с одинаковой оплатой.
SELECT * FROM Студент ORDER BY [Внесенная оплата за обучение] DESC, Фамилия;

Куликова Елена Васильевна

Слайд 68

13. Сортировка Сортировка по полю типа DATETIME. Использование в сортировке функций MONTH, DAY,

13. Сортировка Сортировка по полю типа DATETIME. Использование в сортировке функций MONTH,
YEAR Тип DATETIME содержит информацию о годе (YEAR), месяце (MONTH), дне (DAY), часе (HOUR), минуте (MINUTE), секунде (SECOND) и долях секунды (FRACTION)

Пример 13.4: выдать информацию о студентах по возрастанию числа даты рождения.
SELECT * FROM Студент ORDER BY Day([Дата рождения]);

Куликова Елена Васильевна

Слайд 69

13. Сортировка Сортировка по полю типа DATETIME. Использование в сортировке функций MONTH, DAY,

13. Сортировка Сортировка по полю типа DATETIME. Использование в сортировке функций MONTH,
YEAR Тип DATETIME содержит информацию о годе (YEAR), месяце (MONTH), дне (DAY), часе (HOUR), минуте (MINUTE), секунде (SECOND) и долях секунды (FRACTION)

Пример 13.5: выдать информацию о студентах по убыванию числа даты рождения, но по возрастанию года.
SELECT * FROM Студент ORDER BY Day([Дата рождения]) DESC, YEAR ([Дата рождения]);

Куликова Елена Васильевна

Слайд 70

14. Исключение дубликатов

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

14. Исключение дубликатов Для устранения всех повторов строк из результирующего набора служит
DISTINCT.
Данный модификатор может быть указан только один раз в списке выбираемых элементов и действует на весь список.

Куликова Елена Васильевна

Слайд 71

14. Исключение дубликатов

Пример 14.1: вывести коды студентов, имеющих оценки (т.е. студентов, коды

14. Исключение дубликатов Пример 14.1: вывести коды студентов, имеющих оценки (т.е. студентов,
которых имеются в таблице Успеваемость).
SELECT DISTINCT [Код студента] FROM Успеваемость;

Куликова Елена Васильевна

Слайд 72

15. Просмотр части данных

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

15. Просмотр части данных Для отбора нескольких записей из результирующего набора служит
TOP n или TOP n PERCENT.
Данный модификатор действует если есть операторы ORDER BY или GROUP BY.

Куликова Елена Васильевна

Слайд 73

15. Просмотр части данных

Пример 15.1: показать первые 5 записей студентов (Дата рождения,

15. Просмотр части данных Пример 15.1: показать первые 5 записей студентов (Дата
Фамилия) – самых старших из группы.
SELECT TOP 5 [Дата рождения], Фамилия FROM Студент ORDER BY [Дата рождения];
Пример 15.2: показать первые 10 процентов записей студентов (Дата рождения, Фамилия) – самых младших из группы.
SELECT TOP 10 PERCENT [Дата рождения], Фамилия FROM Студент ORDER BY [Дата рождения] DESC;

Куликова Елена Васильевна

Слайд 74

2.2. Групповые операции в запросах

Использование баз данных на практике ориентировано, прежде всего,

2.2. Групповые операции в запросах Использование баз данных на практике ориентировано, прежде
на получение итоговых аналитических и справочных отчетов, которые получаются в результате выполнения специальных SQL-запросов.
В языке SQL для получения итоговых значений по столбцам (агрегирование данных по столбцам) применяются специальные функции агрегирования

Куликова Елена Васильевна

Слайд 75

Функции агрегирования

Чаще всего такие функции применяются вместе с группировкой.

Куликова Елена Васильевна

Функции агрегирования Чаще всего такие функции применяются вместе с группировкой. Куликова Елена Васильевна

Слайд 76

Функции агрегирования

Пример F1: найти количество студентов, обучающихся в группе БП-113.
SELECT COUNT(*) AS

Функции агрегирования Пример F1: найти количество студентов, обучающихся в группе БП-113. SELECT
Количество
FROM Студент
WHERE [Номер группы]="БП-113";
Пример F2: найти количество студентов группы БП-113, родившихся в 1996 году.
SELECT COUNT(*) AS Количество
FROM Студент
WHERE [Номер группы]="БП-113" AND YEAR([Дата рождения])=1996;

Куликова Елена Васильевна

Слайд 77

Функции агрегирования

Пример F3: найти количество студентов, оплативших обучение в размере 45000; найти

Функции агрегирования Пример F3: найти количество студентов, оплативших обучение в размере 45000;
общую сумму оплат.
SELECT COUNT(*) AS Количество, SUM([Внесенная оплата за обучение]) AS [Общая сумма]
FROM Студент
WHERE [Внесенная оплата за обучение]=45000;
Пример F4: найти максимальную и минимальную суммы оплат за обучение.
SELECT MAX([Внесенная оплата за обучение]) AS [Максимальная оплата], MIN([Внесенная оплата за обучение]) AS [Минимальная оплата]
FROM Студент;

Куликова Елена Васильевна

Слайд 78

Групповые операции. Предложение GROUP BY

Операция группировки объединяет записи с одинаковыми значениями

Групповые операции. Предложение GROUP BY Операция группировки объединяет записи с одинаковыми значениями
в указанном списке полей в одну запись. Поля указываются после GROUP BY.
Если инструкция SELECT содержит функцию агрегации языка SQL (например, Sum или Count), то для каждой записи будет вычислено итоговое значение.
Основное правило: при использовании предложения GROUP BY все поля в списке полей инструкции SELECT должны быть либо включены в предложение GROUP BY, либо использоваться в качестве аргументов статистической функции SQL.

Куликова Елена Васильевна

Слайд 79

Предложение GROUP BY. Синтаксис

SELECT список_полей
FROM таблица
WHERE условие_отбора
GROUP BY группируемые_поля;
где группируемые_поля -

Предложение GROUP BY. Синтаксис SELECT список_полей FROM таблица WHERE условие_отбора GROUP BY
имена полей (до 10), которые используются для группирования записей.

Куликова Елена Васильевна

Слайд 80

Предложение GROUP BY

Пример G1: изменим запрос F4: определить максимальную и минимальную суммы

Предложение GROUP BY Пример G1: изменим запрос F4: определить максимальную и минимальную
оплат за обучение в каждой группе.
SELECT [Номер группы], MAX([Внесенная оплата за обучение]), MIN ([Внесенная оплата за обучение])
FROM Студент
GROUP BY [Номер группы];

Куликова Елена Васильевна

Слайд 81

Примеры математических функций, которые используются в стандартном SQL

Куликова Елена Васильевна

Примеры математических функций, которые используются в стандартном SQL Куликова Елена Васильевна

Слайд 82

Предложение GROUP BY

Пример G2: найти средний балл по каждой дисциплине, округлить результат

Предложение GROUP BY Пример G2: найти средний балл по каждой дисциплине, округлить
до одного знака после запятой.
Без округления:
SELECT [Код дисциплины], AVG (Оценка) AS [Средний балл]
FROM Успеваемость
GROUP BY [Код дисциплины];
С округлением:
SELECT [Код дисциплины], ROUND(AVG (Оценка),1) AS [Средний балл]
FROM Успеваемость
GROUP BY [Код дисциплины];

Куликова Елена Васильевна

Слайд 83

Предложение GROUP BY

Пример G3: вывести количество сдач/пересдач студентом зачета (экзамена) по каждой

Предложение GROUP BY Пример G3: вывести количество сдач/пересдач студентом зачета (экзамена) по
дисциплине.
SELECT [Код студента], [Код дисциплины], Count (Оценка) AS [Кол_сдач]
FROM Успеваемость
GROUP BY [Код студента], [Код дисциплины];

Куликова Елена Васильевна

Слайд 84

Предложение HAVING

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

Предложение HAVING Определяет, какие сгруппированные записи отображаются при использовании инструкции SELECT с
GROUP BY.
После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING отберет те из полученных записей, которые удовлетворяют условиям отбора, указанным в предложении HAVING.

Куликова Елена Васильевна

Слайд 85

Предложение HAVING, синтаксис

SELECT список_полей
FROM таблица
WHERE условие_отбора
GROUP BY группируемые_поля
HAVING условие_отбора_групп;
где условие_отбора_групп - выражение,

Предложение HAVING, синтаксис SELECT список_полей FROM таблица WHERE условие_отбора GROUP BY группируемые_поля
определяющее, какие сгруппированные записи отображать.

Куликова Елена Васильевна

Слайд 86

Предложение HAVING

Пример H1: вывести список студентов (код студента, средний балл), средний балл

Предложение HAVING Пример H1: вывести список студентов (код студента, средний балл), средний
которых выше 3,5
SELECT [Код студента], AVG(Оценка) AS [Средняя оценка]
FROM Успеваемость
GROUP BY [Код студента]
HAVING AVG(Оценка)>3.5;

Куликова Елена Васильевна

Слайд 87

2.3. Запросы с несколькими таблицами (соединение таблиц)

Операция соединения используется в языке SQL

2.3. Запросы с несколькими таблицами (соединение таблиц) Операция соединения используется в языке
для вывода связанной информации, хранящейся в нескольких таблицах.
В этом проявляется одна из наиболее важных особенностей запросов SQL – способность определять связи между многочисленными таблицами и выводить информацию из них в рамках этих связей.

Куликова Елена Васильевна

Слайд 88

Виды связей

Внутренние
Внешние
Рекурсивные
По отношению
Все виды, кроме внешнего, можно задавать в предложении WHERE запроса

Виды связей Внутренние Внешние Рекурсивные По отношению Все виды, кроме внешнего, можно
SELECT.
Внешние и внутренние соединения можно задавать с помощью зарезервированного слова JOIN.

Куликова Елена Васильевна

Слайд 89

Особенности связей

Связывание производится, как правило, по первичному ключу одной таблицы и внешнему

Особенности связей Связывание производится, как правило, по первичному ключу одной таблицы и
ключу другой таблицы – для каждой пары таблиц.
Соединяемые поля могут (но не обязаны!) присутствовать в списке выбираемых элементов.
Предложение WHERE может содержать множественные условия соединений.
Условие соединения может также комбинироваться с другими предикатами в предложении WHERE.

Куликова Елена Васильевна

Слайд 90

1. Внутреннее соединение с помощью WHERE

Внутреннее соединение возвращает только те строки, для

1. Внутреннее соединение с помощью WHERE Внутреннее соединение возвращает только те строки,
которых условие соединения принимает значение TRUE.
Пример W1: вывести названия дисциплин и фамилии ведущих преподавателей
SELECT Дисциплина.[Название дисциплины], Преподаватель.Фамилия
FROM Дисциплина, Преподаватель
WHERE Дисциплина.[Код преподавателя] = Преподаватель.[Код преподавателя];

Замечание. Имена столбцов в строке с ключевым словом SELECT записаны в полной синтаксической структуре: <имя таблицы>.<имя столбца>

Куликова Елена Васильевна

Слайд 91

1. Внутреннее соединение с помощью WHERE. Алиасы

В вышеприведенном запросе использовался способ непосредственного

1. Внутреннее соединение с помощью WHERE. Алиасы В вышеприведенном запросе использовался способ
указания таблиц с помощью их имен.
Возможен (а иногда и просто необходим) также способ указания таблиц с помощью алиасов (псевдонимов).
Алиасы определяются в предложении FROM запроса SELECT и представляют собой любой допустимый идентификатор, написание которого подчиняется таким же правилам, что и написание имен таблиц.
Потребность в алиасах таблиц возникает тогда, когда названия столбцов, используемых в условиях соединения двух (или более) таблиц, совпадают.
Часто алиасы используются в подзапросах (см. далее).
В одном запросе нельзя смешивать использование написания имен таблиц и их алиасов.
Алиасы таблиц могут совпадать с их именами.

Куликова Елена Васильевна

Слайд 92

1. Внутреннее соединение с помощью WHERE. Алиасы

Пример W2: рассмотрим вышеприведенный пример с

1. Внутреннее соединение с помощью WHERE. Алиасы Пример W2: рассмотрим вышеприведенный пример
использованием алиасов X иY (показать названия дисциплин и фамилии ведущих преподавателей).
SELECT X.[Название дисциплины], Y.Фамилия
FROM Дисциплина AS X, Преподаватель AS Y
WHERE X.[Код преподавателя] =
Y.[Код преподавателя];

Куликова Елена Васильевна

Слайд 93

2. Внутреннее соединение с помощью INNER JOIN

INNER JOIN объединяет записи из

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

Куликова Елена Васильевна

Слайд 94

2. Внутреннее соединение с помощью INNER JOIN. Синтаксис

FROM таблица1
INNER JOIN таблица2

2. Внутреннее соединение с помощью INNER JOIN. Синтаксис FROM таблица1 INNER JOIN

ON таблица1.поле1 оператор_сравнения таблица2.поле2
где:
таблица1, таблица2 - имена таблиц, записи которых подлежат объединению;
поле1, поле2 - имена объединяемых полей. Если эти поля не являются числовыми, то должны иметь одинаковый тип данных и содержать данные одного рода, однако они могут иметь разные имена;
оператор_сравнения - любой оператор сравнения: =, <, >, <=, >=, <>.

Куликова Елена Васильевна

Слайд 95

2. Внутреннее соединение с помощью INNER JOIN

Пример I1: показать названия дисциплин и

2. Внутреннее соединение с помощью INNER JOIN Пример I1: показать названия дисциплин
фамилии ведущих преподавателей.
SELECT Дисциплина.[Название дисциплины], Преподаватель.Фамилия
FROM Дисциплина INNER JOIN Преподаватель ON Дисциплина.[Код преподавателя]= Преподаватель.[Код преподавателя];

Куликова Елена Васильевна

Слайд 96

2. Внутреннее соединение с помощью INNER JOIN

Пример I2: вывести список студентов, дисциплины

2. Внутреннее соединение с помощью INNER JOIN Пример I2: вывести список студентов,
(по кодам) и полученные по ним оценки.
SELECT Студент.Фамилия, Успеваемость.[Код дисциплины], Успеваемость.Оценка
FROM Студент INNER JOIN Успеваемость
ON Студент.[Код студента]=
Успеваемость.[Код студента];

Куликова Елена Васильевна

Слайд 97

3. Внутреннее соединение (INNER JOIN) с условиями отбора

Пример I3: вывести список

3. Внутреннее соединение (INNER JOIN) с условиями отбора Пример I3: вывести список
студентов и полученные оценки по дисциплине с кодом 102.
SELECT Студент.Фамилия, Успеваемость.Оценка
FROM Студент INNER JOIN Успеваемость ON Студент.[Код студента]= Успеваемость.[Код студента]
WHERE Успеваемость.[Код дисциплины]=102;

Куликова Елена Васильевна

Слайд 98

4. Косвенные соединения (INNER JOIN)

С помощью внутренних соединений организуются косвенные соединения, когда

4. Косвенные соединения (INNER JOIN) С помощью внутренних соединений организуются косвенные соединения,
в запросе указываются все промежуточные таблицы, связанные внутренними связями (т.е. связываются более двух таблиц, предложение INNER JOIN будет встречаться несколько раз)

Куликова Елена Васильевна

Слайд 99

4. Косвенные соединения (INNER JOIN)

Изменение структуры таблицы Дисциплина: добавлено поле Цикл:

Куликова Елена

4. Косвенные соединения (INNER JOIN) Изменение структуры таблицы Дисциплина: добавлено поле Цикл: Куликова Елена Васильевна
Васильевна

Слайд 100

4. Косвенные соединения (INNER JOIN)

Пример I8 (объединение 3-х таблиц): вывести список студентов

4. Косвенные соединения (INNER JOIN) Пример I8 (объединение 3-х таблиц): вывести список
(Фамилии), дисциплины (Название, Цикл) и полученные по ним оценки.
SELECT Студент.Фамилия, Дисциплина.[Название дисциплины], Дисциплина.Цикл, Успеваемость.Оценка
FROM (Студент INNER JOIN Успеваемость ON Студент.[Код студента]=Успеваемость.[Код студента])
INNER JOIN Дисциплина ON Успеваемость.[Код дисциплины]=Дисциплина.[Код дисциплины];

Куликова Елена Васильевна

Слайд 101

4. Косвенные соединения (INNER JOIN)

Пример I9 (объединение 4-х таблиц):
SELECT Студент.Фамилия, Студент.[Номер

4. Косвенные соединения (INNER JOIN) Пример I9 (объединение 4-х таблиц): SELECT Студент.Фамилия,
группы], Дисциплина.[Название дисциплины], Успеваемость.Оценка, Преподаватель.Фамилия, Преподаватель.Имя, Преподаватель.Отчество
FROM (Студент INNER JOIN Успеваемость ON Студент.[Код студента]=Успеваемость.[Код студента])
INNER JOIN (Дисциплина INNER JOIN Преподаватель ON Дисциплина.[Код преподавателя]= Преподаватель.[Код преподавателя]) ON Успеваемость.[Код дисциплины]=Дисциплина.[Код дисциплины];

Куликова Елена Васильевна

Слайд 102

5. Соединение таблиц с группировкой записей

Группировка выполняется в предложении GROUP BY в

5. Соединение таблиц с группировкой записей Группировка выполняется в предложении GROUP BY
конце запроса.
Таблица с группировкой записей указывается после INNER JOIN.
Все поля после SELECT либо перечисляются в GROUP BY либо записываются со статистическими функциями.

Куликова Елена Васильевна

Слайд 103

5. Соединение таблиц с группировкой записей

Пример IG1: вывести информацию о студентах (Фамилия,

5. Соединение таблиц с группировкой записей Пример IG1: вывести информацию о студентах
Имя, Номер группы, Средний балл). Группировка записей будет выполняться в таблице Успеваемость по полю Код студента.
SELECT Студент.Фамилия, Студент.Имя, Студент.[Номер группы], AVG(Успеваемость.Оценка) AS [Средний балл]
FROM Студент INNER JOIN Успеваемость ON Студент.[Код студента]=Успеваемость.[Код студента]
GROUP BY Успеваемость.[Код студента], Студент.Фамилия, Студент.Имя, Студент.[Номер группы];

Куликова Елена Васильевна

Слайд 104

6. Внешнее соединение

Внешнее соединение возвращает все строки из одной таблицы и только

6. Внешнее соединение Внешнее соединение возвращает все строки из одной таблицы и
те строки из другой таблицы, для которых условие соединения принимает значение true.
Строки второй таблицы, не удовлетворяющие условию соединения (т.е. имеющие значение false), получают значение null в результирующем наборе.

Куликова Елена Васильевна

Слайд 105

6. Внешнее соединение, виды

Существуют два вида внешнего соединения:
LEFT JOIN
RIGHT JOIN
В левом

6. Внешнее соединение, виды Существуют два вида внешнего соединения: LEFT JOIN RIGHT
соединении (LEFT JOIN) запрос возвращает все строки из левой таблицы (т.е. таблицы, стоящей слева от зарезервированного словосочетания “LEFT JOIN”). Для правого соединения – все наоборот.

Куликова Елена Васильевна

Слайд 106

6. Внешнее соединение, синтаксис

FROM таблица1 [ LEFT|RIGHT ] JOIN таблица2
ON таблица1.поле1

6. Внешнее соединение, синтаксис FROM таблица1 [ LEFT|RIGHT ] JOIN таблица2 ON
оператор_сравнения таблица2.поле2

Куликова Елена Васильевна

Слайд 107

6. Внешнее соединение, синтаксис

Пример LR1 (внешнее соединение):
Вывести список всех преподавателей (Фамилия,

6. Внешнее соединение, синтаксис Пример LR1 (внешнее соединение): Вывести список всех преподавателей
Имя). Для тех преподавателей, которые в настоящее время преподают в институте – вывести название дисциплины.

Куликова Елена Васильевна

Слайд 108

6. Внешнее соединение

Пример LR1 (внешнее соединение):
Вывести список всех преподавателей (Фамилия, Имя).

6. Внешнее соединение Пример LR1 (внешнее соединение): Вывести список всех преподавателей (Фамилия,
Для тех преподавателей, которые в настоящее время преподают в институте – вывести название дисциплины.
SELECT Преподаватель.Фамилия, Преподаватель.Имя, Дисциплина.[Название дисциплины]
FROM Преподаватель LEFT JOIN Дисциплина ON Преподаватель.[Код преподавателя]= Дисциплина.[Код преподавателя];

Куликова Елена Васильевна

Слайд 109

6. Внешнее соединение

Пример LR2 (внешнее соединение): если данном запросе использовать RIGHT JOIN?
FROM

6. Внешнее соединение Пример LR2 (внешнее соединение): если данном запросе использовать RIGHT
Преподаватель RIGHT JOIN Дисциплина ON Преподаватель.[Код преподавателя]= Дисциплина.[Код преподавателя];
Будут выведены все дисциплины и закрепленные за ними преподаватели.

Куликова Елена Васильевна

Слайд 110

6. Внешнее соединение

Пример LR2 (внешнее соединение): если данном запросе использовать RIGHT JOIN?
Будут

6. Внешнее соединение Пример LR2 (внешнее соединение): если данном запросе использовать RIGHT
выведены все дисциплины и закрепленные за ними преподаватели.

Куликова Елена Васильевна

Слайд 111

7. Соединение по отношению

Соединение по отношению (тета-соединение) представляет собой способ соединения по

7. Соединение по отношению Соединение по отношению (тета-соединение) представляет собой способ соединения
любому отношению, кроме равенства.

Куликова Елена Васильевна

Слайд 112

7. Соединение по отношению

Добавление таблицы: Оплата

Куликова Елена Васильевна

7. Соединение по отношению Добавление таблицы: Оплата Куликова Елена Васильевна

Слайд 113

7. Соединение по отношению

Добавление таблицы: Оплата

Куликова Елена Васильевна

7. Соединение по отношению Добавление таблицы: Оплата Куликова Елена Васильевна

Слайд 114

7. Соединение по отношению

Пример T1(тета-соединение): вывести тех студентов (Фамилия, Имя, Внесенная оплата

7. Соединение по отношению Пример T1(тета-соединение): вывести тех студентов (Фамилия, Имя, Внесенная
за обучение, Сумма оплаты), для которых Внесенная оплата за обучение и Сумма оплаты различны.
SELECT Студент.Фамилия, Студент.Имя, Студент.[Внесенная оплата за обучение], Оплата.[Сумма оплаты] FROM Студент
INNER JOIN Оплата ON Студент.[Код студента]=Оплата.[Код студента]
WHERE Студент.[Внесенная оплата за обучение]<>Оплата.[Сумма оплаты];

Куликова Елена Васильевна

Слайд 115

8. Рекурсивные соединения

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

8. Рекурсивные соединения В некоторых задачах необходимо получить информацию, выбранную особым образом
из одной таблицы. Для этого используются так называемые самосоединения – рекурсивные соединения.
Рекурсивное соединение – это соединение таблицы с собой с помощью алиасов.
Самосоединения полезны в случаях, когда нужно получить пары аналогичных элементов из одной и той же таблицы.

Куликова Елена Васильевна

Слайд 116

8. Рекурсивные соединения

Пример R1: вывести студентов (Фамилия, Дата рождения) с одинаковыми датами

8. Рекурсивные соединения Пример R1: вывести студентов (Фамилия, Дата рождения) с одинаковыми
рождения.
SELECT X.Фамилия, Y.Фамилия, Y.[Дата рождения]
FROM Студент AS X, Студент AS Y
WHERE X.Фамилия

Куликова Елена Васильевна

Слайд 117

8. Рекурсивные соединения

Пример R1: Почему оператор WHERE X.Фамилия

Пример

8. Рекурсивные соединения Пример R1: Почему оператор WHERE X.Фамилия Пример R1: Если
R1: Если<>?
WHERE X.Фамилия<>Y.Фамилия AND X.[Дата рождения]=Y.[Дата рождения];

Куликова Елена Васильевна

Слайд 118

2.4. Использование подзапросов (подчиненные запросы)

Подзапросы – это запросы, которые предназначены для обработки

2.4. Использование подзапросов (подчиненные запросы) Подзапросы – это запросы, которые предназначены для
внутри другого запроса.
Подзапросы могут использоваться в предикатах, операторах DELETE , UPDATE, ограничениях, предложениях FROM.
Подзапросы могут возвращать одно значение (простой подзапрос) или множество значений (табличный подзапрос).

Куликова Елена Васильевна

Слайд 119

Типы подзапросов

Существует три типа подзапросов:
Связанный подзапрос возвращает значение, выбираемое из пересечения одного

Типы подзапросов Существует три типа подзапросов: Связанный подзапрос возвращает значение, выбираемое из
столбца с одной строкой – то есть единственное значение.
Строковый подзапрос возвращает значение нескольких столбцов таблицы, но в виде единственной строки.
Табличный подзапрос возвращает значения одного или более столбцов в более чем одной строке.

Куликова Елена Васильевна

Слайд 120

Действия

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

Действия Подчиненные запросы используются для выполнения следующих действий: проверка в подчиненном запросе
результатов (с помощью зарезервированных слов EXISTS или NOT EXISTS);
поиск в главном запросе любых значений, которые равны, больше или меньше значений, возвращаемых в подчиненном запросе (с помощью зарезервированных слов ANY, IN, SOME или ALL);
создание подчиненных запросов внутри подчиненных запросов (вложенных подчиненных запросов).

Куликова Елена Васильевна

Слайд 121

Использование подзапросов: синтаксис

SELECT …
WHERE выражение сравнение {ALL | ANY | SOME} (подзапрос)
Подзапрос

Использование подзапросов: синтаксис SELECT … WHERE выражение сравнение {ALL | ANY |
всегда заключается в круглые скобки. Уровень вложенности ограничивается в конкретной реализации SQL.
В SQL выражение  X < > ALL( ) соответствует «не равен любому» результату подзапроса, т. е. предикат истинен, если значение X отсутствует среди результатов подзапроса.
Операторы SOME и ANY  полностью взаимозаменяемы; можно использовать тот, который больше нравится. Оператор SOME (ANY) истинен, если какое-нибудь из выведенных подзапросом значений удовлетворяет заданному предикату.

Куликова Елена Васильевна

Слайд 122

Ограничения

Не допускается использование инструкции SELECT подчиненного запроса в запросе на объединение или

Ограничения Не допускается использование инструкции SELECT подчиненного запроса в запросе на объединение
в перекрестном запросе.
Подзапросы заметно замедляют выполнение запросов, поэтому их следует использовать только обоснованно, когда другим способом результат получить нельзя (например, при удалении или обновлении).

Куликова Елена Васильевна

Слайд 123

Необоснованное применение подзапроса

Пример. Показать названия дисциплин, которые ведутся преподавателем Волковым.
С подзапросом:
SELECT [Название

Необоснованное применение подзапроса Пример. Показать названия дисциплин, которые ведутся преподавателем Волковым. С
дисциплины] FROM Дисциплина WHERE [Код преподавателя]=(SELECT [Код преподавателя] FROM Преподаватель WHERE Фамилия="Волков");
Без подзапроса :
SELECT Дисциплина.[Название дисциплины]
FROM Дисциплина INNER JOIN Преподаватель ON Дисциплина.[Код преподавателя]=Преподаватель.[Код преподавателя]
WHERE Преподаватель.Фамилия="Волков";

Куликова Елена Васильевна

Слайд 124

Использование подзапросов

Пример P1: вывести студентов (Фамилия, Имя, Номер группы), которые внесли оплату

Использование подзапросов Пример P1: вывести студентов (Фамилия, Имя, Номер группы), которые внесли
за обучение больше всех студентов группы БП-113.
SELECT Фамилия, Имя, [Номер группы] FROM Студент WHERE [Внесенная оплата за обучение] > ALL
(SELECT [Внесенная оплата за обучение]
FROM Студент WHERE [Номер группы] = "БП-113");

Куликова Елена Васильевна

Слайд 125

Использование подзапросов

Пример P2: вывести студентов (Фамилия, Имя, Номер группы) у которых отсутствуют

Использование подзапросов Пример P2: вывести студентов (Фамилия, Имя, Номер группы) у которых
оценки.
(следовательно, о таких студентах нет записей в таблице успеваемость)
SELECT Фамилия, Имя, [Номер группы]
FROM Студент
WHERE [Код студента] <> ALL
(SELECT [Код студента] FROM Успеваемость);

Куликова Елена Васильевна

Слайд 126

Использование подзапросов

Пример P3: вывести студентов (Фамилия, Имя, Номер группы) у которых есть

Использование подзапросов Пример P3: вывести студентов (Фамилия, Имя, Номер группы) у которых
хотя бы одна оценка.
1 способ:
SELECT Фамилия, Имя, [Номер группы]
FROM Студент
WHERE [Код студента] =ANY
(SELECT [Код студента] FROM Успеваемость);
2 способ:
SELECT Фамилия, Имя, [Номер группы]
FROM Студент
WHERE [Код студента] =SOME
(SELECT [Код студента] FROM Успеваемость);

Куликова Елена Васильевна

Слайд 127

Изменение структуры базы данных

Куликова Елена Васильевна

Изменение структуры базы данных Куликова Елена Васильевна

Слайд 128

Использование подзапросов

Пример P4: вывести преподавателей (Фамилия, Имя, Отчество) со стажем работы более

Использование подзапросов Пример P4: вывести преподавателей (Фамилия, Имя, Отчество) со стажем работы
10 лет
SELECT Фамилия, Имя, Отчество
FROM Преподаватель
WHERE [Код преподавателя] IN
(SELECT [Код преподавателя] FROM Квалификация WHERE Стаж>10);

Куликова Елена Васильевна

Слайд 129

Использование подзапросов

Куликова Елена Васильевна

Использование подзапросов Куликова Елена Васильевна

Слайд 130

2.5. Запросы на модификацию данных

Три основных оператора манипулирования данными:
INSERT (вставка)
UPDATE (обновление)
DELETE

2.5. Запросы на модификацию данных Три основных оператора манипулирования данными: INSERT (вставка)
(удаление)

Куликова Елена Васильевна

Слайд 131

1. Запросы на вставку данных в таблицы

Оператор INSERT INTO
Синтаксис:
INSERT INTO <таблица> (<поле1>,<поле2>,...)

1. Запросы на вставку данных в таблицы Оператор INSERT INTO Синтаксис: INSERT
VALUES (<значение1>, <значение2>,...);
вставляет в таблицу одну новую запись
после имени таблицы в скобках необходимо указать те поля, которым требуется присвоить некоторые значения явно
за ключевым словом VALUES в скобках следует список значений для перечисленных полей; число значений в этом списке должно соответствовать числу указанных полей
полям, не названным в списке присваивается значение NULL

Куликова Елена Васильевна

Слайд 132

1. Запросы на вставку данных в таблицы

Пример INS1: вставить запись о студенте

1. Запросы на вставку данных в таблицы Пример INS1: вставить запись о
(Код студента, Фамилия, Имя, Отчество).
INSERT INTO Студент ([Код студента], Фамилия, Имя, Отчество ) VALUES (311, "Захаров", "Андрей", "Васильевич");

Куликова Елена Васильевна

Слайд 133

1. Запросы на вставку данных в таблицы

Если необходимо вставить данные по полю

1. Запросы на вставку данных в таблицы Если необходимо вставить данные по
с типом данных Счетчик, то значение данного поля указывать не требуется (но при необходимости возможно)
Пример INS1: (если Код студента - счетчик): вставить запись о студенте (Фамилия, Имя, Отчество).
INSERT INTO Студент (Фамилия, Имя, Отчество ) VALUES ("Захаров", "Андрей", "Васильевич");

Куликова Елена Васильевна

Слайд 134

1. Запросы на вставку данных в таблицы

Есть второй вариант команды вставки, который

1. Запросы на вставку данных в таблицы Есть второй вариант команды вставки,
позволяет вводить записи на основании запроса. Пример INS2: добавить в таблицу Оплата коды тех студентов, которые есть в таблице Студент, но отсутствуют в таблице Оплата .
INSERT INTO Оплата ([Код студента])
SELECT [Код студента] FROM Студент WHERE [Код студента] NOT IN
(SELECT [Код студента] FROM Оплата);

Куликова Елена Васильевна

Слайд 135

2. Запросы на изменение данных в таблицах

Оператор UPDATE (используется для модификации записей,

2. Запросы на изменение данных в таблицах Оператор UPDATE (используется для модификации
которые уже есть в таблице)
Синтаксис:
UPDATE <таблица> SET <поле1>=<значение1>, <поле2>=<значение2>, ... [WHERE <условие>];
Если слово WHERE не указано, то оператор UPDATE будет применен ко всем записям таблицы

Куликова Елена Васильевна

Слайд 136

2. Запросы на изменение данных в таблицах

Пример UP1: У студента Фукс Ивана

2. Запросы на изменение данных в таблицах Пример UP1: У студента Фукс
Ивановича сменить фамилию (на Иванов)
UPDATE Студент SET Фамилия = "Иванов"
WHERE Фамилия="Фукс" AND Имя="Иван" AND Отчество="Иванович";

Куликова Елена Васильевна

Слайд 137

2. Запросы на изменение данных в таблицах

Пример UP2: изменить внесенную оплату за

2. Запросы на изменение данных в таблицах Пример UP2: изменить внесенную оплату
обучение у студентов группы БП-113 (добавить к существующей оплате 10000 рублей), не учитывая тех студентов, которые оплатили сумму в размере 45000 рублей
UPDATE Студент SET [Внесенная оплата за обучение] = [Внесенная оплата за обучение]+10000
WHERE [Номер группы]="БП-113" AND [Внесенная оплата за обучение]<>45000;

Куликова Елена Васильевна

Слайд 138

3. Запросы на удаление записей из таблицы

Оператор DELETE
Синтаксис:
DELETE FROM <имя таблицы >

3. Запросы на удаление записей из таблицы Оператор DELETE Синтаксис: DELETE FROM
[WHERE < условие >];
Если условие не задано, то из таблицы будут удалены все записи

Куликова Елена Васильевна

Слайд 139

Изменение структуры таблицы Преподаватель

Куликова Елена Васильевна

Изменение структуры таблицы Преподаватель Куликова Елена Васильевна

Слайд 140

3. Запросы на удаление записей из таблицы

Пример D1: удалить запись об уволенном

3. Запросы на удаление записей из таблицы Пример D1: удалить запись об
преподавателе (Петрове)
DELETE * FROM Преподаватель WHERE Фамилия="Петров" AND Уволен=true;

Куликова Елена Васильевна

Слайд 141

3. Запросы на удаление записей из таблицы

Пример D2: удалить запись о студентах,

3. Запросы на удаление записей из таблицы Пример D2: удалить запись о
которые будут отчислены (есть хотя бы одна двойка)
DELETE * FROM Студент
WHERE [Код студента]=ANY (SELECT [Код студента] FROM Успеваемость WHERE Оценка=2);
Удаление записей в
родительской таблице
повлечет за собой удаление
связанных записей в
дочерних таблицах

Куликова Елена Васильевна

Слайд 142

2.6. Перекрестные запросы

Перекрестные запросы относятся к статистическим запросам, когда значения в строках

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

Куликова Елена Васильевна

Слайд 143

2.6. Перекрестные запросы, синтаксис

TRANSFORM статФункция ИнструкцияSelect PIVOT поле [IN (значение_1[, значение_2[, ...]])]
Описание параметров:
статФункция. Статистическая

2.6. Перекрестные запросы, синтаксис TRANSFORM статФункция ИнструкцияSelect PIVOT поле [IN (значение_1[, значение_2[,
функция SQL (Sum, Count и т.д.), обрабатывающая данные, которые будут отображаться в области значений итоговой выборки (справа от заголовков строк и под строкой заголовков столбцов).
ИнструкцияSelect. Текст SQL-запроса на выборку. Может включать предложения SELECT, FROM, GROUP BY и т.д.
поле. Поле или выражение, возвращающее поле, которое содержит заголовки столбцов для итогового набора данных.
значение_1, значение_2. Фиксированные значения, используемые при создании заголовков столбцов.

Куликова Елена Васильевна

Слайд 144

2.6. Перекрестные запросы, синтаксис

В перекрестном запросе в инструкции SELECT, перечисляются поля, являющиеся заголовками

2.6. Перекрестные запросы, синтаксис В перекрестном запросе в инструкции SELECT, перечисляются поля,
строк.
В инструкции PIVOT указывается поле, значения которого будут служить в качестве заголовков столбцов.
Инструкция TRANSFORM служит для указания поля, значения которого, после произведенной групповой операции (Sum, Count и т.д.), будут помещены справа от полей, перечисленных в инструкции SELECT

Куликова Елена Васильевна

Слайд 145

2.6. Перекрестные запросы

Пример TR1: вывести для каждого студента средний балл по каждой

2.6. Перекрестные запросы Пример TR1: вывести для каждого студента средний балл по
дисциплине , представив в виде:
TRANSFORM AVG(Оценка) AS [Средний балл по дисциплине]
SELECT [Код студента] FROM Успеваемость
GROUP BY [Код студента]
PIVOT [Код дисциплины];

Куликова Елена Васильевна

Слайд 146

2.6. Перекрестные запросы

Пример TR2: вывести для каждого студента средний балл по каждой

2.6. Перекрестные запросы Пример TR2: вывести для каждого студента средний балл по
дисциплине , представив в виде:
TRANSFORM AVG(Оценка) AS [Средний балл по дисциплине]
SELECT Студент.Фамилия, Студент.Имя, Студент.Отчество
FROM Студент INNER JOIN Успеваемость ON Студент.[Код студента]=Успеваемость.[Код студента]
GROUP BY Студент.Фамилия, Студент.Имя, Студент.Отчество PIVOT Успеваемость.[Код дисциплины];

Куликова Елена Васильевна

Слайд 147

3. СОЗДАНИЕ БД на SQL. Язык описания данных (Data Definition Language, DDL)

Куликова

3. СОЗДАНИЕ БД на SQL. Язык описания данных (Data Definition Language, DDL) Куликова Елена Васильевна
Елена Васильевна

Слайд 148

3.1. Запросы на создание таблиц базы данных

Синтаксис:
CREATE TABLE <имя таблицы >
(<имя

3.1. Запросы на создание таблиц базы данных Синтаксис: CREATE TABLE ( [описание
поля> <тип /домен> [описание /ограничения столбца],...,[ограничения таблицы])
Тип может быть любой из типов SQL-сервера или вместо типа используют имя домена.
Типы данных

Куликова Елена Васильевна

Слайд 149

Типы данных

Куликова Елена Васильевна

Типы данных Куликова Елена Васильевна

Слайд 150

Ограничения таблицы

Описание каждого поля может включать следующие конструкции:
DEFAULT – конструкция, определяющая

Ограничения таблицы Описание каждого поля может включать следующие конструкции: DEFAULT – конструкция,
значение поля по умолчанию;
NOT NULL – конструкция, указывающая на то, что поле не может быть пустым;
COLLATE – предложение, определяющее порядок сортировки для выбранного набора символов. Например, в INTERBASE русский набор символов WIN1251 имеет два порядка сортировки – WIN1251 и PXW_CYRL. Для правильной сортировки, включающей большие буквы, следует выбрать порядок PXW_CYRL.
Описание ограничений включает в себя предложения CONSTRAINT или предложения:
PRIMARY KEY | UNIQUE (список полей) – определяет создание индексов (первичного или просто уникального);
FOREIGN KEY (список полей связи) REFERENCES <имя таблицы связи> (список полей первичного ключа в таблице связи) – определяет связи между двумя таблицами;
CHECK (<предикат>) определяет другие ограничения с использованием предикатов сравнения BETWEEN, LIKE, IN и других.

Куликова Елена Васильевна

Слайд 151

3.1. Запросы на создание таблиц базы данных

Пример CrT1: создать таблицу Должность, содержащую

3.1. Запросы на создание таблиц базы данных Пример CrT1: создать таблицу Должность,
поля: Код должности (целое), Должность (текстовый, 30 символов)
CREATE TABLE Должность
(
[Код должности] INTEGER,
Должность CHAR (30)
);

Куликова Елена Васильевна

Слайд 152

3.1. Запросы на создание таблиц базы данных

Пример CrT2: создать таблицу Должность, содержащую

3.1. Запросы на создание таблиц базы данных Пример CrT2: создать таблицу Должность,
поля: Код должности (целое, ключ), Должность (текстовый, 30 символов, обязательное поле)
CREATE TABLE Должность
(
[Код должности] INTEGER PRIMARY KEY,
Должность CHAR(30) NOT NULL
);

Куликова Елена Васильевна

Слайд 153

3.1. Запросы на создание таблиц базы данных

Пример CrT3: создать таблицу Сотрудник (КодСотрудника

3.1. Запросы на создание таблиц базы данных Пример CrT3: создать таблицу Сотрудник
, Фамилия , Пол, Возраст), определив значение по умолчанию (пол “ж”), ограничение по возрасту (не менее 18 лет)
CREATE TABLE Сотрудник
(
КодСотрудника INTEGER PRIMARY KEY,
Фамилия CHAR(30) NOT NULL,
Пол CHAR(1) NOT NULL DEFAULT “Ж”,
Возраст INTEGER NOT NULL,
CHECK (Возраст >=18)
);
Перед выполнением запроса в параметрах
MS Access необходимо включить
Синтаксис для SQL Server (ANSI 92)

Ограничение целостности check позволяет задать для определённой колонки выражение, которое будет осуществлять проверку, помещаемого в эту колонку значения. 

Куликова Елена Васильевна

Слайд 154

3.1. Запросы на создание таблиц базы данных

Пример CrT3 (измененный): создать таблицу Сотрудник

3.1. Запросы на создание таблиц базы данных Пример CrT3 (измененный): создать таблицу
(КодСотрудника , Фамилия , Пол, Возраст), определив значение по умолчанию (пол “ж”), ограничение по возрасту (не менее 18 лет)
CREATE TABLE Сотрудник
(
КодСотрудника INTEGER PRIMARY KEY,
Фамилия CHAR(30) NOT NULL,
Пол CHAR(1) NOT NULL DEFAULT “Ж”,
Возраст INTEGER NOT NULL,
CONSTRAINT VOZRAST
CHECK (Возраст >=18)
);
VOZRAST – имя ограничения

Можно дать ограничению конкретное имя. Это сделает более понятными сообщения об ошибках и позволит ссылаться на это ограничение, когда понадобится его изменить.

Куликова Елена Васильевна

Слайд 155

3.2. Запросы на удаление таблиц базы данных

Синтаксис:
DROP TABLE <имя таблицы>;

Куликова Елена Васильевна

3.2. Запросы на удаление таблиц базы данных Синтаксис: DROP TABLE ; Куликова Елена Васильевна

Слайд 156

3.2. Запросы на удаление таблиц базы данных

Пример DR1: удалить таблицу Должность
DROP TABLE

3.2. Запросы на удаление таблиц базы данных Пример DR1: удалить таблицу Должность
Должность;
Удаление связанной таблицы таким запросом невозможно:
См. Пример AT8

Куликова Елена Васильевна

Слайд 157

3.3. Запросы на модификацию таблиц

Оператор ALTER TABLE позволяет модифицировать все то, что

3.3. Запросы на модификацию таблиц Оператор ALTER TABLE позволяет модифицировать все то,
указывается при выполнении оператора CREATE TABLE
Синтаксис:
ALTER TABLE <имя таблицы> предикат
где предикат может принимать одно из указанных ниже значений.
ADD COLUMN имя тип поля[(размер)] [NOT NULL] [CONSTRAINT ограничение]
ADD CONSTRAINT ограничение_нескольких_полей
ALTER COLUMN поле тип поля[(размер)]
DROP COLUMN поле
DROP CONSTRAINT ограничение

Куликова Елена Васильевна

Слайд 158

3.3. Запросы на модификацию таблиц

Пример AT1: добавить в таблицу Преподаватель поля Адрес

3.3. Запросы на модификацию таблиц Пример AT1: добавить в таблицу Преподаватель поля
(текстовый, 100 символов), Email (текстовый, 30 символов)
ALTER TABLE Преподаватель ADD COLUMN Адрес CHAR(100), Email CHAR(30);

Куликова Елена Васильевна

Слайд 159

3.3. Запросы на модификацию таблиц

Пример AT3: удалить из таблицы Преподаватель поле Email

3.3. Запросы на модификацию таблиц Пример AT3: удалить из таблицы Преподаватель поле

ALTER TABLE Преподаватель DROP COLUMN Email;

Куликова Елена Васильевна

Слайд 160

3.3. Запросы на модификацию таблиц

Пример AT4: создать ограничение поля Фамилия таблицы Преподаватель

3.3. Запросы на модификацию таблиц Пример AT4: создать ограничение поля Фамилия таблицы
(ограничение: обязательное поле)
ALTER TABLE Преподаватель ALTER COLUMN Фамилия CHAR
CONSTRAINT FamNotNull NOT NULL;
FamNotNull – имя ограничения

Куликова Елена Васильевна

Слайд 161

3.3. Запросы на модификацию таблиц

Пример AT5: создать ограничение поля Код должности таблицы

3.3. Запросы на модификацию таблиц Пример AT5: создать ограничение поля Код должности
Должность (ограничение: Primary Key)
ALTER TABLE Должность
ALTER COLUMN [Код должности] INTEGER
CONSTRAINT КодДолжности PRIMARY KEY;
КодДолжности – имя ограничения

Куликова Елена Васильевна

Слайд 162

3.3. Запросы на модификацию таблиц

Пример AT6: создать связь таблиц Должность и Преподаватель

3.3. Запросы на модификацию таблиц Пример AT6: создать связь таблиц Должность и
по полю Код должности
ALTER TABLE Преподаватель
ADD CONSTRAINT ПреподавательДолжность
FOREIGN KEY ([Код должности])
REFERENCES Должность ([Код должности]);
ПреподавательДолжность – имя ограничения

Куликова Елена Васильевна

Имя файла: SQL-(structured-query-language-—-язык-структурированных-запросов).pptx
Количество просмотров: 41
Количество скачиваний: 0