Язык SQL (эта аббревиатура должна произноситься как "сикуель", однако все чаще говорят "эс-ку-эль") в настоящее время является промышленным стандартом, который в большей или меньшей степени поддерживает любая СУБД, претендующая на звание "реляционной". В то же время SQL подвергается суровой критике как раз за недостаточное соответствие реляционным принципам (см. например, статью Х. Дарвина и К.Дейта Третий манифест, опубликованную в журнале СУБД N 1 за 1996 год).
В SQL определены два подмножества языка:
· SQL-DDL (Data Definition Language) - язык определения структур и ограничений целостности баз данных. Сюда относятся команды создания и удаления баз данных; создания, изменения и удаления таблиц; управления пользователями и т.д.
· SQL-DML (Data Manipulation Language) - язык манипулирования данными: добавление, изменение, удаление и извлечение данных, управления транзакциями.
Операторы языка SQL строятся с применением:
· зарезервированных ключевых слов;
· идентификаторов (имен) таблиц и столбцов таблиц;
· логических, арифметических и строковых выражений, используемых для формирования критериев поиска информации в БД и для вычисления значений ячеек результирующих таблиц;
· идентификаторов (имен) операций и функций, используемых в выражениях.
Язык манипулирования данными используется, как это следует из его названия, для манипулирования данными в таблицах баз данных. Он состоит из 4 основных команд:
· SELECT (выбрать)
· INSERT (вставить)
· UPDATE (обновить)
· DELETE (удалить)
Начнем с базовых операций реляционных баз данных. Таковыми являются:
· выборка(Restriction)
· проекция(Projection)
· соединение(Join)
· объединение(Union)
Операция выборки позволяет получить все строки (записи) либо часть строк одной таблицы.
SELECT * FROM country
Получить все строки таблицы Country
COUNTRY
CURRENCY
USA
Dollar
England
Pound
Canada
CdnDlr
Switzerland
SFranc
Japan
Yen
Italy
Lira
France
FFranc
Germany
D-Mark
Australia
ADollar
Hong Kong
HKDollar
Netherlands
Guilder
Belgium
BFranc
Austria
Schilling
Fiji
FDollar
SELECT * FROM countryWHERE currency = "Dollar".
Получили подмножество строк таблицы Country,удовлетворяющее условию Currency = "Dollar"
Результат последней операции выглядит следующим образом:
COUNTRY CURRENCY=============== ==========USA Dollar
Операция проекции позволяет выделить подмножество столбцов таблицы. Например:
Операция объединенияпозволяет объединять результаты отдельных запросов по нескольким таблицам в единую результирующую таблицу. Таким образом, предложение UNION объединяет вывод двух или более SQL-запросов в единый набор строк и столбцов.
SELECT first_name, last_name, job_countryFROM employeeWHEREUNIONSELECT contact_first, contact_last, country customer
Получить список работников и заказчиков, проживающих во Франции
FIRST_NAME
LAST_NAME
JOB_COUNTRY
Jacques
Glon
France
Michelle
Roche
France
Пример использования Insert
Используя перечисление значений, с указанием столбцов:
INSERT INTO <название таблицы> ([<Имя столбца>, ... ]) VALUES (<Значение>,...)
Используя перечисление значений, без указания столбцов:
не работает если использовать с set identity_insert
INSERT INTO <название таблицы> VALUES (<Значение>,...)
Используя select:
INSERT INTO <название таблицы> SELECT <имя столбца>,... FROM <название таблицы>
В последнем случае, в таблицу может вставиться более одной записи. Если в таблице есть другие поля требующие заполнения, но не указанные в операторе insert, для них будет установлено значение по умолчанию, либо null, если значение по умолчанию не указано.
Пример использования Update
UPDATE [ИмяБазыДанных1!]ИмяТаблицы1 SET Имя_Столбца1 = Выражение1 [, Имя_Столбца2 = Выражение2 ...] WHERE УсловиеФильтра1 [AND | OR УсловиеФильтра2 ...]] UPDATE top(10) tbl_books SET price = 0 WHERE quantity = 0; UPDATE persons SET street = 'Nissestien 67', city = 'Sandnes' WHERE lastname = 'Tjessem' AND firstname = 'Jakob'; UPDATE temp a SET deptno =(SELECT deptno FROM dept WHERE loc = ‘BOSTON’), (sal, comm) = (SELECT 1.1*AVG(sal), 1.5*AVG(comm) FROM temp b WHERE a.deptno = b.deptno) WHERE deptno IN (SELECT deptno FROM dept WHERE loc = ‘DALLAS’ OR loc = ‘DETROIT’);
«UPDATE temp a …» выполняет следующие операции:
· Модифицирует только тех служащих, которые работают в Dallas или Detroit
· Устанавливает значение колонки deptno в значение такое же, как и у служащих из Бостона
· Устанавливает жалованье каждого служащего в 1.1 раз больше среднего жалованья всего отдела
· Устанавливает комиссионные каждого служащего в 1.5 раза больше средних комиссионных всего отдела
Пример использования Delete
При удалении можно задавать конструкции JOIN связывающие несколько страниц, аналогично тому, как связываются таблицы в запросах выборки SELECT:
DELETE <Имя записи для удаления> -> FROM <Имя Таблицы1> JOIN <Имя Таблицы2> ON <условие объединения>;
Пример:
DELETE ab, b FROM Authors AS a, AuthorArticle AS ab, Articles AS b WHERE a.AuthID=ab.AuthID AND ab.ArticleID=b.ArticleID AND AuthorLastName='Henry';