Язык структурированных запросов – SQL

advertisement
Язык структурированных запросов – SQL
По SQL существует много публикаций, наиболее
популярной из которых является книга Мартина Грабера
«Введение в SQL», М., изд. Лори, 1996, 379 с. (Martin
Gruber. Understanding SQL. 1990. SYBEX Inc., 2021
Challenger Drive, Alameda, CA 94501.
Реализация языка в конкретной СУБД может иметь
некоторые особенности – диалект.
Синтаксис записи формата команд SQL
1. Слова, написанные прописными латинскими буквами,
являются зарезервированными словами SQL.
2. Слова,
написанные
строчными
буквами
и
заключенные в кавычки, именуют конструкцию, которую
необходимо раскрыть дополнительно.
3. Слова,
написанные
строчными
буквами
и
незаключенные в кавычки, именуют элементарное (не
требующее дополнительного описания) понятие.
4. То же, что и 3., но ограниченное символами / является
комментарием.
5. Фрагменты, заключенные в фигурные скобки и
разделенные символом , являются альтернативными
. При записи команды для конкретного применения
необходимо выбрать одни из них.
6. Фрагмент, заключенный в квадратные скобки [ ],
возможно не будет использоваться при записи команды
для конкретного применения.
7. Круглые скобки ( ) используются:
 в выражениях для изменения порядка выполнения
операций;
 для объединения некоторых фрагментов в единое
целое.
8.
Многоточие,
стоящее
перед
закрывающейся
квадратной или круглой скобкой, означает, что
заключенный в эти скобки фрагмент может быть повторен
много раз.
9.
Символ := служит
для
соединения
левой
раскрываемой части с раскрывающей ее правой частью и
читается как «по определению есть».
Команда выборки информации
SELECT
{[{DISTINCTAll
«выражение»…]}
}]
«выражение»[,
[INTO список переменных включающего языка]
FROM «ссылка на таблицу» [,«ссылка на таблицу» …]
[WHERE [«условие соединения» [AND «условие
соединения»…]]
«условие фильтра» [{ANDOR} «условие фильтра»…]]]
[GROUP BY «столбец
группировки»…]]
группировки»
[HAVING «условие фильтра»
наличии GROUP BY\
[,«столбец
] \ используется при
[ORDER BY «столбец упорядочения» [{ASC  DESC}]
[,«столбец упорядочения» [{ASC DESC}] …]]
ALL выбор всех, в т.ч. дублируемых записей (по
умолчанию)
DISTING – исключаются дубли записей
ASC – по возрастанию, DESC – по убыванию
SELECT
{[{DISTINCTAll
«выражение»…]}
}]
«выражение»[,
«Выражение»: = «первичный»  «первичный» «оператор»
«выражение»
«Первичный»: = «имя столбца»  «литерал»  «функция
агрегирования» «встроенная константа»«нестандартная
функция»
«Оператор» : = +  -    
«имя
столбца»:
«идентификатор»
=
[«ссылка
на
таблицу».
]
«Литерал» : = «строка» математическое выражение
«строка»: =
кавычки
строка любых символов, заключенная в
“Функция агрегирования” : = AVG («имя столбца») 
COUNT
()COUNT
([{DISTINGALL}]
«имя
столбца») MIN («имя столбца»)  MAX («имя столбца»)
SUM («имя столбца»)
\используются при наличии
GROUP BY\
COUNT () подсчет числа записей в группе
COUNT (имя столбца) подсчет числа записей с NOT
NULL значениями столбца.
При DISTINCT – строки с одинаковыми значениями
столбца учитываются один раз.
«Ссылка на таблицу»: = «имя таблицы» [«алиас»] /алиас синоним имени таблицы.
Необходим при связывании
таблицы самой с собой. Действует только на время
выполнения команды
Имя таблицы»: = «идентификатор»
«идентификатор»:= буква [{буквацифра
подчеркивания}…]
«
символ
[WHERE [«условие соединения» [AND «условие
соединения»…]]
«условие фильтра» [{ANDOR} «условие фильтра»…]]]
«Условие соединения»: = «имя столбца 1» «оператор
сравнения» «имя столбца 2»
«Имя столбца 1» и «имя столбца 2»: = имена столбцов из
связываемых таблиц, причем ссылка на таблицу, которой
принадлежит столбец – обязательна
«Оператор сравнения»: =
=<><=>=<>
«Условие фильтра» : = {«Выражение» «оператор
сравнения» «выражение» 
«Выражение» [NOT] BETWEEN «выражение» AND
«Выражение» 
«Выражение» [NOT] IN {«список значений»
«подзапрос»}
«Имя столбца» [NOT] LIKE «образец»  «Имя столбца»
IS[NOT] NULL
«Выражение» «оператор сравнения»{ALLANYSOME}
«подзапрос» [NOT] EXISTS «подзапрос»}
«Подзапрос»: = SELECT…
В условии фильтра могут использоваться ( ) для
изменения порядка выполнения логических операторов,
соединяющих элементарные условия фильтра
«Столбец упорядочения»: = «имя столбца» из выражений
фразы SELECT
«Столбец группировки»: = «имя столбца» из выражений
фразы SELECT /группировка применяется для функций
агрегирования/
Команда создания нового файла (таблицы)
CREATE TABLE «имя таблицы» («имя столбца» «тип
данных» [«размер»] [«ограничение на столбец»…]
[«значение по умолчанию»] [,«имя
столбца» «тип
данных» [«размер»] [«ограничение на столбец»…]
[«значение по умолчанию»]…] «ограничение на таблицу»
[, «ограничение на таблицу»…])
“ограничение на столбец” : = NOT NULL  UNIQUE 
PRIMARY KEY CHECK (условие)REFERENCES
имя таблицы [(имя столбца)]
/столбцы, являющиеся
внешним ключом/
PRIMERY KEY и UNIQUE одинаковое действие на
уникальность значения, а PRIMERY KEY указывает на
то, что столбец является первичным ключом
«Ограничение на таблицу»: = UNIQUE (список столбцов
)PRIMARY KEY (список столбцов )FOREIGN KEY
(список столбцов) CHECK (условие)REFERENCES
имя таблицы [(список столбцов)]
«Условие» = «условие фильтра» в случае ограничения на
таблицу по нескольким столбцам
«Значение по умолчанию» : = DEFAULT VALUE =
«выражение»
Команда создания индекса
CREATE INDEX имя индекса ON имя таблицы (имя
столбца [, имя столбца…])
Команда пополнения файла (таблицы)
INSERT INTO «имя таблицы» [(“список имен
столбцов”)]{VALUES («список значений»)  “запрос”}
“Список значений”: = {константа  NULL} [, {константа 
NULL}…]
Команда изменения значений данных столбцов в
записях (строках) файла (таблицы)
UPDATE «имя таблицы» SET «имя столбца» =
«выражение» [,имя столбца» = «выражение»…] [Фраза
WHERE]
Фразой WHERE определяются строки, в которых
осуществляется замена.
Команда удаления записей файла (строка таблицы)
DELETE FROM «имя таблицы» [фраза WHERE]
Фразой WHERE определяются удаленные строки
Команды удаления файла (таблицы) и индекса
DROPTABLE «имя таблицы»
DROP INDEX «имя индекса»
Примеры запросов на выборку из следующих таблиц
РАСПИСАНИЕ
Номер
Номер
Тип
День Номер Корпус Аудигруппы подгруппы недели недели занятия
тория
СТУДЕНТ
плина
Вид
занятий
Ф.И.О.
преподавателя
ДНИ НЕДЕЛИ
Номер зачетной книжки
Группа
1.
Дисци-
Ф.И.О.
Размер
стипендии
Суммарный
рейтинг
Номер дня
недели
День
недели
Выдать расписание по 2-м группам
SELECT  FROM РАСПИСАНИЕ WHERE группа
IN («8Г61», «8Г62»)
ORDER BY группа, тип недели, день недели
В
результате
выборки
получим
семантически
некорректную упорядоченность по дням недели (ВТ, ПН,
ПТ, СБ, СР, ЧТ ). Поэтому заменим атрибут день недели
на атрибут номер_ дня_ недели и введем дополнительное
отношение дни недели.
SELECT  FROM РАСПИСАНИЕ, ДНИ_НЕДЕЛИ
WHERE РАСПИСАНИЕ. день_недели =
ДНИ_НЕДЕЛИ. день_недели
AND (РАСПИСАНИЕ. группа = “8Г61” OR
РАСПИСАНИЕ.группа = «9Г62»)
ORDER BY РАСПИСАНИЕ.группа,
РАСПИСАНИЕ.тип недели, ДНИ_НЕДЕЛИ. номер
дня_недели
Вместо условия AND (……..) можно было записать как
AND РАСПИСАНИЕ.группа IN («8Г61,
«8Г62»)
2. Где сейчас (в понедельник на второй паре нечетной
недели) преподаватель Иванов?
SELECT корпус, ауд. FROM РАСПИСАНИЕ
WHERE номер занятия = 2 AND день_ недели = «ПН»
AND тип_недели = «нечетная» AND ФИО
преподавателя = «Иванов»
В целях сокращения записи запроса и учитывая, что все
атрибуты из одной таблицы, мы опустили имя таблицы
перед именами атрибутов. Многие СУБД разрешают
такую запись для одной таблицы, автоматически
подставляя это имя.
2.
Где сейчас студент Сидоров?
SELECT РАСПИСАНИЕ.корпус, РАСПИСАНИЕ.ауд.
FROM РАСПИСАНИЕ, СТУДЕНТ WHERE
РАСПИСАНИЕ.группа = СТУДЕНТ.группа
AND СТУДЕНТ.Ф.И.О. = «Сидоров» AND
РАСПИСАНИЕ.пара = «2»
AND РАСПИСАНИЕ.группа IN («8Г61», «8Г62»)
Download