БАЗЫ ДАННЫХ ЛЕКЦИЯ 12
тема: ОСНОВЫ ЯЗЫКА SQL
Общие сведения SQL структурированный язык запросов (Structured Query Language)
Стандарты SQL SQL-1 SQL-89 SQL-2 SQL-92
Диалекты SQL Диалект – некоторое подмножество стандарта SQL Каждый диалект включает некоторое расширение стандартного SQL
Определение данных СОЗДАНИЕ ТАБЛИЦ CREATE TABLE имяТаблицы (описаниеСтолбца,… [ограничение целостности,…]) описаниеСтолбца :: = имяСтолбца типСтолбца [(размер)] [ограничение целостности]
Определение данных ОГРАНИЧЕНИЯ ЦЕЛОСТНОСТИ 1) Ограничение первичного ключа PRIMARY KEY (Столбец,…) CONSTRAINT PK_s_no PRIMARY KEY (s_no) 2) Ограничение ключа-кандидата UNIQUE (Столбец)
Определение данных ОГРАНИЧЕНИЯ ЦЕЛОСТНОСТИ 3) Ограничение внешнего ключа FOREIGN KEY (Столбец,…) REFERENCES имяРодительскойТаблицы [(столбцы потенциального ключа)] Задание правил ссылочной целостности ON DELETE (RESTRICT, CASCADE, NO ACTION) ON UPDATE (RESTRICT, CASCADE, NO ACTION)
Определение данных ОГРАНИЧЕНИЕ ОБЯЗАТЕЛЬНОСТИ NULL / NOT NULL ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ DEFAULT (Значение) ПРОВЕРКА ЗНАЧЕНИЯ CHECK (Условие)
Определение данных
CREATE TABLE s ( s_no INT IDENTITY(1,1) PRIMARY KEY, sname CHAR(10) NOT NULL, city CHAR(15) NOT NULL, status INT ) CREATE TABLE p ( p_no INT IDENTITY(1,1) PRIMARY KEY, pname CHAR(10) NOT NULL, city CHAR(15) NOT NULL, color CHAR(10), weight INT ) CREATE TABLE sp ( s_no INT, p_no INT, qty INT, PRIMARY KEY(s_no, p_no), FOREIGN KEY(s_no) REFERENCES s(s_no) ON UPDATE CASCADE, FOREIGN KEY(p_no) REFERENCES p(p_no) ON UPDATE CASCADE )
Определение данных УДАЛЕНИЕ ТАБЛИЦ DROP TABLE имяТаблицы УДАЛЕНИЕ СТОЛБЦОВ DROP имяСтолбца RESTRICT/CASCADE УДАЛЕНИЕ ОГРАНИЧЕНИЙ DROP CONSTRAINT имяСтолбца RESTRICT/CASCADE
Выборка данных SELECT список_столбцов_результата FROM базовая_таблица WHERE условие_отбора_строк GROUP BY критерий_группирования_строк HAVING условие_отбора_групп ORDER BY критерий_сортировки_результата
Выборка данных Извлечь все сведения о товарах SELECT * FROM p SELECT p_no, pname, weight, city, color FROM p SELECT p.p_no, p.pname, p.weight, p.city, p.color FROM p
Выборка данных Извлечь сведения о поставщиках из Парижа или Лондона со статусом от 20 до 30 с упорядочиванием результата по именам поставщиков SELECT * FROM s WHERE (city=London OR city = Paris) AND status BETWEEN 20 and 30 ORDER BY sname ASC DESC SELECT * FROM s WHERE city IN (London, Paris) AND status BETWEEN 20 and 30 ORDER BY sname ASC DESC
Выборка данных Извлечь сведения о поставщиках из Парижа или Лондона со статусом от 20 до 30 с упорядочиванием результата по городам, а внутри города по статусам, а для одинаковых значений статуса – по номерам поставщиков SELECT * FROM s WHERE city IN (London, Paris) AND status BETWEEN 20 and 30 ORDER BY city, status, s_no
Выборка данных Извлечь номера всех поставщиков, поставляющих товары SELECT s_no FROM sp Без дубликатов SELECT DISTINCT s_no FROM sp
Выборка данных с вычислением результата Перечень товаров с указанием номера, названия и веса в килограммах SELECT p_no, pname, weight*0.001 as kg
СТАТИСТИЧЕСКИЕ ФУНКЦИИ SUM (числПоле) MIN (числПоле) MAX(числПоле) AVG(числПоле) COUNT(числПоле) – без учета дубликатов COUNT(*) – подсчет числа строк группы (с учетом дубликатов).
Выборка данных из нескольких таблиц Задача: извлечь сведения о поставщиках, поставляющих товары с указанием номера, имени поставщика, номера товара, количества поставляемых товаров этого номера SELECT s.s_no, s.sname, sp.p_no, sp.qty FROM s,sp (декартово произведение этих таблиц)
Выборка данных из нескольких таблиц Задача: извлечь сведения о поставщиках, поставляющих товары с указанием номера, имени поставщика, номера товара, количества поставляемых товаров этого номера SELECT s.s_no, s.sname, sp.p_no, sp.qty FROM s,sp WHERE s.s_no=sp.s_no (эквисоединение)
Способы соединения таблиц Список таблиц в FROM, условие соединения – во фразе WHERE Запись во фразе FROM с использованием операции JOIN (SQL92) (s JOIN sp ON s.s_no=sp.s_no)
Внешнее соединение таблиц RIGHT Outer Join LEFT Outer Join FULL Outer Join
Сравнение множеств Задача: извлечь сведения о поставщиках, поставляющих все товары, содержащиеся в таблице s. SELECT * FROM s WHERE NOT EXISTS ( SELECT * FROM p WHERE p_no NOT IN( SELECT p_no FROM sp WHERE sp.s_no=s.s_no )
Сравнение множеств Задача: извлечь список поставщиков, поставляющих по крайней мере все те товары, которые поставляет поставщик s2. SELECT * FROM s WHERE NOT EXISTS( SELECT * FROM sp WHERE sp.s_no=s2 AND p_no NOT IN ( SELECT p_no FROM sp WHERE s_no=s.s_no )
Ведение баз данных 1. Вставка записи в таблицу INSERT INTO ИмяТаблицы [(список столбцов)] – по умолчанию – все столбцы таблицы в естественном порядке VALUES (список значений) – в соответствии со списком столбцов. 2. Удаление строк из таблицы DELETE FROM имяТаблицы WHERE условие – определяет те записи, которые удаляются. Если нет WHERE, то удаляются все строки из таблицы 3. Изменение строк таблицы UPDATE имяТаблицы SET имяСтолбца = Значение, … WHERE условие – задает строки, которые будут изменены.
Виртуальные таблицы CREATE VIEW имяПросмотра AS SELECT … – формирует содержимое виртуальной таблицы на основе реальной таблицы или дргуих просмотров.
Хранимые процедуры CREATE PROCEDURE CHAR(5) CHAR(15) CHAR(15) INT OUTPUT AS /тело @status=status FROM s WHERE
Триггер CREATE TRIGGER Check_sp_ins ON sp FOR INSERT AS INT BEGIN TRANSACTION FROM INSERTED, = status FROM s WHERE = count(*) FROM sp WHERE BEGIN COMMIT TRANSACTION END ELSE BEGIN RAISERROR( Too many parts,16,1) ROLLBACK TRANSACTION END