Java Dev Lib

SQL (Structed Query Language)

1. Общее

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


3. DML

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

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

    SELECT column1, column2....columnN
    FROM  table_name;
    
  3. INSERT - вставляет в таблицу новую запись.

    INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
    
  4. UPDATE - изменяет существующую запись.

    UPDATE table_name SET column1 = value1, ...., columnN = valueN WHERE [condition];
    
  5. DELETE - удаляет записи, удовлетворяющие условию.

    DELETE FROM table_name
    WHERE [condition];
    

4. 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));
    
  3. AFTER - модифицирует существующий объект БД, как например таблицу.

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

    DROP TABLE table_name;
    DROP DATABASE DatabaseName;
    

5. DCL

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

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

    GRANT SELECT, UPDATE
    ON example
    TO some_user, another_user;
    
  3. 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;
    
  3. ROLLBACK - оператор языка SQL, который применяется для того, чтобы отменять все изменения, внесённые начиная с момента начала транзакции или с какой-то точки сохранения, очищать все точки сохранения данной транзакции, завершать транзакцию и освобождать все блокировки данной транзакции.

    ROLLBACK TO SAVEPOINT_NAME;
    
  4. SAVEPOINT - устанавливает точку сохранения внутри транзакции.

    SAVEPOINT SAVEPOINT_NAME;
    

7. Объекты

  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)
      )
      
  10. Внешний ключ - столбец или множество столбцов в таблице, которое применяется для принудительного установления связи между данными в двух таблицах.

    • Внешний ключ можно создать, определив ограничение FOREIGN KEY при создании или изменении таблицы.
    • Пример использования внешнего ключа для связи "один-ко-многим", где таблица Street имеет поле id_city, которое является внешним ключом и ссылается на таблицу City. ```sql 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) ) ```

  11. Суррогатный ключ - это дополнительное служебное поле, добавленное к уже имеющимся информационным полям таблицы, единственное предназначение которого — служить первичным ключом.

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

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

8. Объединения

  1. JOIN или INNER JOIN - показывает только общие записи обоих таблиц.

    SELECT table1.column1, table2.column2...
    FROM table1
    INNER JOIN table2 ON table1.common_field = table2.common_field;
    
  2. OUTER JOIN или LEFT OUTER JOIN - показывает все записи из левой таблицы независимо от наличия соответствующих записей в правой таблице.

    SELECT table1.column1, table2.column2...
    FROM table1
    LEFT JOIN table2 ON table1.common_field = table2.common_field;
    
  3. FULL OUTER JOIN - показывает все возможные комбинации строк из обеих таблиц, соответствующие данному условию.

    SELECT table1.column1, table2.column2...
    FROM table1
    FULL JOIN table2 ON table1.common_field = table2.common_field;
    
  4. CROSS JOIN или декартово произведение образует все возможные комбинации строк из обеих таблиц.

    SELECT table1.column1, table2.column2...
    FROM  table1, table2... ;
    
  5. SELF JOIN используется для объединения таблицы с самой собой.

    SELECT a.column_name, b.column_name...
    FROM table1 a, table1 b
    WHERE a.common_field = b.common_field;
    

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

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

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

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


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

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

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

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

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

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

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

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

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


11. Связи

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

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

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


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

  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 - выводит списк баз данных, таблиц или схем.


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

  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 - ищет все уникальные строчки в таблице.


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

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

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

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

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

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

© Copyright 2016 Chernogorov Vladislav