Язык SQL
5. ЯЗЫК SQL
Язык SQL в настоящее время является промышленным стандартом, который в большей или меньшей степени поддерживает любая СУБД, претендующая на звание "реляционной".
Необходимо сказать, что хотя SQL и задумывался как средство работы конечного пользователя, в конце концов он стал настолько сложным, что превратился в инструмент программиста.
5.1. Типы данных SQL.
1) Символьные типы данных - содержат буквы, цифры и специальные символы.
CHAR(n) -символьные строки фиксированной длины. Длина строки определяется параметром n. CHAR без параметра соответсвует CHAR(1). Для хранения таких данных всегда отводится n байт вне зависимости от реальной длины строки.
VARCHAR(n) - символьная строка переменной длины. Для хранения данных этого типа отводится число байт, соответствующее реальной длине строки.
2) Целые типы данных - поддерживают только целые числа (дробные части и десятичные точки не допускаются). Над этими типами разрешается выполнять арифметические операции и применять к ним агрегирующие функции (определение максимального, минимального, среднего и суммарного значения столбца реляционной таблицы).
Рекомендуемые материалы
INTEGER или INT- целое, для хранения которого отводится, как правило, 4 байта. (Замечание: число байт, отводимое для хранения того или иного числового типа данных зависит от используемой СУБД и аппаратной платформы, здесь приводятся наиболее "типичные" значения) Интервал значений от - 2147483647 до + 2147483648
SMALLINT - короткое целое (2 байта), интервал значений от - 32767 до +32768
3) Вещественные типы данных - описывают числа с дробной частью.
FLOAT и SMALLFLOAT - числа с плавающей точкой (для хранения отводится обычно 8 и 4 байта соответсвенно).
DECIMAL(p) - тип данных аналогичный FLOAT с числом значащих цифр p.
DECIMAL(p,n) - аналогично предыдущему, p - общее количество десятичных цифр, n - количество цифр после десятичной запятой.
4) Денежные типы данных - описывают, естественно, денежные величины. Если в ваша система такого типа данных не поддерживает, то используйте DECIMAL(p,n).
MONEY(p,n) - все аналогично типу DECIMAL(p,n). Вводится только потому, что некоторые СУБД предусматривают для него специальные методы форматирования.
5) Дата и время - используются для хранения даты, времени и их комбинаций. Большинство СУБД умеет определять интервал между двумя датами, а также уменьшать или увеличивать дату на определенное количество времени.
DATE - тип данных для хранения даты.
TIME - тип данных для хранения времени.
INTERVAL - тип данных для хранения временного интервала.
DATETIME - тип данных для хранения моментов времени (год + месяц + день + часы + минуты + секунды + доли секунд).
6) Двоичные типы данных - позволяют хранить данные любого объема в двоичном коде (оцифрованные изображения, исполняемые файлы и т.д.). Определения этих типов наиболее сильно различаются от системы к системе, часто используются ключевые слова: BINARY, BYTE, BLOB.
5.2. Операторы создания схемы базы данных.
При описании команд предполагается, что:
¾ текст, набранный прописными буквами (например, CREATE TABLE) является обязательным;
¾ текст, набранный строчными буквами и заключенный в угловые скобки (например, <имя_базы_данных>) обозначает переменную, вводимую пользователем;
¾ в квадратные скобки (например, [NOT NULL]) заключается необязательная часть команды;
¾ взаимоисключающие элементы команды разделяются вертикальной чертой (например, [UNIQUE | PRIMARY KEY]).
Таблица 5.1 - Операторы базы данных
Команда | Описание |
CREATE DATABASE <имя_базы_данных> | Создание базы данных. |
DROP DATABASE <имя_базы_данных> | Удаление базы данных. |
А) Создание таблиц
CREATE TABLE <имя_таблицы>
(<имя_столбца> <тип_столбца>
[NOT NULL]
[UNIQUE | PRIMARY KEY]
[REFERENCES <имя_мастер_таблицы> [<имя_столбца>]]
, ...)
Пользователь обязан указать имя таблицы и список столбцов. Для каждого столбца обязательно указываются его имя и тип, а также опционально могут быть указаны параметры
¾ NOT NULL - в этом случае элементы столбца всегда должны иметь определенное значение (не NULL)
¾ PRIMARY KEY - столбец является первичным ключом.
¾ REFERNECES <имя_мастер_таблицы> [<имя_столбца>] - эта конструкция определяет, что данный столбец является внешним ключом и указывает на ключ какой мастер_таблицы он ссылается.
Пример: создать таблицу Студенты.
Create table Студенты
№студента char(3) not null Primary key,
ФИО varchar(30) not null,
Дата рождения date.
Б) Удаление таблицы:
DROP TABLE <имя_таблицы>
Примет: удалить таблицу Студенты.
Drop table Студенты
5.3. Команды модификации данных
К этой группе относятся операторы добавления, изменения и удаления записей.
А) Добавить новую запись в таблицу:
INSERT INTO <имя_таблицы> [ (<имя_столбца>,<имя_столбца>,...) ]
VALUES (<значение>,<значение>,..)
Список столбцов в данной команде не является обязательным параметром. В этом случае должны быть указаны значения для всех полей таблицы в том порядке, как эти столбцы были перечислены в команде CREATE TABLE.
Пример: добавить студента Иванова в таблицу Студенты.
Insert into Студенты values (115, Иванов, , 15.05.90);
Б) Удаление записей
DELETE FROM <имя_таблицы> [ WHERE <условие> ]
Удаляются все записи, удовлетворяющие указанному условию. Если ключевое слово WHERE и условие отсутствуют, из таблицы удаляются все записи.
Пример: удалить все записи из таблицы Студенты.
Delete from Студенты;
5.4. Выборка данных.
Для извлечения записей из таблиц в SQL определен оператор SELECT. С помощью этой команды осуществляется не только операция реляционной алгебры "выборка" (горизонтальное подмножество), но и предварительное соединение (join) двух и более таблиц. Это наиболее сложное и мощное средство SQL, полный синтаксис оператора SELECT имеет вид:
SELECT [ALL | DISTINCT] <список_выбора>
FROM <имя_таблицы>, ...
[ WHERE <условие> ]
[ GROUP BY <имя_столбца>,... ]
[ HAVING <условие> ]
[ORDER BY <имя_столбца> [ASC | DESC],... ]
Порядок предложений в операторе SELECT должен строго соблюдаться (например, GROUP BY должно всегда предшествовать ORDER BY), иначе это приведет к появлению ошибок.
В конструкции <список_выбора> определяется столбец или столбцы, включаемые в результат. Он может состоять из имен одного или нескольких столбцов, или из одного символа * (звездочка), определяющего все столбцы. Элементы списка разделяются запятыми.
Примеры:
1) получить список всех студентов:
SELECT ФИО студента FROM Студенты;
2) получить список всех полей таблицы Студенты:
SELECT * FROM Студенты;
В том случае, когда нас интересуют не все записи, а только те, которые удовлетворяют некому условию, это условие можно указать после ключевого слова WHERE.
3) найдем всех студентов, родившихся после 1990г.:
SELECT ФИО студента FROM Студенты WHERE Дата рождения > 1990;
4) вывести список студентов с проходным баллом 5:
SELECT ФИО студента, Проходной балл FROM Студенты WHERE Проходной балл=5;
5) вывести студентов, родившихся с 1988 по 1990гг.:
SELECT ФИО студента FROM Студенты WHERE Дата рождения >=1995 AND Дата рождения <=1990;
5.5. Вычисления внутри SELECT.
SQL позволяет выполнять различные арифметические операции над столбцами результирующего отношения. В конструкции <список_выбора> можно использовать константы, функции и их комбинации с арифметическими операциями и скобками.
В арифметических выражениях допускаются операции сложения (+), вычитания (-), деления (/), умножения (*), а также различные функции (COS, SIN, ABS - абсолютное значение и т.д.).
В SQL также определены так называемые агрегатные функции, которые совершают действия над совокупностью одинаковых полей в группе записей. Среди них:
¾ AVG(<имя поля>) - среднее по всем значениям данного поля
¾ COUNT(<имя поля>) или COUNT (*) - число записей
¾ MAX(<имя поля>) - максимальное из всех значений данного поля
¾ MIN(<имя поля>) - минимальное из всех значений данного поля
¾ SUM(<имя поля>) - сумма всех значений данного поля
Ещё посмотрите лекцию "Критерии качества интерфейса (продолжение)" по этой теме.
5.6. Группировка данных.
Группировка данных в операторе SELECT осуществляется с помощью ключевого слова GROUP BY.
GROUP BY неразрывно связано с агрегирующими функциями, без них оно практически не используется. GROUP BY разделяет таблицу на группы, а агрегирующая функция вычисляет для каждой из них итоговое значение.
5.7. Сортировка данных.
Для сортировки данных, получаемых при помощи оператора SELECT служит ключевое слово ORDER BY. С его помощью можно сортировать результаты по любому столбцу или выражению, указанному в <списке_выбора>. Данные могут быть упорядочены как по возрастанию, так и по убыванию.