Язык запросов к реляционным базам данных Общая

Скачать презентацию Язык запросов к реляционным базам данных  Общая Скачать презентацию Язык запросов к реляционным базам данных Общая

lekciya_2-4(5)_yazyk_sql.ppt

  • Размер: 1.6 Мб
  • Автор:
  • Количество слайдов: 76

Описание презентации Язык запросов к реляционным базам данных Общая по слайдам

Язык запросов к реляционным базам данных Язык запросов к реляционным базам данных

Общая характеристика SQL.  Общая характеристика SQL.

Характеристика SQL – Structured Query Language – структурированный язык запросов  SQL – стандартныйХарактеристика SQL – Structured Query Language – структурированный язык запросов SQL – стандартный язык по работе с реляционными базами данными БДСУБДSQL- запрос данные SQL является языком взаимодействия с СУБД SQL является встраиваемым в другие языки программирования. SQL является слабоструктурированным языком

Стандарты SQL Стандартизация языка дает возможность получить независимость приложений БД от платформы СУБД СуществуетСтандарты SQL Стандартизация языка дает возможность получить независимость приложений БД от платформы СУБД Существует несколько различных стандартов языка SQL Стандарт ANSI / ISO SQL /89 ( SQL 1), SQL/92 (SQL 2) , SQL : 199 9 (SQL 3 ) , SQL : 2003 (SQL 4 ) , SQL : 2008 (SQL 5 ) American National Standards Institute – Американский институт национальных стандартов. International Standards Organization – Международная организация по стандартам. Стандарт X / OPEN — Европейский стандарт для ОС Unix Стандарт SQL Access Group для интерфейсов доступа к БД ( ODBC ) Появление стандарта SQL не решило задачу переносимости приложений с одной платформы на другую.

Структура SQL Язык SQL  операторы Определения данных ( DDL)  Изменения данных (Структура SQL Язык SQL операторы Определения данных ( DDL) Изменения данных ( DML) Выборки данных ( DQL) Управления доступом ( CAL) Управления транзакциями (Т CL) Программирования ( DCL) TABLE INDEX VIEWCREATE DROP ALTER INSERT DELETE UPDETE SELECT GRANT REVOKE DENY COMMIT ROLLBACK SAVE POINT PREPARE, EXECUTE, DECLARE, OPEN, FITCH, CLOS

Структура операторов SQL Глагол предложение… Определяет выполняемые действия Описывает данные или содержит уточняющую информациюСтруктура операторов SQL Глагол предложение… Определяет выполняемые действия Описывает данные или содержит уточняющую информацию о выполняемых действия Ключевое слово Наименование таблиц, столбцов или выражение включает Наименование таблиц, столбцов константы, функции, операции DELETE FROM ПРЕЙСКУРАНТ WHERE ЦЕНА < 2000 пример глагол предложение

Оператор создания БД Операторы создания, модификации и удаления базы данных в стандарте SQL отсутствуют!Оператор создания БД Операторы создания, модификации и удаления базы данных в стандарте SQL отсутствуют! В каждой СУБД используются свои подходы для выполнения этих операций В Oracle база данных создается в процессе установки СУБД. В OS/2 EE база данных создается специальной утилитой CREATEDATABASE (DROPDATABASE). В SQL Server база данных создается командой SQL CREATE DATABASE (DROP DATABASE). В MS Access база данных создается командой интерфейса.

Операторы описания структуры БД CREATE TABLE  имя_таблицы (  описание_элемента_таблицы [, …] )Операторы описания структуры БД CREATE TABLE имя_таблицы ( [, …] ) элемент_таблицы: 1) столбец, 2) ограничение целостности таблицы: Оператор создания таблицы а) первичный ключ Primary key … б) вторичный ключ Foreign key… в) условие уникальности Unique … г) условие проверки границ Check

Операторы описания структуры БД Описание столбца: имя_столбца тип [ DEFAULT значение  ] [Операторы описания структуры БД Описание столбца: имя_столбца тип [ DEFAULT значение ] [ NOT NULL ] [ ограничение_целостности_столбца ] Ограничение целостности столбца — это Primary key | Unique Foreign key references имя_таблицы_рк ( имя_столбца ) [ ON DELETE { CASCADE | SET NULL | SET DEFAULT | NO ACTION } ] [ ON UPDATE { CASCADE | SET NULL | SET DEFAULT | NO ACTION } ] Check ( условие_для столбца ) Нет в Т- SQLNULL в СУБД — специальное значение (псевдозначение), которое может принимать любое поле таблицы. Оно означает, что данные в поле не были введены. Операции с NULL в СУБД интерпретируются особым образом! Например, любая операция сравнения с NULL (даже сравнение NULL = NULL ), даёт в результате значение False , NULL – значения не участвуют в сравнении, если это только не специальное сравнение с NULL.

Операторы описания структуры БД Пример создания таблицы КЛИЕНТЫ CREATE TABLE  КЛИЕНТЫ ( КодОператоры описания структуры БД Пример создания таблицы КЛИЕНТЫ CREATE TABLE КЛИЕНТЫ ( Код integer not null Primary key Фирма varchar(40) not null , Код. Мен integer not null Foreign key references СЛУЖАЩИЕ(Код ) , Мин. Кредит money default 10000 not null Check( Мин. Кредит >=5000 )

Операторы описания структуры БД Описание ограничение целостности  таблицы в стандарте ANSI/ISO : PrimaryОператоры описания структуры БД Описание ограничение целостности таблицы в стандарте ANSI/ISO : Primary key | Unique ( имя_столбца [ , … ] ) Foreign key [ имя_отношения ] ( имя_столбца [ , … ] ) references имя_таблицы_РК ( имя_столбца [ , … ] ) [ ON DELETE { CASCADE | SET NULL | SET DEFAULT | NO ACTION } ] [ ON UPDATE { CASCADE | SET NULL | SET DEFAULT | NO ACTION } ] Check ( условие_для_столбцов ) CREATE TABLE КЛИЕНТЫ ( Код integer not null , Фирма varchar(40) not null , Код. Мен integer not null , Мин. Кредит money default 10000 not null , Primary key ( Код), Foreign key FK_ клиенты_служащие ( Код. Мен) references СЛУЖАЩИЕ (Код) , Check( Мин. Кредит >=5000 )Пример создания таблицы КЛИЕНТЫ

Операторы описания структуры БД  CONSTRAINT  имя_огр. целостности   {  {Операторы описания структуры БД CONSTRAINT имя_огр. целостности { { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] { ( имя_столбца [ ASC | DESC ] [ , . . . n ] ) } [ WITH FILLFACTOR = fillfactor ] [ ON { filegroup | DEFAULT } ] | FOREIGN KEY ( имя_столбца [ , . . . n ] ) REFERENCES имя_таблицы ( имя_столбца [ , . . . n ] ) [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] [ NOT FOR REPLICATION ] | DEFAULT значение FOR имя_столбца [ WITH VALUES ] | CHECK [ NOT FOR REPLICATION ] ( условие ) } Описание ограничений таблицы в MS SQL Server Литеральное значение, NULL или системная функция. Определяет заполнение имеющихся строк значением Дополнительно в Т- SQL

Операторы описания структуры БД ALTER TABLE  имя_таблицы   описание_изменений_таблицы Изменения определения таблицыОператоры описания структуры БД ALTER TABLE имя_таблицы Изменения определения таблицы ADD { | } DROP { имя_столбца | [ CONSTRAINT ] имя_ограничения }Добавить Удалить ALTER имя_столбца { SET DEFAULT значение | DROP DEFAULT}Изменить описание_изменений_таблицы : ALTER COLUMN имя_столбца тип { NULL | NOT NULL ]}MS SQL SERVER В T-SQL для изменения значения по умолчанию или ограничения доменной целостности надо выполнить удаление, а затем добавить соответственно новое значение.

Операторы описания структуры БД ALTER TABLE  имя_таблицы  ALTER COLUMN  имя_колонки Операторы описания структуры БД ALTER TABLE имя_таблицы ALTER COLUMN имя_колонки тип { NULL | NOT NULL ]}В MS SQL SERVER для столбцов непосредственно возможно изменить только тип и/или Null/Not null Нельзя изменять следующие столбцы: — используемый в ограничении PRIMARY KEY, FOREIGN KEY, CHECK или UNIQUE (но возможно увеличением длины столбца, используемого в ограничении CHECK или UNIQUE ); — вычисляемый столбец; — используемый в статистике, сформированной с помощью инструкции CREATE STATISTICS (кроме, столбцов varchar , nvarchar или varbinary , для которых тип не изменяется и не заменяется NULL. При этом, нужно предварительно удалить статистику); — с определением по умолчанию; … Нельзя изменять : — тип данных столбцов, включенных в индекс , кроме, изменения столбца с типом varchar , nvarchar или varbinary на новый размер больше старого); — с NOT NULL на NULL столбцы, включенные в первичный ключ. Для изменения имени таблицы или столбца в MS SQL SERVER применяется системная хранимая процедура (не оператор Т- SQL ) sp_rename (…)

Операторы описания структуры БД ALTER TABLE  КЛИЕНТЫ ADD  Foreign key  FK_Операторы описания структуры БД ALTER TABLE КЛИЕНТЫ ADD Foreign key FK_ клиенты_служащие ( Код. Мен) references СЛУЖАЩИЕ (Код)Пример в стандарте ANSI/ISO изменения таблицы КЛИЕНТЫ , после создания таблицы СЛУЖАЩИЕ ALTER TABLE КЛИЕНТЫ ADD CONSTRAINT FK_ клиенты_служащие Foreign key ( Код. Мен) references СЛУЖАЩИЕ (Код)Пример в MS SQL SERVER ( для сведения)

Оператор выборки данных Оператор выборки данных

Оператор выборки данных Получение данных из БД выполняется оператором SQL  SELECT возвращает результатыОператор выборки данных Получение данных из БД выполняется оператором SQL SELECT возвращает результаты выборки виде таблицы Оператор запросов SELECT реализует все операции реляционной алгебры.

Синтаксис оператора выборки SELECT  [ ALL | DISTINCT ]  список_столбцов  Синтаксис оператора выборки SELECT [ ALL | DISTINCT ] | * FROM [ WHERE ] [ GROUP BY ] [ HAVING ] [ ORDER BY [ ASC | DESC ] ] Синтаксис оператора SELECT ALL – в результирующий набор включаются все строки, удовлетворяющие условию запроса (повторы присутствуют). DISTINCT – в результирующий набор включаются только разные строки, удовлетворяющие условию запроса (повторы отсутствуют). * – в результирующий набор включаются все столбцы из заданных в FROM таблиц.

Синтаксис оператора выборки SELECT  [ ALL | DISTINCT ]  список_столбцов  Синтаксис оператора выборки SELECT [ ALL | DISTINCT ] | * FROM [ WHERE ] [ GROUP BY ] [ HAVING ] [ ORDER BY [ ASC | DESC ] ] Синтаксис оператора SELECT В предложении FROM задается перечень исходных таблиц, используемых в запросе. В предложении WHERE задается условие отбора строк или условие соединения строк (кортежей) исходных таблиц (отношений). В предложении GROUP BY задается список полей группировки для итоговых результатов, значения которых сводятся в одну строку. В предложении HAVING задается условие отбора строк для сгруппированных строк. В предложении ORDER BY задаются столбцы, по которым производиться сортировка полученных строк, а также порядок сортировки.

Однотабличные запросы к БД Примеры простых запросов к БД торговой компании Пример 1. ВывестиОднотабличные запросы к БД Примеры простых запросов к БД торговой компании Пример 1. Вывести все данные об офисах компании

Однотабличные запросы к БД Пример 1. Вывести все данные об офисах компании SELECT Однотабличные запросы к БД Пример 1. Вывести все данные об офисах компании SELECT * FROM Офис Пример 2. Вывести для каждого офиса их расположение и объемы продаж S ELECT Город, Регион, Продажи FROM Офис As Расположение S ELECT Город, Регион, Продажи FROM Офис

Однотабличные запросы к БД Пример. Вывести для каждого офиса их расположение и значения перевыполненияОднотабличные запросы к БД Пример. Вывести для каждого офиса их расположение и значения перевыполнения или невыполнения планов по продажам. SELECT Город AS Расположение , Регион, Продажи – План. Прод AS Результат FROM Офис Пример. Вывести офисы, в которых фактические объемы продаж превысили плановые. SELECT Город AS Расположение, Регион, Продажи FROM Офис WHERE Продажи > План. Прод

Однотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 1. Сравнение:Однотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 1. Сравнение: { = | | >= | <=} 2. Принадлежность к диапазону: between A and B Пример. Вывести заказы, сделанные в последнем квартале 1999 года. SELECT Код. Зак, Дата, MFR, Код. Тов, Стоим FROM Заказ WHERE Дата Between ‘ 01/10/1999 ’ And ‘ 31/12/1999 ’

Однотабличные запросы к БД 3. Вхождение в множество:      Однотабличные запросы к БД 3. Вхождение в множество: IN ( константы множества)В выражении WHERE используются 5 основных видов предикатов Пример. Вывести служащих, которые работают в городах с кодами 11, 13, 21. SELECT Имя, План, Продажи FROM Служащие WHERE Код. Офиса IN (11, 13, 21) SELECT Имя, План, Продажи FROM Служащие

Однотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 4. СравнениеОднотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 4. Сравнение с образцом: LIKE шаблон [ESCAPE символ пропуска ] SELECT Код, Фирма, Код. Мен, Мин. Кредит FROM Клиенты WHERE Фирма LIKE ‘ Solomon% ’SELECT Код, Фирма, Код. Мен, Мин. Кредит FROM Клиенты WHERE Фирма = ‘ Solomon ’Пример. Вывести данные по фирме- клиенту «Solomon»

Однотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 5. СравнениеОднотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 5. Сравнение с NULL : IS [NOT] NULL Предикаты в выражениях могут объединяться в более сложные выражения с использованием логических операций AND , OR , NOT Пример. Найти служащих, которых объем продаж меньше планового, но больше 150000 SELECT Имя, План, Продажи FROM Служащие WHERE План > Продажи and Продажи > 150000 WHERE План > Продажи

Сортировка результатов запроса S ELECT  Город AS расположение, Регион, Продажи FROM  ОфисСортировка результатов запроса S ELECT Город AS расположение, Регион, Продажи FROM Офис ORDER BY Регион, Город Было без сортировки Для вывода результата запроса в отсортированном виде используется выражение ORDER BY [ ASC | DESC ] ASC – в порядке возрастания DESC – в порядке убывания Пример 3. Вывести для каждого офиса их расположение и объемы продаж в отсортированном порядке по названию региона, а в каждом регионе – по названию города.

Многотабличные запросы Для выборки данных из нескольких таблиц в соответствии с РМ нужно задатьМноготабличные запросы Для выборки данных из нескольких таблиц в соответствии с РМ нужно задать условие на их соединение. Условием на соединение таблиц согласно РМ является равенство значений в соответствующих полях. Возможно 2 вида описания условия на соединение таблиц: 1. В выражении WHERE 2. В выражении FROM

Многотабличные запросы Пример. Вывести список всех заказов, включая номер, стоимость, имя клиента с егоМноготабличные запросы Пример. Вывести список всех заказов, включая номер, стоимость, имя клиента с его минимальным кредитом. SELECT Код. Зак, Стоим, Фирма, Мин. Кредит FROM Заказ, Клиенты WHERE Код = Заказчик ; Описание условия на соединение таблиц в выражении WHER

Многотабличные запросы Описание условия на соединение таблиц в выражении FROM  имя_таблицы  Многотабличные запросы Описание условия на соединение таблиц в выражении FROM INNER | LEFT | RIGHT | FULL | CROSS JOIN ON INNER – означает внутреннее соединение таблиц LEFT – означает внешнее левое соединение таблиц RIGHT – означает внешнее правое соединение таблиц CROSS – означает полное соединение таблиц. FULL – означает внешнее полное соединение таблиц

Многотабличные запросы SELECT  Код. Зак, Стоим, Фирма, Мин. Кредит FROM  Клиенты Многотабличные запросы SELECT Код. Зак, Стоим, Фирма, Мин. Кредит FROM Клиенты INNER JOIN Заказ ON Клиенты. Код = Заказчик. Пример. Тот же (Вывести список всех заказов, включая номер, стоимость, имя клиента с его минимальным кредитом). INNER

Многотабличные запросы  имя_таблицы   LEFT  JOIN  имя_таблицы _ соединения Многотабличные запросы LEFT JOIN ON Внешнее левое соединение таблиц – это сцепление каждой строк из 1 -й таблицы только с теми строками 2 -й таблицы, для которых выполняется условие соединения. Для строк 1 -й таблицы, для которых условие не выполнится, они сцепляются со столбцами, из 2 -й таблицы, содержащими значения NULL. LEFT

Многотабличные запросы Пример 4. Вывести для всех клиентов сделанные ими заказы. SELECT  Код,Многотабличные запросы Пример 4. Вывести для всех клиентов сделанные ими заказы. SELECT Код, Фирма, Код. Зак FROM Клиенты INNER JOIN Заказ ON Клиенты. Код = Заказчик ? ? Если использовать внутреннее объединение получим: Данные в таблице «КЛИЕНТЫ»

Многотабличные запросы Пример 5. Вывести для всех клиентов сделанные ими заказы. SELECT  Код,Многотабличные запросы Пример 5. Вывести для всех клиентов сделанные ими заказы. SELECT Код, Фирма, Код. Зак FROM Клиенты LEFT JOIN Заказ ON Клиенты. Код = Заказчик. Если использовать внешнее объединение получим:

Многотабличные запросы  имя_таблицы   RIGHT  JOIN  имя_таблицы _ соединения Многотабличные запросы RIGHT JOIN ON Внешнее правое соединение таблиц – это сцепление каждой строк из 2 -й таблицы только с теми строками 1 -й таблицы, для которых выполняется условие соединения. Для строк 2 -й таблицы, для которых условие не выполнится, они сцепляются со столбцами, из 1 -й таблицы, содержащими значения NULL. RIGHT

Многотабличные запросы  имя_таблицы   FULL JOIN  имя_таблицы _ соединения  Многотабличные запросы FULL JOIN ON Внешнее полное соединение таблиц – это объединение внешнего левого и внешнего правого соединений FULL

Многотабличные запросы Объединение 3 -х и более таблиц выполняется аналогично Пример. Вывести список заказовМноготабличные запросы Объединение 3 -х и более таблиц выполняется аналогично Пример. Вывести список заказов стоимостью более 25000, включая имя служащего, принявшего заказ, и имя клиента. SELECT Код. Зак, Стоим, Фирма, Имя FROM Клиенты, Заказ, Служащие WHERE Клиенты. Код = Заказчик AND Заказ. Продавец = Служащие. Код AND Заказ. Стоим > 25000 Условие на отбор записей Условие на соединение таблиц «Клиенты» и «Служащие» Условие на соединение таблиц «Клиенты» и «Заказ»

Многотабличные запросы Пример. Вывести список заказов стоимостью более 25000,  включая имя служащего, принявшегоМноготабличные запросы Пример. Вывести список заказов стоимостью более 25000, включая имя служащего, принявшего заказ, и имя клиента. SELECT Код. Зак, Стоим, Фирма, Имя FROM Служащие INNER JOIN ( Клиенты INNER JOIN Заказ ON Клиенты. Код = Заказчик ) ON Заказ. Продавец = Служащие. Код WHERE Заказ. Стоим > 25000 Виртуальная таблица, полученная путем соединения таблиц «Клиенты» и «Заказ»

Самообъединения Многотабличный запрос внутри одной таблицы называется самообъединением. Пример 6. Вывести для каждого служащегоСамообъединения Многотабличный запрос внутри одной таблицы называется самообъединением. Пример 6. Вывести для каждого служащего их начальников. SELECT Имя, Имя FROM Служащие, Служащие WHERE Код = Код. Мен Ошибка в запросе SELECT Имя, Имя FROM Служащие WHERE Код = Код. Мен

Самообъединения SELECT  Мен. Имя  AS  Служащие ,  Служащие. Имя Самообъединения SELECT Мен. Имя AS Служащие , Служащие. Имя AS Начальник FROM Служащие AS Мен , Служащие WHERE Мен. Код. Мен=Служащие. Код. Правильное решение – использование псевдонима таблицы.

Итоговые запросы Агрегатные функции COUNT()  –  количество строк или не пустых значенийИтоговые запросы Агрегатные функции COUNT() – количество строк или не пустых значений столбцов, полученных в запросе SUM() MIN() AVG() MAX() – сумма значений в столбце все строк, полученных в запросе – среднее арифметическое значение в столбце все строк, полученных в запросе – минимальное значение в столбце из все строк, полученных в запросе – максимальное значение в столбце из все строк, полученных в запросе

Итоговые запросы Пример. Какай общий объем заказов,  сделанных Bill Adams S ELECT Итоговые запросы Пример. Какай общий объем заказов, сделанных Bill Adams S ELECT sum (Стоим) as Всего FROM Заказ , Служащие WHERE Код = Продавец and Имя = ‘ Bill Adams ’ Пример. Сколько клиентов у компании S ELECT Count (Код) as [ Кол-во Клиентов ] FROM Клиенты

Итоговые запросы Пример. Сколько различных должностей имеется в компании S ELECT  Должность FROMИтоговые запросы Пример. Сколько различных должностей имеется в компании S ELECT Должность FROM Служащие. Последовательность составления правильного запроса Шаг 1. Получим список должностей всех сотрудников компании Шаг 2. Уберем одинаковые строки S ELECT Count ( DISTINCT Должность) As Кол FROM Клиенты. S ELECT DISTINCT Должность FROM Служащие Шаг 3. Получим количество строк

Группировка в запросах Группировка – это промежуточный итоговый запрос Пример. Какова средняя стоимость заказовГруппировка в запросах Группировка – это промежуточный итоговый запрос Пример. Какова средняя стоимость заказов по каждому служащему AVG AVGSELECT Продавец, Стоим FROM Заказ ORDER BY Продавец SELECT Продавец, AVG( Стоим ) FROM Заказ ORDER BY Продавец Ошибка в запросе SELECT Продавец, AVG ( Стоим ) FROM Заказ GROUP BY Продавец ORDER BY Продавец

Группировка в запросах Пример. Определить общую сумму заказов по каждому клиенту для каждого служащегоГруппировка в запросах Пример. Определить общую сумму заказов по каждому клиенту для каждого служащего SELECT Продавец, Заказчик, SUM ( Стоим ) FROM Заказ GROUP BY Продавец , Заказчик В список возвращаемых столбцов всегда должны входить столбцы группировки и агрегатные функции

Условие на группы Для отбора строк, полученных группировкой, используется выражение HAVING Пример. Какова средняяУсловие на группы Для отбора строк, полученных группировкой, используется выражение HAVING Пример. Какова средняя стоимость заказа для каждого служащего из числа тех, у кого общая стоимость заказов превышает 30000 В предложение HAVING должна входить как минимум одна агрегатная функция. В противном случае это условие можно переместить в предложение WHERESELECT Продавец, AVG ( Стоим ) FROM Заказ GROUP BY Продавец HAVING SUM( Стоим ) >

Условие на группы Пример 13. Для каждого офиса, где работает 2 и более человек,Условие на группы Пример 13. Для каждого офиса, где работает 2 и более человек, вычислить общий плановый и фактический объемы продаж для всех служащих офиса. SELECT Город, SUM (План) AS Sum_ План, SUM ( Служащие. Продажи) AS Sum_ Продаж FROM Офис INNER JOIN Служащие ON Офис. Код = Служащие. Код. Офиса GROUP BY Город HAVING COUNT (* ) > =

Вложенные запросы Вложенный запрос – это запрос, выполняемый внутри другого запроса Вложенный запрос содержитсяВложенные запросы Вложенный запрос – это запрос, выполняемый внутри другого запроса Вложенный запрос содержится в предложении WHERE или HAVING другого оператора SQL

Вложенные запросы Вложенный запрос имеет ту же структуру, что и основной оператор SELECT ,Вложенные запросы Вложенный запрос имеет ту же структуру, что и основной оператор SELECT , только берется в круглые скобки, и имеет ограничения Результатом вложенного запроса является таблица, состоящая из одного столбца Во вложенный запрос не должно входить предложение ORDER BY Во вложенном запросе не должен применяться запрос на объединение ( UNION) Во вложенном запросе можно использовать ссылки (имена) на столбцы таблиц главного запроса

Вложенные запросы Пример 14. Вывести список офисов, в которых план продаж по офису превышаетВложенные запросы Пример 14. Вывести список офисов, в которых план продаж по офису превышает суммарный план объемов продаж всех его сотрудников. SELECT Город FROM Офис WHERE План. Прод > ? ? ? Сумма плановых объемов продаж всех служащих, работающих в данном офисе SELECT SUM( План) FROM Служащие WHERE Код. Офиса = ? ? ? SELECT Город FROM Офис WHERE План. Прод > ( SELECT SUM( План) FROM Служащие WHERE Код. Офиса = Код)Офис. Код Офис.

Вложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 1. Сравнение сВложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 1. Сравнение с результатом вложенного запроса, состоящего из одного значения : { = | | >= | <=} ( Вложенный_запрос)

Вложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 2. Принадлежность кВложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 2. Принадлежность к нескольким результатам вложенного запроса : IN ( Вложенный_запрос) Пример 15. Вывести список служащих тех офисов, где фактический объем продаж превышает плановый. SELECT Имя FROM Служащие WHERE Код. Офиса IN ( SELECT Код FROM Офис WHERE Продажи > План. Прод )

Вложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 3. Проверка наВложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 3. Проверка на существование строк в результате вложенного запроса : EXISTS ( Вложенный_запрос) Пример 16. Вывести список товаров, на которые был получен заказ на сумму больше 25000 SELECT DISTINCT Наимен FROM Товары WHERE EXISTS ( SELECT Код. Зак FROM Заказ WHERE Код. Тов = Товары. Код. Тов AND Заказ. MFR = MFR_ID AND Стоим >= 25000 )

Результат запроса Табл.  «Заказы» Табл.  «Служащие» Вложенные запросы В SQL имеются следующиеРезультат запроса Табл. «Заказы» Табл. «Служащие» Вложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 4. Многократные сравнения результатом вложенного запроса, состоящего из нескольких значений: { = | | >= | <=} { ANY|ALL }( Вложенный_запрос) Пример 17. Вывести список служащих, принявших заказ на сумму большую, чем 10% от их плана. SELECT Стоим FROM Заказ WHERE Продавец = Код)SELECT Имя FROM Служащие WHERE План*0. 1 < ANY (

Вложенные запросы Пример. Вывести список тех офисов и их плановые объемы продаж,  уВложенные запросы Пример. Вывести список тех офисов и их плановые объемы продаж, у всех служащих которых фактический объем продаж больше 50% от плана офиса. SELECT Продажи FROM Служащие WHERE Код. Офиса = Код)SELECT Город, План. Прод FROM Офис WHERE План. Прод*0. 5 < ALL (

Вложенные запросы Многие запросы можно составить как вложенные, так и многотабличные SELECT  ИмяВложенные запросы Многие запросы можно составить как вложенные, так и многотабличные SELECT Имя FROM Офис INNER JOIN Служащие ON Офис. Код = Служащие. Код. Офиса WHERE Офис. Продажи > План. Прод. Пример. Вывести список служащих тех офисов, где фактический объем продаж превышает плановый. SELECT Имя FROM Служащие WHERE Код. Офиса IN ( SELECT Код FROM Офис WHERE Продажи > План. Прод ) Можно получить тот же результат многотабличным запросом

Вложенные запросы Но многие запросы нельзя составить по другому как вложенные Пример. Вывести именаВложенные запросы Но многие запросы нельзя составить по другому как вложенные Пример. Вывести имена и возраст служащих, для которых плановый объем продаж выше среднего по всем служащим. SELECT Имя, возраст FROM Служащие WHERE План > ( SELECT AVG( План ) FROM Служащие )

Вложенные запросы Уровни вложенности запросов в стандарте ANSI/ISO не ограничиваются максимальным значением Пример. ВывестиВложенные запросы Уровни вложенности запросов в стандарте ANSI/ISO не ограничиваются максимальным значением Пример. Вывести список клиентов, закрепленных за служащими, работающих в офисах “Eastern”. SELECT Код FROM Служащие WHERE Код. Офиса IN ( SELECT Код FROM Офис WHERE Регион = ‘Eastern’ )) SELECT Фирма FROM Клиенты WHERE Код. Мен IN (

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

Вложенные запросы Пример 17. Вывести список руководителей старше 40 лет,  подчиненные которых выполнилиВложенные запросы Пример 17. Вывести список руководителей старше 40 лет, подчиненные которых выполнили план продаж и не работают с ними в одном офисе. SELECT Код. Мен FROM Служащие Слж WHERE Слж. Продажи > Слж. План And Слж. Код. Офиса Мнж. Код. Офиса)SELECT Имя FROM Служащие Мнж WHERE Возраст > 40 And Мнж. Код IN (

Теоретико-множественные операций в T-SQL Теоретико-множественные операции – это операции S ELECT   поля/атрибутыТеоретико-множественные операций в T-SQL Теоретико-множественные операции – это операции S ELECT F ROM … S ELECT FROM … операция … объединения пересечения разности где UNION [ ALL ] — объединения INTERSECT — пересечения EXCEPT — разности Ограничения : 1. Поля/атрибуты отношений должны быть совместимы, т. е. должно быть одинаковое число столбцов и типы их должны быть совместимы в порядке их следования. 2. Имена полей результата будут определяться по первому запросу. 3. Сортировка применяется только ко всему результату и описывается в последнем Select

Теоретико-множественные операций в T-SQL Пример 18. Вывести список наименования товаров, которые заказывали только вТеоретико-множественные операций в T-SQL Пример 18. Вывести список наименования товаров, которые заказывали только в восточном регионе. SELECT DISTINCT Т. Наименование FROM Офис О INNER JOIN Служащие C ON O. Код = С. Код. Офиса INNER JOIN Заказ З ON С. Код = З. Продавец INNER JOIN Товары Т ON З. MFR = Т. MFR and З. Код. Тов = Т. Код. Тов WHERE О. Регион = ‘ Eastern ’ EXCEPT SELECT DISTINCT Т. Наименование FROM Офис О INNER JOIN Служащие C ON O. Код = С. Код. Офиса INNER JOIN Заказ З ON С. Код = З. Продавец INNER JOIN Товары Т ON З. MFR = Т. MFR and З. Код. Тов = Т. Код. Тов WHERE О. Регион = ‘ Western ’ ORDER BY

Операторы манипулирования данными Операторы манипулирования данными

Операторы изменения данных Изменения данных выполняется относительно одной таблицы INSERT DELETEДобавить записи Удалить записиОператоры изменения данных Изменения данных выполняется относительно одной таблицы INSERT DELETEДобавить записи Удалить записи UPDATEИзменить записи Изменение данных в таблице выполняется 3 -мя операциями

Оператор добавления INSERT Два типа операторов INSERT - Однострочный  INSERT -  МногострочныйОператор добавления INSERT Два типа операторов INSERT — Однострочный INSERT — Многострочный INSERT

Оператор добавления INSERT Однострочный  INSERT [ INTO ]  имя_таблицы [ ( имена_столбцовОператор добавления INSERT Однострочный INSERT [ INTO ] имя_таблицы [ ( имена_столбцов ) ] VALUES ( значения_столбцов ) Типы столбцов должны соответствовать значениям. Перечисление значений должно соответствовать последовательности перечислению столбцов Перечислены могут быть не все столбцызначения_столбцов – это константы, функции или значения NULL Для отсутствующих столбцов устанавливаются значения по умолчанию или NULL , если значения по умолчанию не заданы Список столбцов может отсутствовать, если задаются значения всех столбцов

Оператор добавления INSERT Пример. Добавить данные о новом служащем. INSERT INTO  СЛУЖАЩИЕ (Оператор добавления INSERT Пример. Добавить данные о новом служащем. INSERT INTO СЛУЖАЩИЕ ( Код, Имя, Возраст, Код. Офиса, Должность, Дата, Код. Мен, План, Продажи ) VALUES (111, ‘Henay Jacobson’ , 36, 13, ‘Salle Rep’ , ‘ 13/01/09’, 101, 10000, NULL ) Если при описании таблицы СЛУЖАЩИЕ для столбцов «Должность» задано значение по умолчанию “Salle Rep” , «Дата» задано значение по умолчанию Data() (текущая дата), «План» задано значение по умолчанию 10000, «Продажи» задано значение NULL , то … INSERT INTO СЛУЖАЩИЕ ( Код, Имя, Возраст, Код. Офиса, Код. Мен ) VALUES (111, ‘ Henay Jacobson ’ , 36, 13, 101)

Оператор добавления INSERT Многострочный  INSERT [ INTO ]  имя_таблицы [ ( имена_столбцовОператор добавления INSERT Многострочный INSERT [ INTO ] имя_таблицы [ ( имена_столбцов ) ] а) добавление данных в архивные таблицы – это запрос на чтение Использование б) добавление данных во временные таблицы Пример. Переписать данные о заказах за прошлый год в архивную таблицу Заказ. Арх, имеющую ту же структуру, что и таблица Заказ. INSERT INTO Заказ. Арх SELECT * FROM Заказ WHERE data Between ‘ 01/01/08/ and ‘ 31/12/08’

Оператор удаления DELETE Наименьшей удаляемой единицей информации является одна строка DELETE FROM  имя_таблицыОператор удаления DELETE Наименьшей удаляемой единицей информации является одна строка DELETE FROM имя_таблицы [ WHERE ] Оператор удаления в стандарте ANSI/ISO — определяет условие на отбор строк на удаление Пример. Удалить все заказы, сделанные до 15. 11. 0 8. DELETE FROM Заказ WHERE data < ‘ 15/11/08’ Пример. Удалить данные о всех служащих, принятых на работу до июля 1988 и не имеющих установленного личного плана. DELETE FROM Служащие WHERE data < ‘ 01 / 07 / 8 8’ and План IS NULL

Оператор удаления DELETE Оператор DELETE  для удаления строк с условием, связанным со столбцамиОператор удаления DELETE Оператор DELETE для удаления строк с условием, связанным со столбцами другой таблицы В стандарте ANSI/ISO это реализуется через вложенный запрос в условии WHERE Пример. Удалить все заказы, принятые Sue Smith. DELETE FROM Заказ WHERE Продавец = ( SELECT Код FROM Служащие WHERE Имя = ‘ Sue Smith ‘ ) Пример. Удалить данные о всех клиентах, которые обслуживались служащими, у которых фактический объем продаж меньше, чем 80% плана. DELETE FROM Клиенты WHERE Код. Мен IN ( SELECT Код FROM Служащие WHERE Продажи < 0. 9*План )

Оператор удаления DELETE В Transact-SQL (MS SLQ Server) удаление строк с условием,  связаннымОператор удаления DELETE В Transact-SQL (MS SLQ Server) удаление строк с условием, связанным с данными других таблиц, реализовано с использованием модифицированного формата оператора DELETE имя_таблицы FROM [ WHERE ] — условие соединения основной таблицы с другими таблицами как в операторе SELECT INNER | LEFT | RIGHT JOIN ON Пример тот же. Удалить все заказы, принятые Sue Smith. DELETE Заказ FROM Заказ INNER JOIN Служащие ON Заказ. Продавец = Служащие. Код WHERE Имя = ‘ Sue Smith ‘

Оператор удаления DELETE Пример. Удалить данные о всех клиентах, которые не сделали заказов сОператор удаления DELETE Пример. Удалить данные о всех клиентах, которые не сделали заказов с 01. 1989 DELETE FROM Клиенты WHERE NOT EXISTS ( SELECT * FROM Заказ WHERE Заказчик = Код and Дата > ‘ 01/11/89’) Ссылка на целевую таблицу во вложенном запросе является ссылкой на таблицу, в которой ещё не удалена ни одна строка.

Оператор обновления UPDATE Наименьшей обновляемой единицей информации является значение одного столбца UPDATE имя_таблицы SETОператор обновления UPDATE Наименьшей обновляемой единицей информации является значение одного столбца UPDATE имя_таблицы SET имя_столбца = [ , … ] [ WHERE ]Оператор обновления в стандарте ANSI/ISO Пример. Увеличить все личные планы служащих на 5%. UPDATE Служащие SET План = План*1. 05 включает наименование столбцов, констант, функций и выполняемых над ними операции

Оператор обновления UPDATE Пример. Перевести всех служащих из офиса с кодом 12 в офисОператор обновления UPDATE Пример. Перевести всех служащих из офиса с кодом 12 в офис с кодом 11 и понизить их личные планы на 5%. UPDATE Служащие SET План = План*0. 95, SET Код. Офиса = 11 WHERE Код. Офиса = 12 Условия выполнения оператора UPDATE Каждый столбец обновления ( SET для одного столбца) должен встретиться только один раз Если в выражении содержится ссылка на обновляемый столбец, то используется значение этого столбца в текущей строке до обновления. Если в WHERE содержится ссылка на обновляемый столбец, то используется значение этого столбца в текущей строке до обновления.

Оператор обновления UPDATE Оператор UPDATE  для обновления строк с условием,  связанным соОператор обновления UPDATE Оператор UPDATE для обновления строк с условием, связанным со столбцами другой таблицы в стандарте ANSI/ISO реализуется через вложенный запрос в условии WHERE , в Transact-SQL (MS SLQ Server) — с использованием модифицированного формата оператора UPDATE : UPDATE имя_таблицы SET имя_столбца = [ , … ] FROM [ , . . . ] | [ WHERE ] — это список таблиц, используемых в условиях проверки — то же, что в операторе DELET

Оператор обновления UPDATE Пример. Уменьшить на 5000 лимит кредита для тех клиентов, которые разместилиОператор обновления UPDATE Пример. Уменьшить на 5000 лимит кредита для тех клиентов, которые разместили заказ на сумму более 25000. UPDATE Клиенты SET Мин. Кредит = Мин. Кредит — 5000 WHERE Код IN ( SELECT Заказчик FROM Заказ WHERE Стоим > 25000) UPDATE Клиенты SET Мин. Кредит = Мин. Кредит — 5000 FROM Заказ WHERE Код = Заказчик AND Стоим >