SQL

SQL engine

When you are executing an SQL command for any RDBMS, the system determines the best way to carry out your request and SQL engine figures out how to interpret the task.

There are various components included in this process

Query Dispatcher

Optimization Engines

Classic Query Engine

SQL Query Engine

../../_images/sql-architecture.jpg


Database Normalization

Database normalization is the process of efficiently organizing data in a database.

There are two reasons of this normalization process

Eliminating redundant data, for example, storing the same data in more than one table

Ensuring data dependencies make sense

First Normal Form (1NF)

  • Определение необходимых элементов данных, потому что они становятся столбцами в таблице

  • Помещение связанных элементов данных в таблицу

  • Ensure that there are no repeating groups of data

  • Ensure that there is a primary key

Не нормализованная таблица

Сотрудник

Номер телефона

Иванов И. И.

283-56-82
390-57-34

Петров П. П.

708-62-34

Нормализованная таблица

Сотрудник

Номер телефона

Иванов И. И.

283-56-82

Иванов И. И.

390-57-34

Петров П. П.

708-62-34


Second Normal Form (2NF)

Каждый неключевой атрибут неприводимо зависит от (каждого) её потенциального ключа

Не нормализованная таблица

Филиал компании

Должность

Зарплата

Наличие компьютера

Филиал в Томске

Уборщик

20000

Нет

Филиал в Москве

Программист

40000

Есть

Филиал в Томске

Программист

25000

Есть

Нормализованная таблица R1

Филиал компании

Должность

Зарплата

Филиал в Томске

Уборщик

20000

Филиал в Томске

Программист

25000

Филиал в Москве

Программист

40000

Нормализованная таблица R2

Должность

Наличие компьютера

Уборщик

Нет

Программист

Есть


Third Normal Form (3NF)

Ни один неключевой атрибут R не находится в транзитивной функциональной зависимости от потенциального ключа R.

Не нормализованная таблица

Сотрудник

Отдел

Телефон

Гришин

Бухгалтерия

11-22-33

Васильев

Бухгалтерия

11-22-33

Петров

Снабжение

44-55-66

Нормализованная таблица R1

Отдел

Телефон

Бухгалтерия

11-22-33

Снабжение

44-55-66

Нормализованная таблица R2

Сотрудник

Отдел

Гришин

Бухгалтерия

Васильев

Бухгалтерия

Петров

Снабжение


Data types


SQL Commands

DDL - Data Definition Language
CREATE

Creates a new table, a view of a table, or other object in the database.

CREATE TABLE table_name(
    column1 datatype,
    column2 datatype,
    column3 datatype,
    .....
    columnN datatype,
  PRIMARY KEY( one or more columns )
);

CREATE TABLE new_table_name AS
    SELECT column1, column2,...
    FROM existing_table_name
    WHERE ....;

CREATE TABLE TestTable AS
    SELECT customername, contactname
    FROM customers;
ALTER

Modifies an existing database object, such as a table

ALTER TABLE table_name <ADD|DROP|MODIFY> column_name data_type;
DROP

Deletes an entire table, a view of a table or other objects in the database

DROP TABLE table_name;
DML - Data Manipulation Language
SELECT

Retrieves certain records from one or more tables.

SELECT syntax

INSERT

Creates a record.

INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);
UPDATE

Modifies records.

UPDATE table_name
SET column1 = value1, column2 = value2, ... columnN=valueN
[WHERE  CONDITION];
DELETE

Deletes records.

DELETE FROM table_name
WHERE  condition;
DCL - Data Control Language
GRANT

Gives a privilege to user.

REVOKE

Takes back privileges granted from user

SELECT syntax

SELECT
  [DISTINCT | DISTINCTROW | ALL]
  select_expression [AS column_alias],...

FROM table_reference [AS table_alias_name] [, ...] // Декартово произведение всех переданных таблиц
  [JOIN other_table ON (table_reference.column = other_table.column)]

[WHERE
    CONDITION1
  <AND|OR>
    CONDITION2
  <AND|OR>
    column_name IN (<val-1, val-2,...val-N | SELECT ...>)
  <AND|OR>
    column_name BETWEEN val-1 AND val-2
  <AND|OR>
    ...
]

// Группировка строк по результатам агрегатных функций (MAX, SUM, AVG, …)
// Необходимо, чтобы в SELECT были заданы только требуемые в выходном потоке столбцы,
//   перечисленные в GROUP BY и/или агрегированные значения
[GROUP BY <unsigned_integer | col_name | formula>]

// Указания условия на результат агрегатных функций (MAX, SUM, AVG, …)
//   в группах, выбранных через GROUP BY
// HAVING <условия> аналогичен WHERE <условия> за исключением того, что строки отбираются не по значениям столбцов,
//   а строятся из значений столбцов, указанных в GROUP BY
[HAVING where_definition]

[ORDER BY <unsigned_integer | col_name | formula> [ASC | DESC], ...]

[UNION | UNION ALL]
SELECT ...

Joins

INNER JOIN

Returns rows when there is a match in both tables.

LEFT JOIN

Returns all rows from the left table, even if there are no matches in the right table.

RIGHT JOIN

Returns all rows from the right table, even if there are no matches in the left table.

FULL JOIN

Returns rows when there is a match in one of the tables.

SELF JOIN

Is used to join a table to itself as if the table were two tables, temporarily renaming at least one table in the SQL statement.

CARTESIAN JOIN

Returns the Cartesian product of the sets of records from the two or more joined tables.