Данный гист содержит информацию об основных понятиях и операторах SQL.
-
-
Save vchernogorov/429cf48477543c28b1d8ef054e89ced4 to your computer and use it in GitHub Desktop.
-
DML (Data Manipulation Language) - это семейство компьютерных языков, используемых в компьютерных программах или пользователями баз данных для получения, вставки, удаления или изменения данных в базах данных.
- На текущий момент наиболее популярным языком DML является SQL, используемый для получения и манипулирования данными в RDBMS.
-
SELECT
- получает определенные записи из одной или нескольких таблиц.
SELECT column1, column2....columnN
FROM table_name;
INSERT
- вставляет в таблицу новую запись.
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
UPDATE
- изменяет существующую запись.
UPDATE table_name SET column1 = value1, ...., columnN = valueN WHERE [condition];
DELETE
- удаляет записи, удовлетворяющие условию.
DELETE FROM table_name
WHERE [condition];
-
DDL (Data Definition Language) - это семейство компьютерных языков, используемых в компьютерных программах для описания структуры баз данных.
- На текущий момент наиболее популярным языком DDL является SQL, используемый для получения и манипулирования данными в RDBMS.
-
CREATE
- создает новую таблицу, представление таблицы или объект в базе данных или саму базу данных.
CREATE DATABASE DatabaseName;
CREATE TABLE table_name(column1 datatype, ... columnN datatype, PRIMARY KEY(M columns));
-
AFTER
- модифицирует существующий объект БД, как например таблицу. -
DROP
- удаляет новую таблицу, представление таблицы или объект в базе данных или саму базу данных.
DROP TABLE table_name;
DROP DATABASE DatabaseName;
-
DDL (Data Definition Language) - подмножество языка управления базами данных SQL, предназначенное для осуществления административных операций, присваивающих или отменяющих право (привилегию) использовать базу данных, таблицы и другие объекты базы данных, а также выполнять те или иные операторы SQL.
-
GRANT
- авторизует одного или более пользователей для представления операции или набора операций над объектом.
GRANT SELECT, UPDATE
ON example
TO some_user, another_user;
REVOKE
- уничтожает возможность авторизации.
REVOKE SELECT, UPDATE
ON example
FROM some_user, another_user;
-
TCL (Transaction Control Language) - компьютерный язык и часть SQL, используемый для обработки транзакций.
-
COMMIT
- оператор управления транзакциями языка SQL для успешного завершения транзакции. При выполнении оператора изменения, сделанные от начала транзакции и ранее не видимые для других транзакций, фиксируются в базе данных.
BEGIN TRANSACTION WORK;
INSERT INTO MyTable VALUES ('50', 'some string');
COMMIT WORK;
ROLLBACK
- оператор языка SQL, который применяется для того, чтобы отменять все изменения, внесённые начиная с момента начала транзакции или с какой-то точки сохранения, очищать все точки сохранения данной транзакции, завершать транзакцию и освобождать все блокировки данной транзакции.
ROLLBACK TO SAVEPOINT_NAME;
SAVEPOINT
- устанавливает точку сохранения внутри транзакции.
SAVEPOINT SAVEPOINT_NAME;
-
Связь "один ко одному" (1:1) - в строке таблицы А может сопоставляться только одна строка таблицы Б, и наоборот. Реализуется с помощью указания внешних ключей в обеих таблицах у участников связи.
-
Связь "многие ко многим" (M:N) - в строке таблицы А может сопоставляться несколько строк таблицы Б, и наоборот. Реализуется с помощью отдельной таблицы с внешними ключами, ссылающимися на участников связи.
-
Связь "один ко многим" (1:N) - в этом типе связей у строки таблицы А может быть несколько совпадающих строк таблицы Б, но каждой строке таблицы Б может соответствовать только одна строка из А. Реализуется с помощью указания внешнего ключа в таблице Б, ссылающегося на участников связи таблицы А.
JOIN
илиINNER JOIN
- показывает только общие записи обоих таблиц.
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2 ON table1.common_field = table2.common_field;
OUTER JOIN
илиLEFT OUTER JOIN
- показывает все записи из левой таблицы независимо от наличия соответствующих записей в правой таблице.
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2 ON table1.common_field = table2.common_field;
FULL OUTER JOIN
- показывает все возможные комбинации строк из обеих таблиц, соответствующие данному условию.
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2 ON table1.common_field = table2.common_field;
CROSS JOIN
или декартово произведение образует все возможные комбинации строк из обеих таблиц.
SELECT table1.column1, table2.column2...
FROM table1, table2... ;
SELF JOIN
используется для объединения таблицы с самой собой.
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;
-
Объединение с помощью вложенных циклов - это простейший способ объединения. Для каждой строки внешней зависимости ищуется совпадения по всем строкам внутренней зависимости. Временная сложность O(M*N).
-
Хеш-объединение - более сложная операция, но с низкой стоимостью. Считываются все элементы из внутренней зависимости; в памяти создается хеш таблица; один за другим считываются все эелменты из внешней зависимости. Для каждого элемента вычисляется хеш, чтобы можно было найти соответствующий блок внутренней зависимости; элементы из блока сравниваются с элементами из внешней зависимости. Временная сложность O(M + N), где M - стоимость создания хеш таблицы, а N - стоимость хеш функции.
-
Объединение слиянием - это единственный способ объединения, в результате которого данные получаются отсортированными. Сначала сортируются оба набора входных данных по ключам объединения, а затем осуществляется слияние (принцип сортировки слиянием). Временная сложность O(N + M), если входные зависимости отсортированны, иначе O(Nlog(N) + Mlog(M)).
-
Отношение - фундаментальное понятие реляционной модели данных. Отношение обычно имеет простую графическую интерпретацию в виде таблицы, столбцы которой соответствуют атрибутам, а строки — кортежам, а в «ячейках» находятся значения атрибутов в кортежах.
- Тем не менее, в строгой реляционной модели отношение не является таблицей, кортеж — это не строка, а атрибут — это не столбец.
- Операции над отношениями: объединение, пересечение, вычитани, проекция, декартово произведение, выборка, соединение, деление.
-
Курсор - это средство языка SQL, позволяющее с помощью набора специальных операторов получить построчный доступ к результату запроса к БД.
-
Индекс — объект базы данных, создаваемый с целью повышения производительности поиска данных. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска.
-
Некластерные индексы создаются СУБД по умолчанию. Данные физически расположены в произвольном порядке, но логически упорядочены согласно индексу. Такой тип индексов подходит для таблиц, где часто изменяются значения.
-
Кластерные индексы - данные физически упорядочены, что серьезно повышает скорость выборок данных (но только в случае последовательного доступа к данным).
- Для одной таблицы может быть создан только один кластерный индекс.
-
Триггер - это SQL процедура, которая срабатывает при каком-нибудь событии (
INSERT
,DELETE
илиUPDATE
). Триггер не может быть вызван или выполнен вручную, СУБД автоматически вызывает его после модификации данных в соответствующей таблице.- Триггер может вызывать другие процедуры.
-
Ограничения - правила, накладываемые на таблицу или поле в таблице, призванные ограничить набор возможных записей в таблицу / столбец.
-
Представление - виртуальная таблица, представляющая данные одной или более таблиц альтернативным образом. Результат выполнения оператора
SELECT
. -
Первичный ключ - столбец или множество столбцов в таблице, который функционально определяет все остальные столбцы.
- Пример использования первичного ключа
id
.
- Пример использования первичного ключа
CREATE TABLE City
(
id INTEGER NOT NULL PRIMARY KEY,
name CHAR(40)
)
- Внешний ключ - столбец или множество столбцов в таблице, которое применяется для принудительного установления связи между данными в двух таблицах.
- Внешний ключ можно создать, определив ограничение
FOREIGN KEY
при создании или изменении таблицы. - Пример использования внешнего ключа для связи "один-ко-многим", где таблица
Street
имеет полеid_city
, которое является внешним ключом и ссылается на таблицуCity
.
- Внешний ключ можно создать, определив ограничение
CREATE TABLE City
(
id INTEGER NOT NULL PRIMARY KEY,
name CHAR(40)
)
CREATE TABLE Street
(
id INTEGER NOT NULL PRIMARY KEY,
name CHAR(40),
id_city INTEGER NOT NULL FOREIGN KEY REFERENCES City(id)
)
-
Суррогатный ключ - это дополнительное служебное поле, добавленное к уже имеющимся информационным полям таблицы, единственное предназначение которого — служить первичным ключом.
- Чаще всего суррогатным ключем является
id
. - Все не-суррогатные ключи являются естественными ключами.
- Чаще всего суррогатным ключем является
-
Потенциальный ключ - столбец или множество столбцов в таблице, удовлетворяющих условиям уникальности и несократимости:
- Уникальность означает, что в таблице нет двух разных строк с одиноковыми значениями.
- Несократимость означает, что нельзя убрать один из столбцов из ключа, так, чтобы он не потерял уникльности.
- Теоретически, все потенциальные ключи равно пригодны в качестве первичного ключа.
- Потенциальные ключи обозначаются с помощью
UNIQUE
. - В отношении может быть одновременно несколько потенциальных ключей. Один из них может быть выбран в качестве первичного ключа отношения, тогда другие потенциальные ключи называют альтернативными ключами.
-
Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение.
-
Нормализация - процесс преобразования отношений базы данных к виду, отвечающему нормальным формам. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность.
-
Первая нормальная форма (1НФ) - отношение находится в 1НФ, если любое поле любой записи хранит только одно значение.
-
Вторая нормальная форма (2НФ) - выполняется условие 1НФ и любое неключевое поле полностью зависит от ключа.
-
Третья нормальная форма (3НФ) - выполняется условие 2НФ и нет неключевых полей зависящих от значения других неключевых полей.
-
Нормальная форма Бойса-Кодда (НФБК) - каждая нетривиальная неприводимая слева функциональная зависимость обладает потенциальным ключом в качестве детерминанта.
-
Ограничения - правила, накладываемые на таблицу или поле в таблице, призванные ограничить набор возможных записей в таблицу / столбец.
-
NOT NULL
- столбец не может иметь NULL значения. -
DEFAULT
- записывает в ячеку столбца дефолтное значение, если оно не было указано. -
UNIQUE
- обеспечивает отсутствие дубликатов в столбце или наборе столбцов. По умолчанию ограничение primary создает кластерный индекс на столбце, а unique - некластерный. -
PRIMARY KEY
- устанавливает ключевой столбец. По умолчанию ограничение primary создает кластерный индекс на столбце, а unique - некластерный. -
FOREIGN KEY
- устанавливает связь с ключевым стобцом другой таблицы. -
CHECK
- используется для ограничения множества значений, которые могут быть помещены в данный столбец. -
INDEX
- используется для быстрого создания и извлечения данных из БД.
-
WHERE
- используется для указания условия выборки данных из таблицы или при слиянии таблиц. -
AND
- связывающий оператор "И". -
OR
- связывающий оператор "ИЛИ". -
LIMIT
- выводит ограниченное число выделенных записей. -
ORDER BY
- выводит ограниченное число выделенных записей. -
GROUP BY
- группирует все записи с одинаковым условием. -
DISTINCT
- удаляет из выборки все записи с одинаковым условием. -
AS
- переименовывает таблицу или столбец для текущего запроса. -
HAVING
- используется для указания условия выборки данных из таблицы или при слиянии таблиц. В отличии отWHERE
,HAVING
применяется к результату операции и выполняется уже после того, как результат будет получен. -
TRUNCATE
- удаляет все значения из таблицы. -
USE
- выбирает доступную базу данных для подключения. -
SHOW
- выводит списк баз данных, таблиц или схем.
-
ALL
- сравнивает значение с множеством других значений. -
AND
- позволяет устанавливать несколько условий. -
ANY
- сравнивает значение с множеством тех значений, которые удовлетворяют условию. -
BETWEEN
- возвращает множество значений, находящихся в указанном промежутке. -
EXISTS
- ищет вхождение строки в таблице, удовлетворяющее заданному критерию. -
IN
- сравнивает значение со списком указанных значений. -
LIKE
- сравнивает значение с другими похожими значениями используя wildcard. -
NOT
- реверсает результат логической операции. -
OR
- комбинирует условия. -
IS NULL
- сравнивает значение с NULL. -
UNIQUE
- ищет все уникальные строчки в таблице.
-
COUNT
- подсчитывает количество строк в выборке. -
MAX
- выбирает максимальное значение из столца. -
MIN
- выбирает минимальное значение из столбца. -
AVG
- выбирает среднее значение из столбца. -
SUM
- подсчитывает сумму значений в числовом столбце.
-
SQL (Structured Query Language) — «язык структурированных запросов» — формальный непроцедурный язык программирования, применяемый для создания, модификации и управления данными в произвольной реляционной базе данных
-
DB (Database) — совокупность данных, хранимых в соответствии со схемой данных, манипулирование которыми выполняют в соответствии с правилами средств моделирования данных.
-
DBMS (Database Management System) - совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных.
-
RDB (Relational Database) — это такая база данных, которая воспринимается ее пользователями как множество переменных (т.е. переменных отношения — relvar), значениями которых являются отношения или, менее формально, таблицы.
-
RDBMS (Database Management System) - DBMS, управляющая реляционными базами данных.
- Примеры: Oracle Database, IBM DB2, Microsoft SQL Server.
-
Table (Таблица) - объект DB, коллекция, состоящая из схемы (заголовка) и тела.
-
Scheme (Схема) - определяет поля таблицы.
-
Table Body (Тело таблицы) - множество записей, хранящих значения, соответствующие каждому столбцу таблицы.
-
Column (Столбец) - набор однотипных значений в таблице, соответствующий данному полю.
-
Field (Поле) - каждая таблица разделена на подразделы, называемые полями. Поле описывает один столбец, т.е. задает тип значения, которое будет в нем храниться, название столбца, ограничения, накладываемые на столбец.
-
Row (Строка) - элемент таблицы, который может состоять из нескольких значений (в зависимости от полей таблицы).