Please enable JavaScript.
Coggle requires JavaScript to display documents.
ТЕОРИЯ: SQL :pen:Реляционная база данных - БД, состоящая из…
ТЕОРИЯ:
SQL
:pen:Реляционная база данных - БД, состоящая из взаимосвязанных таблиц
:pen: Первичный ключ - уникальный идентификатор строки
:pen:DDL - Язык Определения Данных
Создание таблиц:
:pencil2: CREATE TABLE <TABLE-NAME> (<COLUMN name> <DATA type> [(<SIZE>)],<COLUMN name> <DATA type> [(<SIZE>)]...);
Example: CREATE TABLE Books ( bnum integer, bname varchar);
Параметр размер для типа данных char по умолчанию равен 1.
Создание индексов:
:pencil2: CREATE INDEX <INDEX name> ON <TABLE name> (<COLUMN name>, [<COLUMN name>],...);
Example: CREATE INDEX author ON Books (bathor);
Создание уникального индекса - поиск по уникальному значению:
:pencil2: CREATE UNIQUE INDEX ...
Для более чем одного поля уникальной должна быть комбинация
Удаление индекса:
:pencil2: DROP INDEX <INDEX name>;
Изменение таблицы:
:pencil2: ALTER TABLE <TBODY> </TBODY> </TABLE> <TABLE name> ADD <COLUMN name> <DATA type> <SIZE>;
Столбцы добавляются со значением NULL для уже существующих записей в конец таблицы.
Удаление пустой таблицы:
:pencil2: DROP TABLE <TABLE name>;
Поиск по нескольким таблицам. Объединение таблиц:
В общем случае:
:pencil2: SELECT <COLUMN name>,<COLUMN name>,... FROM <TABLE name>, <TABLE name> WHERE <COLUMN name>=/=>/<=/<><COLUMN name>
Через справочную целостность:
Задействование связей встроенных в базу
Объединение таблиц с собой:
Использование псевдонимов
:pencil2: SELECT a.<COLUMN name>, b.<COLUMN name> FROM <TABLE name> a, <TABLE name> b WHERE a.<COLUMN name>=b.<COLUMN name>;
Сравнение каждой строки из таблицы с каждой строкой ее дубликата.
Для устранения избыточности вводится дополнительное условие :pencil2: AND (a.<COLUMN name> > b.<COLUMN name>);
Ограничения:
Запрет NULL:
:pencil2:CREATE TABLE <TABLE name>(<COLUMN name> <COLUMN type> NOT NULL...);
Гарантия уникальности столбца:
:pencil2:CREATE TABLE <TABLE name>(<COLUMN name> <COLUMN type> UNIQUE...);
Гарантия уникальности таблицы:
:pencil2:CREATE TABLE <TABLE name>(...<COLUMN name> <COLUMN type>, UNIQUE(<COLUMN name>,<COLUMN name>));
Должна быть гарантия NOT NULL
Primary key:
:pencil2:Аналогично UNIQUE
Проверка различных условий:
CHECK
:pencil2:CREATE TABLE <TABLE name>(<COLUMN name> <COLUMN type> CHECK(...)...);
Установка значений по умолчанию::pencil2:CREATE TABLE <TABLE name>(<COLUMN name> <COLUMN type> DEFAULT='...'...);
Внешние и родительские ключи
Как ограничение таблицы:
:pencil2: CREATE TABLE <TABLE name>(....FOREIGN KEY(<COLUMN name>) REFERENCES <TABLE name> (<COLUMN name>));
Как ограничение столбцов:
:pencil2: CREATE TABLE <TABLE name>(....<COLUMN name> <COLUMN type> REFERENCES <TABLE name> (<COLUMN name>));
Если в родительской таблице указаны первичные ключи,то родительские ключи можно не указывать
:pencil2: CREATE TABLE <TABLE name>(....<COLUMN name> <COLUMN type> REFERENCES <TABLE name> );
Ограничения внешнего ключа:
значения должны соответствовать родительскому
значения могут быть NULL
Ограничения родительского ключа:
NOT NULL
UNIQUE
В описании внешних ключей можно указать как изменять родительские:
:pencil2:CREATE TABLE <TABLE name> (....UPDATE/DELETE OF <TABLE name> CASCADES/RESTRICTED/NULLS);
CASCADES - изменяет внешние ключи согласно родительским
RESTRICTED - ограничивает изменение внешних ключей
NULLS - изменяет внешние ключи на NULL
:pen:DML - Язык манипулирования данными
Ввод значений:
:pencil2: INSERT INTO <TABLE name> VALUES (,...);
Example:
INSERT INTO Books VALUES (1,'Толстой', 'Война и мир', 'роман');
INSERT INTO Books VALUES (1,'Булгаков', 'Мастер и Маргарита', NULL);
Ввод значений с указанием столбцов:
:pencil2:INSERT INTO <TABLE name> (COLUMN name,COLUMN name,...) VALUES (,...);
Вставка результатов запроса:
:pencil2:INSERT INTO <TABLE name> SELECT ....
Example:
INSERT INTO Books2 SELECT * FROM Books WHERE btopic='роман'
Вставляемые столбцы должны совпадать по количеству и типу данных, но отличаться по именам
Удаление строк из таблицы:
:pencil2:DELETE FROM <TABLE name> WHERE <COLUMN name>=?
Изменение значений поля:
:pencil2:UPDATE <TABLE name> SET <COLUMN name>=?, <COLUMN name>=?... WHERE <COLUMN name>=?;
:pencil2:UPDATE <TABLE name> SET <COLUMN name>=<COLUMN name>*2... WHERE <COLUMN name>=?;
:pencil2:UPDATE <TABLE name> SET <COLUMN name>=NULL... WHERE <COLUMN name>=?;
Просмотр определённых столбцов таблицы:
:pencil2: SELECT <COLUMN name>, <COLUMN name> ... FROM <TABLE name>;
Порядок вывода будет совпадать с порядком перечисления.
Просмотр всех столбцов таблицы:
:pencil2: SELECT * FROM <TABLE name>;
Удаление избыточных данных:
:pencil2: SELECT DISTINCT <COLUMN name>, <COLUMN name> FROM <TABLE name>;
Из вывода удаляются все дубликаты на основании выбранных столбцов
ALL - вывод всех строк , аналогично выводу без параметра
Квалифицированный выбор:
:pencil2:SELECT <COLUMN name>, <COLUMN name> ... FROM <TABLE name> WHERE <COLUMN name>=?;
Операторы
:
Булевские
- OR, AND, NOT
Реляционные:
=, <, >, <>,<=,>=
Специальные:
Оператор IN:
:pencil2:SELECT * FROM <TABLE name> WHERE <COLUMN name> IN (?,?,?...);
Оператор BETWEEN:
:pencil2:SELECT * FROM <TABLE name> WHERE <COLUMN name> BETWEEN ? AND ?;
Оператор BETWEEN включает граничные значения
Оператор LIKE:
:pencil2:SELECT FROM <TABLE name> WHERE <COLUMN name> LIKE '?_'
:pencil2:SELECT FROM <TABLE name> WHERE <COLUMN name> LIKE '?%'
_ - замещает одиночный символ,
% - замещает группу символов
NULL оператор:
:pencil2:SELECT FROM <TABLE name> WHERE <COLUMN name> IS NULL
:pencil2:SELECT FROM <TABLE name> WHERE <COLUMN name> NOT NULL
Оператор NOT употребляется сразу перед специальными операторами.
Агрегатные функции:
COUNT,SUM,AVG,MAX,MIN
:pencil2:SELECT SUM (<COLUMN name>) FROM <TABLE name> ;
COUNT c DISTINCT:
выбирает кол-во не дубликатов.
:pencil2:SELECT COUNT (DISTINCT <COLUMN name>) FROM <TABLE name>;
COUNT co звездой :
выбирает кол-во строк
:pencil2:SELECT COUNT (*) FROM <TABLE name>;
COUNT c ALL:
выбирает кол-во всех значений, в том числе дубликатов, не считает NULL
:pencil2:SELECT COUNT (ALL <COLUMN name>) FROM <TABLE name>;
Агрегаты, основанные на скалярном выражении:
:pencil2:SELECT COUNT ( <COLUMN name>+<COLUMN name>) FROM <TABLE name>;
Агрегаты с GROUP BY:
:pencil2:SELECT <COLUMN name1>, <COLUMN name2>, COUNT ( <COLUMN name3>) FROM <TABLE name> GROUP BY <COLUM name1>, <COLUMN name2>;
Агрегаты с HAVING:
:pencil2:SELECT <COLUMN name1>, <COLUMN name2>, COUNT ( <COLUMN name3>) FROM <TABLE name> GROUP BY <COLUM name1>, <COLUMN name2> HAVING COUNT(<COLUMN name>)>?;
Агрументы HAVING - агрегаты, либо столбцы выборки
Вывод данных:
Столбцы вывода:
В вывод можно поместить выражение или константу
:pencil2:SELECT <COLUMN name>, <COLUMN name>*3, '?', 3;
Упорядочение вывода информации:
Можно упорядочить вывод строк по тому или иному столбцу.
:pencil2:SELECT * FROM <TABLE name> ORDER BY <COLUMN name> ASC/DESC;
ASC - по умолчанию
Можно упорядочивать по нескольким выбранным столбцам
Упорядочивание агрегатных групп:
:pencil2:SELECT <COLUMN name>,COUNT(<COLUMN name>) FROM <TABLE name> ORDER BY <COLUMN name>;
Если нужно отсортировать по самому значению агрегата используется номер столбца в запросе
:pencil2:SELECT <COLUMN name>,COUNT(<COLUMN name>) FROM <TABLE name> ORDER BY 2;
Подзапросы:
:pencil2:SELECT ....WHERE <COLUMN name>= (SELECT...
Значение выдаваемой подзапросом должно быть единственным (как гарантия DISTINCT или агрегат без GROUP BY)
:pencil2: SELECT ....WHERE <COLUMN name>= (SELECT DISTINCT...
При множественных значениях используется оператор IN
:pencil2:SELECT ....WHERE <COLUMN name> IN (SELECT...
В подзапросах можно использовать скалярные выражения:
:pencil2:SELECT ....WHERE <COLUMN name>= (SELECT <COLUMN name>+1000
Подзапросы можно использовать с HAVING