
Лекция 2-4(2) Язык SQL.ppt
- Количество слайдов: 72
Язык запросов к реляционным базам данных
Общая характеристика SQL.
Характеристика SQL – Structured Query Language – структурированный язык запросов SQL – стандартный язык по работе базами данными с реляционными SQL-запрос СУБД БД данные SQL является языком взаимодействия с СУБД SQL является слабоструктурированным языком SQL является встраиваемым в другие языки программирования
Стандарты SQL Стандартизация языка дает возможность получить независимость приложений БД от платформы СУБД Существует несколько различных стандартов языка SQL Стандарт ANSI/ISO SQL/89 (SQL 1), SQL/92 (SQL 2), SQL: 1999 (SQL 3), SQL: 2003 (SQL 4), SQL: 2008 (SQL 5) Стандарт X/OPEN - Европейский стандарт для ОС Unix Стандарт SQL Access Group для интерфейсов доступа к БД (ODBC) Появление стандарта SQL не решило задачу переносимости приложений с одной платформы на другую. American National Standards Institute – Американский институт национальных стандартов. International Standards Organization – Международная организация по стандартам.
Структура SQL Язык SQL Определения данных (DDL) операторы CREATE DROP ALTER TABLE INDEX VIEW INSERT DELETE UPDETE Выборки данных (DQL) SELECT GRANT REVOKE Управления доступом (CAL) DENY COMMIT Управления транзакциями (ТCL) ROLLBACK SAVE POINT PREPARE, EXECUTE, Программирования (DCL) DECLARE, OPEN, FITCH, CLOSE Изменения данных (DML)
Структура операторов SQL Глагол Определяет выполняемые действия Ключевое слово пример глагол предложение … предложение Описывает данные или содержит уточняющую информацию о выполняемых действия Наименование таблиц, столбцов или выражение включает Наименование таблиц, столбцов константы, предложение функции, операции DELETE FROM ПРЕЙСКУРАНТ WHERE ЦЕНА < 2000 предложение
Оператор создания БД Операторы создания, модификации и удаления базы данных в стандарте SQL отсутствуют! В каждой СУБД используются свои подходы для выполнения этих операций В Oracle база данных создается в процессе установки СУБД. В OS/2 EE база данных создается специальной утилитой CREATEDATABASE (DROPDATABASE). В MS Access база данных создается командой интерфейса. В SQL Server база данных создается командой SQL CREATE DATABASE (DROP DATABASE).
Операторы описания структуры БД Оператор создания таблицы CREATE TABLE имя_таблицы (<описание_элемента_таблицы>[, …]) элемент_таблицы: 1) столбец, 2) ограничение целостности таблицы: а) первичный ключ Primary key … б) вторичный ключ Foreign key… в) условие уникальности Unique … г) условие проверки границ Check
Операторы описания структуры БД Описание столбца: имя_столбца тип [DEFAULT значение ] [NOT NULL] [ограничение_целостности_столбца] Ограничение целостности столбца - это Primary key | Unique Нет в Т-SQL 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 Primary key Фирма varchar(40) not null, Код. Мен integer not null Foreign key references СЛУЖАЩИЕ(Код), Мин. Кредит money default 10000 not null Check(Мин. Кредит >=5000)
Операторы описания структуры БД Описание ограничение целостности таблицы в стандарте 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)
Операторы описания структуры БД Описание ограничений таблицы в MS SQL Server 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 ] | CHECK [ NOT FOR REPLICATION ] ( условие ) }
Операторы описания структуры БД Изменения определения таблицы ALTER TABLE имя_таблицы <описание_изменений_таблицы> описание_изменений_таблицы: Добавить ADD {<определение_столбца> | <определение_ограничения_целостности_таблицы>} Удалить DROP {имя_столбца | [ CONSTRAINT ] имя_ограничения} Изменить ALTER имя_столбца { SET DEFAULT значение | DROP DEFAULT}
Операторы описания структуры БД Пример в стандарте ANSI/ISO изменения таблицы КЛИЕНТЫ, после создания таблицы СЛУЖАЩИЕ ALTER TABLE КЛИЕНТЫ ADD Foreign key FK_клиенты_служащие (Код. Мен) references СЛУЖАЩИЕ (Код) Пример в MS SQL SERVER (для сведения) ALTER TABLE КЛИЕНТЫ ADD CONSTRAINT FK_клиенты_служащие Foreign key (Код. Мен) references СЛУЖАЩИЕ (Код)
Оператор выборки данных
Оператор выборки данных Получение данных из БД выполняется оператором SQL SELECT возвращает результаты выборки виде таблицы Оператор запросов SELECT реализует все операции реляционной алгебры.
Синтаксис оператора выборки Синтаксис оператора SELECT [ALL | DISTINCT] <список_столбцов> | * FROM <список_таблиц> [ WHERE <условие_отбора_или_соединения> ] [ GROUP BY <список_столбцов_результата>] [ HAVING <условие_отбора_для_группы> ] [ ORDER BY <список_столбцов_сортировки> [ ASC | DESC ] ] ALL – в результирующий набор включаются все строки, удовлетворяющие условию запроса (повторы присутствуют). DISTINCT– в результирующий набор включаются только разные строки, удовлетворяющие условию запроса (повторы отсутствуют). * – в результирующий набор включаются все столбцы из заданных в FROM таблиц.
Синтаксис оператора выборки Синтаксис оператора SELECT [ALL | DISTINCT] <список_столбцов> | * FROM <список_таблиц> [ WHERE <условие_отбора_или_соединения> ] [ GROUP BY <список_столбцов_результата>] [ HAVING <условие_отбора_для_группы> ] [ ORDER BY <список_столбцов_сортировки> [ ASC | DESC ] ] В предложении FROM задается перечень исходных таблиц, используемых в запросе. В предложении WHERE задается условие отбора строк или условие соединения строк (кортежей) исходных таблиц (отношений). В предложении GROUP BY задается список полей группировки для итоговых результатов, значения которых сводятся в одну строку. В предложении HAVING задается условие отбора строк для сгруппированных строк. В предложении ORDER BY задаются столбцы, по которым производиться сортировка полученных строк, а также порядок сортировки.
Однотабличные запросы к БД Примеры простых запросов к БД торговой компании Пример 1. Вывести все данные об офисах компании
Однотабличные запросы к БД Пример 1. Вывести все данные об офисах компании SELECT * FROM Офис Пример 2. Вывести для каждого офиса их расположение и объемы продаж As Расположение SELECT Город, Регион, Продажи FROM Офис
Однотабличные запросы к БД Пример. Вывести для каждого офиса их расположение и значения перевыполнения или невыполнения планов по продажам. SELECT Город AS Расположение, Регион, Продажи–План. Прод AS Результат FROM Офис Пример. Вывести офисы, в которых фактические объемы продаж превысили плановые. SELECT Город AS Расположение, Регион, Продажи FROM Офис WHERE Продажи > План. Прод
Однотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 1. Сравнение: { = | <> | >= | <=} 2. Принадлежность к диапазону: <выражение> between A and B Пример. Вывести заказы, сделанные в последнем квартале 1999 года. SELECT Код. Зак, Дата, MFR, Код. Тов, Стоим FROM Заказ WHERE Дата Between #01/10/1999# And #31/12/1999#
Однотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 3. Вхождение в множество: <выражение> IN (константы множества) Пример. Вывести служащих, которые работают в городах с кодами 11, 13, 21. SELECT Имя, План, Продажи FROM Служащие WHERE Код. Офиса IN (11, 13, 21) SELECT Имя, План, Продажи FROM Служащие
Однотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 4. Сравнение с образцом: <имя_столбца> LIKE шаблон [ESCAPE символ пропуска] Пример. Вывести данные по фирме- клиенту "Solomon" SELECT Код, Фирма, Код. Мен, Мин. Кредит FROM Клиенты WHERE Фирма = "Solomon" SELECT Код, Фирма, Код. Мен, Мин. Кредит FROM Клиенты WHERE Фирма LIKE "Solomon%"
Однотабличные запросы к БД В выражении WHERE используются 5 основных видов предикатов 5. Сравнение с NULL: <имя_столбца> IS [NOT] NULL Предикаты в выражениях могут объединяться в более сложные выражения с использованием логических операций AND, OR, NOT Пример. Найти служащих, которых объем продаж меньше планового, но больше 150000 SELECT Имя, План, Продажи FROM Служащие WHERE План > Продажи and Продажи > 150000 WHERE План > Продажи
Сортировка результатов запроса Для вывода результата запроса в отсортированном виде используется выражение ORDER BY <список_столбцов_сортировки> [ ASC | DESC ] ASC – в порядке возрастания DESC – в порядке убывания Пример 3. Вывести для каждого офиса их расположение и объемы продаж в отсортированном порядке по названию региона, а в каждом регионе – по названию города. SELECT Город AS расположение, Регион, Продажи FROM Офис ORDER BY Регион, Город Было без сортировки
Многотабличные запросы Для выборки данных из нескольких таблиц в соответствии с РМ нужно задать условие на их соединение. Условием на соединение таблиц согласно РМ является равенство значений в соответствующих полях. Возможно 2 вида описания условия на соединение таблиц: 1. В выражении WHERE 2. В выражении FROM
Многотабличные запросы Описание условия на соединение таблиц в выражении WHERE Пример. Вывести список всех заказов, включая номер, стоимость, имя клиента с его минимальным кредитом. SELECT Код. Зак, Стоим, Фирма, Мин. Кредит FROM Заказ, Клиенты WHERE Код = Заказчик;
Многотабличные запросы Описание условия на соединение таблиц в выражении FROM <имя_таблицы> INNER | LEFT | RIGHT JOIN <имя_таблицы_соединения> ON <условие_соединения> INNER – означает внутреннее соединение таблиц LEFT – означает внешнее левое соединение таблиц RIGHT – означает внешнее правое соединение таблиц
Многотабличные запросы Пример. Тот же (Вывести список всех заказов, включая номер, стоимость, имя клиента с его минимальным кредитом). SELECT Код. Зак, Стоим, Фирма, Мин. Кредит FROM Клиенты INNER JOIN Заказ ON Клиенты. Код = Заказчик
Многотабличные запросы Внешнее левое соединение таблиц <имя_таблицы> LEFT JOIN <имя_таблицы_соединения> ON <условие_соединения> Внешнее левое соединение таблиц – это сцепление каждой строк из 1 -й таблицы только с теми строками 2 -й таблицы, для которых выполняется условие соединения. Для строк 1 -й таблицы, для которых условие не выполнится, они сцепляются со столбцами, из 2 -й таблицы, содержащими значения NULL.
Многотабличные запросы Пример 4. Вывести для всех клиентов сделанные ими заказы. Если использовать внутреннее объединение получим: SELECT Код, Фирма, Код. Зак FROM Клиенты INNER JOIN Заказ ON Клиенты. Код = Заказчик Данные в таблице «КЛИЕНТЫ» ? ?
Многотабличные запросы Пример 5. Вывести для всех клиентов сделанные ими заказы. Если использовать внешнее объединение получим: SELECT Код, Фирма, Код. Зак FROM Клиенты LEFT JOIN Заказ ON Клиенты. Код = Заказчик
Многотабличные запросы Внешнее правое соединение таблиц <имя_таблицы> RIGHT JOIN <имя_таблицы_соединения> ON <условие_соединения> Внешнее правое соединение таблиц – это сцепление каждой строк из 2 -й таблицы только с теми строками 1 -й таблицы, для которых выполняется условие соединения. Для строк 2 -й таблицы, для которых условие не выполнится, они сцепляются со столбцами, из 1 -й таблицы, содержащими значения NULL.
Многотабличные запросы Объединение 3 -х и более таблиц выполняется аналогично Пример. Вывести список заказов стоимостью более 25000, включая имя служащего, принявшего заказ, и имя клиента. Условие на соединение SELECT Код. Зак, Стоим, Фирма, Имя таблиц «Клиенты» и «Заказ» FROM Клиенты, Заказ, Служащие WHERE Клиенты. Код = Заказчик AND Заказ. Продавец = Служащие. Код AND Заказ. Стоим > 25000 Условие на отбор записей Условие на соединение таблиц «Клиенты» и «Служащие»
Многотабличные запросы Пример. Вывести список заказов стоимостью более 25000, Виртуальная таблица, включая имя служащего, принявшего заказ, и имя клиента. полученная путем соединения таблиц «Клиенты» и «Заказ» SELECT Код. Зак, Стоим, Фирма, Имя FROM Служащие INNER JOIN (Клиенты INNER JOIN Заказ ON Клиенты. Код = Заказчик) ON Заказ. Продавец = Служащие. Код WHERE Заказ. Стоим > 25000
Самообъединения Многотабличный запрос внутри одной таблицы называется самообъединением. Пример 6. Вывести для каждого служащего их начальников. Ошибка в запросе SELECT Имя, Имя FROM Служащие, Служащие WHERE Код = Код. Мен SELECT Имя, Имя FROM Служащие WHERE Код = Код. Мен
Самообъединения Правильное решение – использование псевдонима таблицы. SELECT Мен. Имя AS Служащие, Служащие. Имя AS Начальник FROM Служащие AS Мен, Служащие WHERE Мен. Код. Мен=Служащие. Код
Итоговые запросы Агрегатные функции COUNT() SUM() AVG() MIN() MAX() – количество строк или не пустых значений столбцов, полученных в запросе – сумма значений в столбце все строк, полученных в запросе – среднее арифметическое значение в столбце все строк, полученных в запросе – минимальное значение в столбце из все строк, полученных в запросе – максимальное значение в столбце из все строк, полученных в запросе
Итоговые запросы Пример. Какай общий объем заказов, сделанных Bill Adams SELECT sum(Стоим) as Всего FROM Заказ, Служащие WHERE Код = Продавец and Имя = "Bill Adams" Пример. Сколько клиентов у компании SELECT Count(Код) as [Кол-во Клиентов] FROM Клиенты
Итоговые запросы Пример. Сколько различных должностей имеется в компании Последовательность составления правильного запроса Шаг 1. Получим список должностей всех сотрудников компании SELECT Должность FROM Служащие Шаг 2. Уберем одинаковые строки SELECT DISTINCT Должность FROM Служащие Шаг 3. Получим количество строк SELECT Count(DISTINCT Должность) As Кол FROM Клиенты
Группировка в запросах Группировка – это промежуточный итоговый запрос Пример. Какова средняя стоимость заказов по каждому служащему SELECT Продавец, Стоим FROM Заказ ORDER BY Продавец SELECT Продавец, AVG(Стоим) FROM Заказ Ошибка в запросе ORDER BY Продавец SELECT Продавец, AVG(Стоим) FROM Заказ GROUP BY Продавец ORDER BY Продавец AVG AVG
Группировка в запросах Пример. Определить общую сумму заказов по каждому клиенту для каждого служащего SELECT Продавец, Заказчик, SUM(Стоим) FROM Заказ GROUP BY Продавец , Заказчик В список возвращаемых столбцов всегда должны входить столбцы группировки и агрегатные функции
Условие на группы Для отбора строк, полученных группировкой, используется выражение HAVING Пример. Какова средняя стоимость заказа для каждого служащего из числа тех, у кого общая стоимость заказов превышает 30000 SELECT Продавец, AVG(Стоим) FROM Заказ GROUP BY Продавец HAVING SUM(Стоим) > 30000 В предложение HAVING должна входить как минимум одна агрегатная функция. В противном случае это условие можно переместить в предложение WHERE
Условие на группы Пример 13. Для каждого офиса, где работает 2 и более человек, вычислить общий плановый и фактический объемы продаж для всех служащих офиса. SELECT Город, SUM(План) AS Sum_План, SUM(Служащие. Продажи) AS Sum_Продаж FROM Офис INNER JOIN Служащие ON Офис. Код = Служащие. Код. Офиса GROUP BY Город HAVING COUNT(*) >= 2
Вложенные запросы Вложенный запрос – это запрос, выполняемый внутри другого запроса Вложенный запрос содержится в предложении WHERE или HAVING другого оператора SQL
Вложенные запросы Вложенный запрос имеет ту же структуру, что и основной оператор SELECT, только берется в круглые скобки, и имеет ограничения Результатом вложенного запроса является таблица, состоящая из одного столбца Во вложенный запрос не должно входить предложение ORDER BY Во вложенном запросе не должен применяться запрос на объединение (UNION) Во вложенном запросе можно использовать ссылки (имена) на столбцы таблиц главного запроса
Вложенные запросы Пример 14. Вывести список офисов, в которых план продаж по офису превышает суммарный план объемов продаж всех его сотрудников. SELECT Город FROM Офис WHERE План. Прод > ? ? ? Сумма плановых объемов продаж всех служащих, работающих в данном офисе SELECT SUM(План) FROM Служащие WHERE Код. Офиса = ? ? ? SELECT Город FROM Офис. Код WHERE План. Прод > (SELECT SUM(План) FROM Служащие Офис. WHERE Код. Офиса = Код)
Вложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 1. Сравнение с результатом вложенного запроса, состоящего из одного значения : <выражение> { = | <> | >= | <=} (Вложенный_запрос)
Вложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 2. Принадлежность к нескольким результатам вложенного запроса : <выражение> IN (Вложенный_запрос) Пример 15. Вывести список служащих тех офисов, где фактический объем продаж превышает плановый. SELECT Имя FROM Служащие WHERE Код. Офиса IN ( SELECT Код FROM Офис WHERE Продажи > План. Прод )
Вложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 3. Проверка на существование строк в результате вложенного запроса : EXISTS (Вложенный_запрос) Пример 16. Вывести список товаров, на которые был получен заказ на сумму больше 25000 SELECT DISTINCT Наимен FROM Товары WHERE EXISTS ( SELECT Код. Зак FROM Заказ WHERE Код. Тов = Товары. Код. Тов AND Заказ. MFR = MFR_ID AND Стоим >= 25000 )
Вложенные запросы В SQL имеются следующие условия поиска во вложенном запросе 4. Многократные сравнения результатом вложенного запроса, состоящего из нескольких значений: <выражение> { = | <> | >= | <=}{ANY|ALL}(Вложенный_запрос) Пример 17. Вывести список служащих, принявших заказ на сумму большую, чем 10% от их плана. Табл. «Заказы» SELECT Имя FROM Служащие WHERE План*0. 1 < ANY ( SELECT Стоим FROM Заказ WHERE Продавец = Код) Результат запроса Табл. «Служащие»
Вложенные запросы Пример. Вывести список тех офисов и их плановые объемы продаж, у всех служащих которых фактический объем продаж больше 50% от плана офиса. SELECT Город, План. Прод FROM Офис WHERE План. Прод*0. 5 < ALL ( SELECT Продажи FROM Служащие WHERE Код. Офиса = Код)
Вложенные запросы Многие запросы можно составить как вложенные, так и многотабличные Пример. Вывести список служащих тех офисов, где фактический объем продаж превышает плановый. SELECT Имя FROM Служащие WHERE Код. Офиса IN ( SELECT Код FROM Офис WHERE Продажи > План. Прод ) Можно получить тот же результат многотабличным запросом SELECT Имя FROM Офис INNER JOIN Служащие ON Офис. Код = Служащие. Код. Офиса WHERE Офис. Продажи > План. Прод
Вложенные запросы Но многие запросы нельзя составить по другому как вложенные Пример. Вывести имена и возраст служащих, для которых плановый объем продаж выше среднего по всем служащим. SELECT Имя, возраст FROM Служащие WHERE План > ( SELECT AVG(План) FROM Служащие )
Вложенные запросы Уровни вложенности запросов в стандарте ANSI/ISO не ограничиваются максимальным значением Пример. Вывести список клиентов, закрепленных за служащими, работающих в офисах “Eastern”. SELECT Фирма FROM Клиенты WHERE Код. Мен IN ( SELECT Код FROM Служащие WHERE Код. Офиса IN ( SELECT Код FROM Офис WHERE Регион = “Eastern”))
Вложенные запросы Во вложенном запросе можно использовать ссылки на столбцы (имена) таблиц любого запроса, независимо от уровня вложенности Во вложенном запросе неполное имя столбца относится, в первую очередь, к таблице в предложении FROM собственно вложенного запроса, во вторую, к ближайшему предложению FROM верхнего уровня запроса. При возникновении неоднозначности ссылок к внешнему или внутреннему запросу, необходимо использовать псевдонимы таблиц.
Вложенные запросы Пример 17. Вывести список руководителей старше 40 лет, подчиненные которых выполнили план продаж и не работают с ними в одном офисе. SELECT Имя FROM Служащие Мнж WHERE Возраст > 40 And Мнж. Код IN ( SELECT Код. Мен FROM Служащие Слж WHERE Слж. Продажи > Слж. План And Слж. Код. Офиса <> Мнж. Код. Офиса)
Операторы манипулирования данными
Операторы изменения данных Изменения данных выполняется относительно одной таблицы Изменение данных в таблице выполняется 3 -мя операциями Добавить записи INSERT Удалить записи DELETE Изменить записи UPDATE
Оператор добавления INSERT Два типа операторов INSERT - Однострочный INSERT - Многострочный INSERT
Оператор добавления INSERT Однострочный INSERT [ INTO ] имя_таблицы [ (имена_столбцов) ] VALUES (значения_столбцов) значения_столбцов – это константы, функции или значения NULL Перечисление значений должно соответствовать последовательности перечислению столбцов Типы столбцов должны соответствовать значениям Перечислены могут быть не все столбцы Для отсутствующих столбцов устанавливаются значения по умолчанию или NULL, если значения по умолчанию не заданы Список столбцов может отсутствовать, если задаются значения всех столбцов
Оператор добавления 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 INTO Заказ. Арх SELECT * FROM Заказ WHERE data Between #01/01/08# and #31/12/08#
Оператор удаления DELETE Наименьшей удаляемой единицей информации является одна строка Оператор удаления в стандарте ANSI/ISO DELETE FROM имя_таблицы [WHERE <условие_отбора>] <условие_отбора> - определяет условие на отбор строк на удаление Пример. Удалить все заказы, сделанные до 15. 11. 08. DELETE FROM Заказ WHERE data < #15/11/08# Пример. Удалить данные о всех служащих, принятых на работу до июля 1988 и не имеющих установленного личного плана. DELETE FROM Служащие WHERE data < #01/07/88# and План IS NULL
Оператор удаления 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 имя_таблицы FROM <условие_соединения> [WHERE <условие_отбора>] < условие_соединения > - условие соединения основной таблицы с другими таблицами как в операторе SELECT <имя_таблицы> INNER | LEFT | RIGHT JOIN <имя_таблицы_соединения> ON <условие_соединения> Пример тот же. Удалить все заказы, принятые Sue Smith. DELETE Заказ FROM Заказ INNER JOIN Служащие ON Заказ. Продавец = Служащие. Код WHERE Имя = ‘Sue Smith‘
Оператор удаления DELETE Пример. Удалить данные о всех клиентах, которые не сделали заказов с 01. 1989 DELETE FROM Клиенты WHERE NOT EXISTS (SELECT * FROM Заказ WHERE Заказчик = Код and Дата > #01/11/89#) Ссылка на целевую таблицу во вложенном запросе является ссылкой на таблицу, в которой ещё не удалена ни одна строка.
Оператор обновления UPDATE Наименьшей обновляемой единицей информации является значение одного столбца Оператор обновления в стандарте ANSI/ISO UPDATE имя_таблицы SET имя_столбца = <выражение> [ , … ] [WHERE <условие_отбора> ] <выражение> включает наименование столбцов, констант, функций и выполняемых над ними операции Пример. Увеличить все личные планы служащих на 5%. UPDATE Служащие SET План = План*1. 05
Оператор обновления UPDATE Условия выполнения оператора UPDATE Каждый столбец обновления (SET для одного столбца) должен встретиться только один раз Если в выражении содержится ссылка на обновляемый столбец, то используется значение этого столбца в текущей строке до обновления. Если в WHERE содержится ссылка на обновляемый столбец, то используется значение этого столбца в текущей строке до обновления. Пример. Перевести всех служащих из офиса с кодом 12 в офис с кодом 11 и понизить их личные планы на 5%. UPDATE Служащие SET План = План*0. 95, SET Код. Офиса = 11 WHERE Код. Офиса = 12
Оператор обновления UPDATE Оператор UPDATE для обновления строк с условием, связанным со столбцами другой таблицы в стандарте ANSI/ISO реализуется через вложенный запрос в условии WHERE, в Transact-SQL (MS SLQ Server) - с использованием модифицированного формата оператора UPDATE: UPDATE имя_таблицы SET имя_столбца = <выражение> [ , … ] FROM <таблицы>[ , . . . ] | <условие_соединения> [WHERE <условия_отбора_соединения> ] <таблицы> - это список таблиц, используемых в условиях проверки <условие_соединения> - то же, что в операторе DELETE
Оператор обновления UPDATE Пример. Уменьшить на 5000 лимит кредита для тех клиентов, которые разместили заказ на сумму более 25000. UPDATE Клиенты SET Мин. Кредит = Мин. Кредит - 5000 WHERE Код IN ( SELECT Заказчик FROM Заказ WHERE Стоим > 25000) UPDATE Клиенты SET Мин. Кредит = Мин. Кредит - 5000 FROM Заказ WHERE Код = Заказчик AND Стоим > 25000
Лекция 2-4(2) Язык SQL.ppt