Тема. Элементы языка SQL В начале 70 -х годов в компании IBM язык SQL был разработан в рамках проекта экспериментальной реляционной СУБД System R. SQL является одним из двух доминирующих языков, используемых в реляционных базах данных (другой язык - QBE – Query by Example). Исходное название языка SEQUEL (Structured English Query Language) - структурированный язык запросов является промышленным стандартом, который поддерживают реляционные СУБД. SQL - аббревиатура, произноситься как "сикуель", однако все чаще говорят "эс-ку-эль"
SEQUEL реляционный язык данных, обеспечивающий согласованный, ориентированный на английские ключевые слова набор средств для запросов, определения данных, манипулирования данными и контроля данных. SEQUEL может использоваться как автономный интерфейс для неспециалистов в обработке данных или как подъязык данных, встроенный в основной язык программирования, для прикладных программистов и администраторов баз данных.
Особенности реляционного языка SQL Простота. Полнота. Непроцедурность. Простота расширения. Основа для создания языков более высокого уровня. Ларри Эллисон Первой коммерческой реализаций SQL была СУБД ORACLE, первая версия которой появилась в 1979 г.
История SQL • В IBM изобрели SQL в начале 1970 -х. Он был реализован в первом прототипе реляционной СУБД фирмы IBM System R (DB/2) на основе языка SEQUEL (Structured English Query Language - структурированный английский язык запросов). • В 1980 -х компания Oracle выпустила первую в мире общедоступную коммерческую SQLсистему. Sybase, Informix, Microsoft и ряд других компаний вышли на рынок с собственными разработками реляционных систем управления базами данных (РСУБД), основанных на SQL.
История SQL • В 1989 году комиссия по стандартам ANSI выпустила первый стандарт SQL - SQL 89 или SQL 1. различные коммерческие реализации языка. • Стандарт 1992 года (SQL 92 или SQL 2) включил в себя максимально возможное количество расширений, добавленных в коммерческих реализациях языка.
История SQL • В 1999 году появился новый стандарт, названный SQL 3. Если отличия между стандартами SQL 1 и SQL 2 во многом были количественными, то стандарт SQL 3 соответствует качественным серьезным преобразованиям. В SQL 3 введены новые типы данных, при этом предполагается возможность задания сложных структурированных типов данных, которые в большей степени соответствуют объектной ориентации.
DDL: Операторы создания схемы БД Операторы базы данных Команда Описание CREATE DATABASE <имя_базы_данных> Создание БД. DROP DATABASE <имя_базы_данных> Удаление БД
Создание таблиц CREATE TABLE <имя_таблицы> (<имя_столбца> <тип_столбца> [NOT NULL][UNIQUE | PRIMARY KEY] [REFERENCES <имя_мастер_таблицы> [<имя_столбца>], . . . ) ] Пользователь обязан указать имя таблицы и список столбцов.
Создание таблиц Для каждого столбца обязательно указываются имя и тип, а также опционально могут быть указаны параметры (1) NOT NULL - в этом случае элементы столбца всегда должны иметь определенное значение не NULL) (2) один из взаимоисключающих параметров UNIQUE - значение каждого элемента столбца должно быть уникальным или PRIMARY KEY - столбец является первичным ключом. (3) REFERNECES <имя_мастер_таблицы> [ <имя_столбца>] - эта конструкция определяет, что данный столбец является внешним ключом и указывает на ключ какой мастер_таблицы он ссылается.
Пример: CREATE TABLE Продажа ( Дата. Операции DATETIME NOT NULL, Номер. Сделки INTEGER NOT NULL, Наименование. Клиента VARCHAR(50), Наименование. Товара VARCHAR(30), Количество NUMERIC(6, 2), Цена NUMERIC(6, 2), Сумма NUMERIC(10, 2) );
Удаление таблицы: DROP TABLE <имя_таблицы>
Операторы манипулирования данными
Средства управления транзакциями
DML: Выборка данных Основной операцией в языке SQL является отображение, синтаксически представляющее собой блок SELECT - FROM - WHERE (выбрать - из - где).
Оператор выбора SELECT • SELECT [ALL | DISTINCT] (
Предикаты сравнения • Предикаты сравнения { =, <>, >, <, >=, <= }, которые имеют традиционный смысл. • Предикат Between A and В — принимает значения между А и В. • Предикат вхождения в множество IN (множество) • Предикаты сравнения с образцом LIKE и NOT LIKE. • Предикат сравнения с неопределенным значением IS NULL.
Рассмотрим описание запросов на языке SQL для конкретной предметной области Студент Успеваемость студентов ( Код. Студента , ФИО , Номер. Группы , Домашний. Адрес, Телефон) Предмет (Код. Предмета Np, название предмета) Оценки ( Код. Студента , Код. Предмета , Балл )
Простая выборка Запрос. Получить полные сведения обо всех студентах. SELECT * FROM Студент Символ * означает, что в результирующем отношении будут присутствовать все атрибуты отношения Студент.
Простая выборка Запрос. Получить все номера сданных предметов. SELECT UNIQUE Код. Предмета FROM Оценки В SQL не предусматривается исключение одинаковых строк из результата, если пользователь не потребует этого, задав ключевое слово UNIQUE. Отметим, что операция исключения одинаковых строк может требовать дополнительных затрат.
Выборка по условию Запрос. Получить номера студентов, имеющих по предмету с номером 2 оценку 5. SELECT Код. Студента FROM Оценки WHERE Код. Предмета = 2 AND Балл = 5 Логическое выражение после ключевого слова WHERE строится так же, как в алгоритмических языках.
Выборка с упорядочением Запрос. Получить номера и фамилии студентов группы с номером 1 в лексикографическом порядке. SELECT Код. Студента, ФИО FROM Студент WHERE Номер. Группы = 1 ORDER BY ФИО DESC Ключевое слово DESC предполагает упорядочение по возрастанию значений в столбце, ASC - упорядочение по убыванию значений в столбце.
Выборка с использованием вложенного отображения Запрос. Получить список фамилий студентов, сдавших предмет с номером 2. SELECT ФИО FROM Студент WHERE Код. Студента IS IN ( SELECT Код. Студента FROM Оценки WHERE Код. Предмета = 2 ) Ключевое слово IS IN предполагает проверку принадлежности множеству, полученному после выполнения внутреннего SELECT-FROM-WHERE. Ключевое слово IS NOT IN интерпретируется как "не принадлежит множеству".
Выборка с использованием нескольких уровней вложенности Запрос. Получить список фамилий студентов, сдавших предмет "Мат. анализ". SELECT ФИО FROM Студент WHERE Код. Студента IS IN ( SELECT Код. Студента FROM Оценки WHERE Код. Предмета IS IN ( SELECT Код. Предмета FROM Предмет WHERE Nazv='мат. Анализ') )
Выборка с использованием вложенного отображения к одной и той же таблице Запрос. Получить номера тех студентов, которые сдали тот же предмет, что и студент с номером 13. SELECT UNIQUE Код. Студента FROM Оценки WHERE Код. Предмета IS IN ( SELECT Код. Предмета FROM Оценки WHERE Код. Студента = 13 )
Запрос. Получить номера всех предметов, которые . сданы несколькими студентами. SELECT UNIQUE Код. Предмета FROM Оценки SPr WHERE Код. Предмета IS IN ( SELECT Код. Предмета FROM Оценки WHERE SPr. Код. Студента <> Код. Студента)
Выборка более чем из одной таблицы Запрос. Для каждого номера предмета получить фамилии студентов, которые его сдали. SELECT Код. Предмета, ФИО FROM Оценки , Студент WHERE Оценки. Код. Студента = Студент. Код. Студента Это предложение языка SQL аналогично операции соединения JOIN. Существенное различие заключается в том, что фактически соединения Оценки и Студент не происходит, а значит память на соединение не расходуется.
z t
z t
z был разработан в рамках проекта экспериментальной реляционной СУБД System R.
Синтаксис оператора извлечения записей из таблиц в SQL: SELECT [ ALL | DISTINCT ] <список_выбора> FROM <имя_таблицы>, . . . [ WHERE <условие> ] [ GROUP BY <имя_столбца>, . . . ] [ HAVING <условие> ] [ORDER BY <имя_столбца> [ ASC | DESC ], . . . ]