270 likes | 476 Views
Языки манипулирования данными. Общая характеристика. Язык, в котором можно (по крайней мере) моделировать исчисление с переменными-кортежами, либо, что равносильно, реляционную алгебру или исчисление с переменными на доменах, называется полным. Обзор языков манипулирования данными (1).
E N D
Общая характеристика Язык, в котором можно (по крайней мере) моделировать исчисление с переменными-кортежами, либо, что равносильно, реляционную алгебру или исчисление с переменными на доменах, называется полным
Обзор языков манипулирования данными (1) ISBL (Information System Base Language) – «чистый» язык реляционной алгебры. Разработан в исследовательском центре фирмы IBM в Питерли (Англия) для использования в экспериментальной системе PRTV (Peterlee Relational Test Vehicle). Нет агрегатных операций, а также средств для вставки, удаления и модификации кортежей
Обзор языков манипулирования данными (2) SEQUEL (Structured English Query Language) – разработан в 1974 г. в исследовательской лаборатории IBM в Сан-Хосе; использует реляционную алгебру, но имеет синтаксис, напоминающий реляционное исчисление с переменными-кортежами. 1976 г. – СУБД System R; важнейший из результатов – разработка языка SQL (Structured Query Language)
Обзор языков манипулирования данными (3) QUEL – язык реляционного исчисления с переменными-кортежами, разработан в Калифорнийском университете в Беркли в конце 70-х г.г. для реляционной СУБД INGRES. Включает широкий спектр операторов реляционного исчисления с переменными-кортежами, агрегатные функции. Более структурирован, чем SQL
Обзор языков манипулирования данными (4) QBE (Query-By-Example) – язык исчисления с переменными на доменах; разработан в Исследовательском центре IBM в Йорктаун-Хейтсе. Предназначен для работы с терминала. Включены агрегатные функции
Обзор языков манипулирования данными (5) SQL (Structured Query Language) – язык, ориентированный на отображение; описывается отображение известного атрибута или множества атрибутов в искомый атрибут или множество атрибутов. Первая коммерческая СУБД – ORACLE (конец 70-х г.г.)
SQL 1982 г. – ANSI, 1983 г. – Международныйкомитет по стандартизации (ISO) 1987 г. – исходныйвариант стандарта языка SQL(SQL-87, SQL 1-го поколения) 1992 г. – перваяверсия стандарта ISO, SQL-2 или SQL-92 1999 г. – стандарт SQL-1999 (SQL-3); реляционные и объектно-ориентированные свойства
Предложения SQL INSERT INTO имятаблицы (колонка1, … ) VALUES (значение1, … ) DELETE FROM имя таблицы WHERE условие отбора строк UPDATEимя таблицы SETколонка1 = выражение, … WHEREусловие отбора строк
Формирование запросов SELECT DISTINCT список вывода FROMисточники WHERE условие отбора строк GROUP BYсписок для группирования HAVINGусловие отбора групп ORDER BYсписок для упорядочивания
Примеры запросов (1) Схема базы данных: S(Sid, SN, SC) – ПОСТАВЩИК ( Номер поставщика, Имя, Город) P(Pid, PN, PC) – ДЕТАЛЬ ( Номер детали, Название, Цена) SP(Sid(FK1), Pid(FK2), QTY) – ПОСТАВКА ( Номер поставщика, Номер детали, Количество)
Примеры запросов (2) • Получить имена поставщиков, поставляющих деталь с номером P1.
Примеры запросов (3) SELECT SN “Имя поставщика” FROM S JOIN SP ON S.Sid = SP.Sid WHERE Pid = ‘P1’
Примеры запросов (4) 2. Получить номера и имена поставщиков, не поставляющих деталь с номером P1
Примеры запросов (5) SELECT Sid, SN FROM S WHERE Sid NOT IN ( SELECT Sid FROM SP WHERE Pid = ‘P1’ )
Примеры запросов (6) 3. Получить имена поставщиков, поставляющих только деталь с номером P1
Примеры запросов (7) SELECT Sid, SN FROM S JOIN SP ON S.Sid = SP.Sid WHERE Pid = ‘P1’ AND S.Sid NOT IN ( SELECT Sid FROM SP WHERE Pid != ‘P1’ )
Примеры запросов (8) 4. Получить имена поставщиков, поставляющих все детали
Примеры запросов (9) SELECT SN FROM S WHERE NOT EXISTS ( SELECT Pid FROM P WHERE NOT EXISTS ( SELECT Sid FROM SP WHERE S.Sid = SP.Sid AND P.Pid = SP.Pid ) )
Использование агрегатных функций (1) 1. Для всех поставщиков получить отчет в виде:
Использование агрегатных функций (2) SELECT SN, coalesce(sum(Qty),0)as ‘TotalQTY’ FROM S left outer join SP on S.Sid = SP.Sid GROUP BY SN
Использование агрегатных функций (3) 2. Для поставщиков, поставляющих более одной разновидности товара, получить отчет в виде:
Использование агрегатных функций (4) SELECT SN, sum(Qty) as ‘TotalQTY’, count(Pid) as ‘Number of Products’ FROM S join SP on S.Sid = SP.Sid GROUP BY SN HAVING count(Pid) > 1
Использование агрегатных функций (5) 3. Получить имена поставщиков, поставляющих все детали SELECT SN FROM S join SP on S.Sid = SP.Sid GROUP BY SN HAVING count(Pid) = ( SELECT count(Pid) FROM P)
Использование агрегатных функций (6) Для поставщиков, поставляющих максимальное суммарное количество товара, получить отчет в виде:
Использование агрегатных функций (7) CREATE VIEW V1(Sid, Qty) as SELECT Sid, sum(Qty) from SP GROUP BY Sid go SELECT SN, Qty as ‘Total QTY’ FROM S join V1 on S.Sid = V1.Sid WHERE Qty = (SELECT max(Qty) From V1) DROP VIEW V1
Использование агрегатных функций (8) WITH V1(Sid, Qty) as ( SELECT Sid, sum(Qty) from SP GROUP BY Sid ) SELECT SN, Qty as ‘Total QTY’ FROM S join V1 on S.Sid = V1.Sid WHERE Qty = (SELECT max(Qty) From V1)