Skip to content

Instantly share code, notes, and snippets.

@vchernogorov
Last active January 8, 2024 07:27
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save vchernogorov/429cf48477543c28b1d8ef054e89ced4 to your computer and use it in GitHub Desktop.
Save vchernogorov/429cf48477543c28b1d8ef054e89ced4 to your computer and use it in GitHub Desktop.
SQL

Компоненты SQL

DML

  1. DML (Data Manipulation Language) - это семейство компьютерных языков, используемых в компьютерных программах или пользователями баз данных для получения, вставки, удаления или изменения данных в базах данных.

    • На текущий момент наиболее популярным языком DML является SQL, используемый для получения и манипулирования данными в RDBMS.
  2. SELECT - получает определенные записи из одной или нескольких таблиц.

SELECT column1, column2....columnN
FROM  table_name;
  1. INSERT - вставляет в таблицу новую запись.
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
  1. UPDATE - изменяет существующую запись.
UPDATE table_name SET column1 = value1, ...., columnN = valueN WHERE [condition];
  1. DELETE - удаляет записи, удовлетворяющие условию.
DELETE FROM table_name
WHERE [condition];

DDL

  1. DDL (Data Definition Language) - это семейство компьютерных языков, используемых в компьютерных программах для описания структуры баз данных.

    • На текущий момент наиболее популярным языком DDL является SQL, используемый для получения и манипулирования данными в RDBMS.
  2. CREATE - создает новую таблицу, представление таблицы или объект в базе данных или саму базу данных.

CREATE DATABASE DatabaseName;
CREATE TABLE table_name(column1 datatype, ... columnN datatype, PRIMARY KEY(M columns));
  1. AFTER - модифицирует существующий объект БД, как например таблицу.

  2. DROP - удаляет новую таблицу, представление таблицы или объект в базе данных или саму базу данных.

DROP TABLE table_name;
DROP DATABASE DatabaseName;

DCL

  1. DDL (Data Definition Language) - подмножество языка управления базами данных SQL, предназначенное для осуществления административных операций, присваивающих или отменяющих право (привилегию) использовать базу данных, таблицы и другие объекты базы данных, а также выполнять те или иные операторы SQL.

  2. GRANT - авторизует одного или более пользователей для представления операции или набора операций над объектом.

GRANT SELECT, UPDATE
ON example
TO some_user, another_user;
  1. REVOKE - уничтожает возможность авторизации.
REVOKE SELECT, UPDATE
ON example
FROM some_user, another_user;

6. TCL

  1. TCL (Transaction Control Language) - компьютерный язык и часть SQL, используемый для обработки транзакций.

  2. COMMIT - оператор управления транзакциями языка SQL для успешного завершения транзакции. При выполнении оператора изменения, сделанные от начала транзакции и ранее не видимые для других транзакций, фиксируются в базе данных.

BEGIN TRANSACTION WORK;
INSERT INTO MyTable VALUES ('50', 'some string');
COMMIT WORK;
  1. ROLLBACK - оператор языка SQL, который применяется для того, чтобы отменять все изменения, внесённые начиная с момента начала транзакции или с какой-то точки сохранения, очищать все точки сохранения данной транзакции, завершать транзакцию и освобождать все блокировки данной транзакции.
ROLLBACK TO SAVEPOINT_NAME;
  1. SAVEPOINT - устанавливает точку сохранения внутри транзакции.
SAVEPOINT SAVEPOINT_NAME;

Объединения

Связи

  1. Связь "один ко одному" (1:1) - в строке таблицы А может сопоставляться только одна строка таблицы Б, и наоборот. Реализуется с помощью указания внешних ключей в обеих таблицах у участников связи.

  2. Связь "многие ко многим" (M:N) - в строке таблицы А может сопоставляться несколько строк таблицы Б, и наоборот. Реализуется с помощью отдельной таблицы с внешними ключами, ссылающимися на участников связи.

  3. Связь "один ко многим" (1:N) - в этом типе связей у строки таблицы А может быть несколько совпадающих строк таблицы Б, но каждой строке таблицы Б может соответствовать только одна строка из А. Реализуется с помощью указания внешнего ключа в таблице Б, ссылающегося на участников связи таблицы А.

Разновидности объединений

  1. JOIN или INNER JOIN - показывает только общие записи обоих таблиц.
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2 ON table1.common_field = table2.common_field;
  1. OUTER JOIN или LEFT OUTER JOIN - показывает все записи из левой таблицы независимо от наличия соответствующих записей в правой таблице.
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2 ON table1.common_field = table2.common_field;
  1. FULL OUTER JOIN - показывает все возможные комбинации строк из обеих таблиц, соответствующие данному условию.
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2 ON table1.common_field = table2.common_field;
  1. CROSS JOIN или декартово произведение образует все возможные комбинации строк из обеих таблиц.
SELECT table1.column1, table2.column2...
FROM  table1, table2... ;
  1. SELF JOIN используется для объединения таблицы с самой собой.
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;

Способы объединений

  1. Объединение с помощью вложенных циклов - это простейший способ объединения. Для каждой строки внешней зависимости ищуется совпадения по всем строкам внутренней зависимости. Временная сложность O(M*N).

  2. Хеш-объединение - более сложная операция, но с низкой стоимостью. Считываются все элементы из внутренней зависимости; в памяти создается хеш таблица; один за другим считываются все эелменты из внешней зависимости. Для каждого элемента вычисляется хеш, чтобы можно было найти соответствующий блок внутренней зависимости; элементы из блока сравниваются с элементами из внешней зависимости. Временная сложность O(M + N), где M - стоимость создания хеш таблицы, а N - стоимость хеш функции.

  3. Объединение слиянием - это единственный способ объединения, в результате которого данные получаются отсортированными. Сначала сортируются оба набора входных данных по ключам объединения, а затем осуществляется слияние (принцип сортировки слиянием). Временная сложность O(N + M), если входные зависимости отсортированны, иначе O(Nlog(N) + Mlog(M)).

Элементы языка

  1. Отношение - фундаментальное понятие реляционной модели данных. Отношение обычно имеет простую графическую интерпретацию в виде таблицы, столбцы которой соответствуют атрибутам, а строки — кортежам, а в «ячейках» находятся значения атрибутов в кортежах.

    • Тем не менее, в строгой реляционной модели отношение не является таблицей, кортеж — это не строка, а атрибут — это не столбец.
    • Операции над отношениями: объединение, пересечение, вычитани, проекция, декартово произведение, выборка, соединение, деление.
  2. Курсор - это средство языка SQL, позволяющее с помощью набора специальных операторов получить построчный доступ к результату запроса к БД.

  3. Индекс — объект базы данных, создаваемый с целью повышения производительности поиска данных. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска.

  4. Некластерные индексы создаются СУБД по умолчанию. Данные физически расположены в произвольном порядке, но логически упорядочены согласно индексу. Такой тип индексов подходит для таблиц, где часто изменяются значения.

  5. Кластерные индексы - данные физически упорядочены, что серьезно повышает скорость выборок данных (но только в случае последовательного доступа к данным).

    • Для одной таблицы может быть создан только один кластерный индекс.
  6. Триггер - это SQL процедура, которая срабатывает при каком-нибудь событии (INSERT, DELETE или UPDATE). Триггер не может быть вызван или выполнен вручную, СУБД автоматически вызывает его после модификации данных в соответствующей таблице.

    • Триггер может вызывать другие процедуры.
  7. Ограничения - правила, накладываемые на таблицу или поле в таблице, призванные ограничить набор возможных записей в таблицу / столбец.

  8. Представление - виртуальная таблица, представляющая данные одной или более таблиц альтернативным образом. Результат выполнения оператора SELECT.

  9. Первичный ключ - столбец или множество столбцов в таблице, который функционально определяет все остальные столбцы.

    • Пример использования первичного ключа id.
CREATE TABLE City
(
  id   INTEGER NOT NULL PRIMARY KEY,
  name CHAR(40)
)
  1. Внешний ключ - столбец или множество столбцов в таблице, которое применяется для принудительного установления связи между данными в двух таблицах.
    • Внешний ключ можно создать, определив ограничение 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)
)
  1. Суррогатный ключ - это дополнительное служебное поле, добавленное к уже имеющимся информационным полям таблицы, единственное предназначение которого — служить первичным ключом.

    • Чаще всего суррогатным ключем является id.
    • Все не-суррогатные ключи являются естественными ключами.
  2. Потенциальный ключ - столбец или множество столбцов в таблице, удовлетворяющих условиям уникальности и несократимости:

    • Уникальность означает, что в таблице нет двух разных строк с одиноковыми значениями.
    • Несократимость означает, что нельзя убрать один из столбцов из ключа, так, чтобы он не потерял уникльности.
    • Теоретически, все потенциальные ключи равно пригодны в качестве первичного ключа.
    • Потенциальные ключи обозначаются с помощью UNIQUE.
    • В отношении может быть одновременно несколько потенциальных ключей. Один из них может быть выбран в качестве первичного ключа отношения, тогда другие потенциальные ключи называют альтернативными ключами.

Нормализация

  1. Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение.

  2. Нормализация - процесс преобразования отношений базы данных к виду, отвечающему нормальным формам. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность.

  3. Первая нормальная форма (1НФ) - отношение находится в 1НФ, если любое поле любой записи хранит только одно значение.

  4. Вторая нормальная форма (2НФ) - выполняется условие 1НФ и любое неключевое поле полностью зависит от ключа.

  5. Третья нормальная форма (3НФ) - выполняется условие 2НФ и нет неключевых полей зависящих от значения других неключевых полей.

  6. Нормальная форма Бойса-Кодда (НФБК) - каждая нетривиальная неприводимая слева функциональная зависимость обладает потенциальным ключом в качестве детерминанта.

Операторы

Операторы ограничения

  1. Ограничения - правила, накладываемые на таблицу или поле в таблице, призванные ограничить набор возможных записей в таблицу / столбец.

  2. NOT NULL - столбец не может иметь NULL значения.

  3. DEFAULT - записывает в ячеку столбца дефолтное значение, если оно не было указано.

  4. UNIQUE - обеспечивает отсутствие дубликатов в столбце или наборе столбцов. По умолчанию ограничение primary создает кластерный индекс на столбце, а unique - некластерный.

  5. PRIMARY KEY - устанавливает ключевой столбец. По умолчанию ограничение primary создает кластерный индекс на столбце, а unique - некластерный.

  6. FOREIGN KEY - устанавливает связь с ключевым стобцом другой таблицы.

  7. CHECK - используется для ограничения множества значений, которые могут быть помещены в данный столбец.

  8. INDEX - используется для быстрого создания и извлечения данных из БД.

Общие операторы

  1. WHERE - используется для указания условия выборки данных из таблицы или при слиянии таблиц.

  2. AND - связывающий оператор "И".

  3. OR - связывающий оператор "ИЛИ".

  4. LIMIT - выводит ограниченное число выделенных записей.

  5. ORDER BY - выводит ограниченное число выделенных записей.

  6. GROUP BY - группирует все записи с одинаковым условием.

  7. DISTINCT - удаляет из выборки все записи с одинаковым условием.

  8. AS - переименовывает таблицу или столбец для текущего запроса.

  9. HAVING - используется для указания условия выборки данных из таблицы или при слиянии таблиц. В отличии от WHERE, HAVING применяется к результату операции и выполняется уже после того, как результат будет получен.

  10. TRUNCATE - удаляет все значения из таблицы.

  11. USE - выбирает доступную базу данных для подключения.

  12. SHOW - выводит списк баз данных, таблиц или схем.

Логические операторы

  1. ALL - сравнивает значение с множеством других значений.

  2. AND - позволяет устанавливать несколько условий.

  3. ANY - сравнивает значение с множеством тех значений, которые удовлетворяют условию.

  4. BETWEEN - возвращает множество значений, находящихся в указанном промежутке.

  5. EXISTS - ищет вхождение строки в таблице, удовлетворяющее заданному критерию.

  6. IN - сравнивает значение со списком указанных значений.

  7. LIKE - сравнивает значение с другими похожими значениями используя wildcard.

  8. NOT - реверсает результат логической операции.

  9. OR - комбинирует условия.

  10. IS NULL - сравнивает значение с NULL.

  11. UNIQUE - ищет все уникальные строчки в таблице.

Агрегатные операторы

  1. COUNT - подсчитывает количество строк в выборке.

  2. MAX - выбирает максимальное значение из столца.

  3. MIN - выбирает минимальное значение из столбца.

  4. AVG - выбирает среднее значение из столбца.

  5. SUM - подсчитывает сумму значений в числовом столбце.

Понятия SQL

  1. SQL (Structured Query Language) — «язык структурированных запросов» — формальный непроцедурный язык программирования, применяемый для создания, модификации и управления данными в произвольной реляционной базе данных

  2. DB (Database) — совокупность данных, хранимых в соответствии со схемой данных, манипулирование которыми выполняют в соответствии с правилами средств моделирования данных.

  3. DBMS (Database Management System) - совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных.

  4. RDB (Relational Database) — это такая база данных, которая воспринимается ее пользователями как множество переменных (т.е. переменных отношения — relvar), значениями которых являются отношения или, менее формально, таблицы.

  5. RDBMS (Database Management System) - DBMS, управляющая реляционными базами данных.

    • Примеры: Oracle Database, IBM DB2, Microsoft SQL Server.
  6. Table (Таблица) - объект DB, коллекция, состоящая из схемы (заголовка) и тела.

  7. Scheme (Схема) - определяет поля таблицы.

  8. Table Body (Тело таблицы) - множество записей, хранящих значения, соответствующие каждому столбцу таблицы.

  9. Column (Столбец) - набор однотипных значений в таблице, соответствующий данному полю.

  10. Field (Поле) - каждая таблица разделена на подразделы, называемые полями. Поле описывает один столбец, т.е. задает тип значения, которое будет в нем храниться, название столбца, ограничения, накладываемые на столбец.

  11. Row (Строка) - элемент таблицы, который может состоять из нескольких значений (в зависимости от полей таблицы).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment