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
…
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 |
Петров П. П. |
708-62-34 |
Сотрудник |
Номер телефона |
|---|---|
Иванов И. И. |
283-56-82 |
Иванов И. И. |
390-57-34 |
Петров П. П. |
708-62-34 |
Ссылки:
Second Normal Form (2NF)¶
Каждый неключевой атрибут неприводимо зависит от (каждого) её потенциального ключа
Филиал компании |
Должность |
Зарплата |
Наличие компьютера |
|---|---|---|---|
Филиал в Томске |
Уборщик |
20000 |
Нет |
Филиал в Москве |
Программист |
40000 |
Есть |
Филиал в Томске |
Программист |
25000 |
Есть |
Филиал компании |
Должность |
Зарплата |
|---|---|---|
Филиал в Томске |
Уборщик |
20000 |
Филиал в Томске |
Программист |
25000 |
Филиал в Москве |
Программист |
40000 |
Должность |
Наличие компьютера |
|---|---|
Уборщик |
Нет |
Программист |
Есть |
Ссылки:
Third Normal Form (3NF)¶
Ни один неключевой атрибут R не находится в транзитивной функциональной зависимости от потенциального ключа R.
Сотрудник |
Отдел |
Телефон |
|---|---|---|
Гришин |
Бухгалтерия |
11-22-33 |
Васильев |
Бухгалтерия |
11-22-33 |
Петров |
Снабжение |
44-55-66 |
Отдел |
Телефон |
|---|---|
Бухгалтерия |
11-22-33 |
Снабжение |
44-55-66 |
Сотрудник |
Отдел |
|---|---|
Гришин |
Бухгалтерия |
Васильев |
Бухгалтерия |
Петров |
Снабжение |
Ссылки:
SQL Commands¶
- DDL - Data Definition Language
CREATECreates 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;
ALTERModifies an existing database object, such as a table
ALTER TABLE table_name <ADD|DROP|MODIFY> column_name data_type;
DROPDeletes an entire table, a view of a table or other objects in the database
DROP TABLE table_name;
- DML - Data Manipulation Language
SELECTRetrieves certain records from one or more tables.
INSERTCreates a record.
INSERT INTO table_name( column1, column2....columnN) VALUES ( value1, value2....valueN);
UPDATEModifies records.
UPDATE table_name SET column1 = value1, column2 = value2, ... columnN=valueN [WHERE CONDITION];
DELETEDeletes records.
DELETE FROM table_name WHERE condition;
- DCL - Data Control Language
GRANTGives a privilege to user.
REVOKETakes 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 JOINReturns rows when there is a match in both tables.
LEFT JOINReturns all rows from the left table, even if there are no matches in the right table.
RIGHT JOINReturns all rows from the right table, even if there are no matches in the left table.
FULL JOINReturns rows when there is a match in one of the tables.
SELF JOINIs 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 JOINReturns the Cartesian product of the sets of records from the two or more joined tables.