SQL Flashcards
SQL
язык запросов для работы с базами данных, структурированных особым образом.
SELECT
SELECT название столбцов, FROM название таблицы;
Оператор запроса, возвращающий набор данных (выборку).
общая структура запроса
SELECT - столбцы или * для выбора всех столбцов; обязательно
FROM - таблица; обязательно
WHERE - условие, например, city = ‘Moscow’; необязательно ( AND,OR, IN)
GROUP BY - столбец, по которому хотим сгруппировать данные; необязательно
HAVING - условие/фильтрация на уровне сгруппированных данных; необязательно
ORDER BY - столбец, по которому хотим отсортировать вывод; необязательно
WHERE
Необязательный опреатор запроса, для фильтрации данных по нужному условию. Внутри WHERE используются IN / NOT IN для фильтрации столбца по нескольким значениям, AND / OR для фильтрации таблицы по нескольким столбцам.
WHERE Country = ‘Germany’ AND City NOT IN (‘Berlin’, ‘Aachen’) AND CustomerID > 15
GROUP BY
Необязательный элемент запроса, задает агрегацию по нужному столбцу (например, если нужно узнать какое количество клиентов живет в каждом из городов).
1. перечень столбцов, по которым делается разрез, был одинаковым внутри SELECT и внутри GROUP BY,
2. агрегатные функции (SUM, AVG, COUNT, MAX, MIN) должны быть также указаны внутри SELECT с указанием столбца, к которому такая функция применяется.
SELECT City, COUNT(CustomerID) FROM Customers
GROUP BY City
AS
дает таблице или колонке в таблице временное имя. Часто используется чтобы сделать имя колонке более читабельным. Алиас существует только на время запроса. Если Алиас содержит пробелы то его заключают в “” или [].
Может помочь если:
- Более чем одна таблица присутствует в запросе;
- Функции используются в запросе
- Имена колонок большие и не читаемые
- Две или более колонки нужно объединить в одну.
SELECT_column_name_AS_alias_name_
FROM_table_name;_
или SELECT_column_name(s)_
FROM_table_name_AS_alias_name;_
HAVING
Необязательный элемент запроса, который отвечает за фильтрацию на уровне сгруппированных данных (по сути, WHERE, но только на уровень выше).
Фильтрация агрегированной таблицы с количеством клиентов по городам, в данном случае оставляем в выгрузке только те города, в которых не менее 5 клиентов.
select City, count(CustomerID) from Customers
group by City
HAVING count(CustomerID) >= 5
ORDER BY
Необязательный элемент запроса, который отвечает за сортировку таблицы. Осуществлять сортировку можно и по нескольким столбцам, в этом случае сортировка происходит по порядку указанных столбцов.
SELECT * FROM Customers
ORDER BY Country, City
DESC
По умолчанию сортировка происходит по возрастанию для чисел и в алфавитном порядке для текстовых значений. Если нужна обратная сортировка, то в конструкции ORDER BY после названия столбца надо добавить DESC.
SELECT * FROM Customers
ORDER BY Country DESC, City
JOIN
Необязательный элемент, используется для объединения таблиц по ключу, который присутствует в обеих таблицах. Перед ключом ставится оператор ON. Запрос, в котором соединяем таблицы Order и Customer по ключу CustomerID, при этом перед названиям столбца ключа добавляется название таблицы через точку: select * from Orders
JOIN Customers ON Orders.CustomerID = Customers.CustomerID
SELECT DISTINCT
возвращает данные с отличным значением.(не повторяющиеся)
NOT
используется в комбинации с другими операторами для противоположного результата.
NOT …. =(<,>) …, NOT LIKE, NOT BETWEEN, NOT IN
SELECT_column1,column2, …
FROM_table_name
WHERENOTcondition;
INSERT INTO
вставить строку с данными в таблицу.
INSERTINTO_table_name (column1,column2,column3, …)
VALUES(value1,value2,value3, …);
UPDATE
используется для модификации существующей записи.
UPDATE_table_name_
SET_column1=value1,column2=value2, …
WHERE_condition;
Если не использовать условие то изменятся все данные в таблице!
NULL
это поле, оставленное пустым при создании записи.
проверка не него осуществляется с помощью IS NULL или IS NOT NULL
DELETE
удаляет записи в таблице.
DELETEFROM_table_name_WHERE_condition_;
без условия удаляются все записи без удаления самой таблицы.
SELECT TOP
LIMIT
выводит указанное количество записей.
SELECT TOP SQL Server
LIMIT MySQL
MIN MAX
агрегатная функция. Возвращает минимальное или максимальное значение в выборке.
SELECTMIN(Price) аналогично MAX
FROMProducts;
COUNT
агрегатная функция. Возвращает количество рядов для указанной колонки. Возможно применение условия.
SELECT SUM(column_name)
FROM table_name
WHERE condition;
COUNT(DISTINCT ) возвращает количество рядов без дубликатов.
SUM
агрегатная функция, которая возвращает сумму по столбцу с числами. Возможно применение условия. Сумма может быть от выражения.
SELECTSUM(column_name)
FROM_table_name_
WHERE_condition_;
AVG
агрегатная функция, которая возвращает среднее значение по колонке с числами.
SELECTAVG(column_name)
FROM_table_name_
WHERE_condition_;
LIKE
оператор используется с WHERE для поиска по указанному паттерну в колонке.
Есть два варианта подстановочных карт:
- с % представляет 0, 1 или несколько символов ‘а%’
- знак подчёркивания представляет 1 простой символ ‘jk’
эти два варианта можно комбинировать.
Может использоваться с операторами OR и AND.
SELECT_column1, column2, …_
FROM_table_name_
WHERE_columnN_LIKEpattern;
IN
оператор позволяет указать несколько значений для условия. Можно оформить подзапрос с помощью IN.
SELECT_column_name(s)_
FROM_table_name_
WHERE_column_name_IN(value1,value2, …);
BETWEEN
оператор выбора значений в заданном диапазоне. Значениями могут быть числа, текст или дата. Включает начало и конец интервала.
SELECT_column_name(s)_
FROM_table_name_
WHERE_column_name_BETWEEN_value1AND_value2;
INNER JOIN
выбирает записи которые имеют соответствие в обеих таблицах.
SELECT_column_name(s)_
FROM_table1_
INNERJOIN_table2
ON_table1.column_name_=table2.column_name;
LEFT JOIN
возвращает все записи из левой таблицы(table1), и совпадающие записи из правой таблицы (table2). Если нет совпадений то результатом будет 0 записей с правой стороны.
SELECT_column_name(s)_
FROM_table1_
LEFTJOIN_table2
ON_table1.column_name=table2.column_name;
RIGHT JOIN
возвращает все записи из правой таблицы(table2), и совпадающие записи из левой таблицы(table1). Если нет совпадений то результатом будет 0 записей с левой таблицы.
SELECT_column_name(s)_
FROM_table1_
RIGHTJOIN_table2
ON_table1.column_name=table2.column_name;
SELF JOIN
Самосоединение — это обычное соединение, но таблица соединяется сама с собой.
SELECT_column_name(s)_
FROM_table1 T1, table1 T2_
WHERE_condition_;
FULL JOIN
возвращает все записи, если есть совпадения в левой (таблица1) или правой (таблица2) таблицах записей.
SELECT_column_name(s)_
FROM_table1_
FULLOUTERJOIN_table2
ON_table1.column_name=table2.column_name_WHERE_condition;
Возвращает все совпадающие записи из обеих таблиц независимо от того, соответствует ли другая таблица.
UNION
оператор используется для объединения выборок из двух и более SELECT.
- каждый SELECT должен иметь одно и тоже количество колонок.
- колонки также должны иметь похожий типы данных.
- колонки у каждого SELECT должны быть в том же порядке.
EXISTS
оператор используется для тестов на проверку существования любой записи в подзапросе. Оператор вернет верно, если подзапрос возвращает одну или более записей.
SELECT_column_name(s)_
FROM_table_name_
WHEREEXISTS
(SELECT_column_name_FROM_table_name_WHERE_condition_);
ANY
- возвращает значение булеан как результат
- возвращает верно если любые значения подзапроса выполняют условие
ANY означает, что условие будет истинным, если операция верна для любого из значений в диапазоне.
SELECT_column_name(s)_
FROM_table_name_
WHERE_column_name operator_ANY
(SELECT_column_name_FROM_table_name_WHERE_condition_);
operator должен быть стандартным оператором сравнения(=,<,>,<>,<=,>=,!=)
ALL
ALL
- возвращает значение булеан как результат
- возвращает верно если все значения подзапроса выполняют условие
- используется с SELECT, WHERE, HAVING
SELECTALL_column_name(s)_
FROM_table_name_
WHERE_condition_;
SELECT_column_name(s)_
FROM_table_name_
WHERE_column_name operator_ALL
(SELECT_column_name_FROM_table_name_WHERE_condition_);
SELECT INTO
копирует данные из одной таблицы в новую таблицу.
SELECT*
INTO_newtable_[IN_externaldb_]
FROM_oldtable
WHERE_condition;
если вместо * указать колонки, скопирует их. Можно создать новую колонку используя Алиас. Если использовать IN ‘ ‘ это создаст копию таблицы в другой базе.
Можно использовать для создании схемы таблицы без данных. Для этого нужно указать WHERE 1 = 0.
INSERT INTO SELECT
копирует данные из одной таблицы и вставляет их в другую таблицу. Требует чтобы типы данных в источнике и целевой таблице совпадали.
INSERTINTO_table2_
SELECT*FROM_table1
WHERE_condition;
Если указываются колонки.
INSERTINTO_table2(column1,column2,column3, …)
SELECT_column1,column2,column3, …
FROM_table1_
WHERE_condition_;
CASE
Выражение CASE проходит через условия и возвращает значение при выполнении первого условия (например, оператор if-then-else). Итак, как только условие станет истинным, оно прекратит чтение и вернет результат. Если ни одно из условий не является истинным, возвращается значение в предложении ELSE.
CASE
WHEN_condition1THEN_result1
WHEN_condition2THEN_result2
WHEN_conditionN_THEN_resultN_
ELSE_result_
END;
NULL Functions
Для баз данных разная. Пример.IFNULL() проверяет на NULL.
SELECTProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder,0))
FROMProducts;
CREATE PROCEDURE
Создание процедуры.
CREATE PROCEDURE имя @имяпараметра
AS
…
GO;
вызов
EXEC имя @имяатрибута;
процедура в SQL.
CREATE DATABASE
создание новой SQL базы данных
CREATEDATABASE_databasename_;
DROP DATABASE
удаление существующей SQL базы данных
DROPDATABASE_databasename_;
CREATE TABLE
создание таблицы.CREATETABLE_table_name_(
column1 datatype,
column2 datatype,
column3 datatype,
….
);
Создание таблицы из существующей таблицы.
CREATETABLE_new_table_name_AS
SELECT_column1, column2,…_
FROM_existing_table_name_
WHERE….;
DROP TABLE
удаление таблицы.
TRUNCATE TABLE удаляет данные из таблицы но ее структура остается.
ALTER TABLE
используется для добавления, удаления или изменения колонок в существующей таблице. Так же используется для добавления и удаления различных ограничений в существующей таблице.
ALTERTABLE_table_name_
ADD_column_name datatype_;
ALTERTABLE_table_name_
DROPCOLUMN_column_name_;
SQL Constrains
Ограничения. Используются для указания правил для данных в таблице. Синтаксис зависит от БД. В MySQL отлично от других при созданиий таблиц и удалении ограничений. Ограничения могут быть добавлены и удалены с помощью ALTER TABLE
NOT NULL
Ограничение. Гарантирует, что столбец не может иметь значение NULL.
UNIQUE
Ограничение. Гарантирует что все значения в столбце различны.
PRIMARY KEY
Ограничения. Комбинация NOT NULL и UNIQUE. Уникально идентифицирует каждую строку таблицы. Может быть одной колонкой, либо состоять из нескольких колонок.
FOREIGN KEY
Ограничения. Предотвращает действия, которые могут разрушить связи между таблицами. Это поле или несколько полей в одной таблице, и ссылается на PK в другой таблицы. FOREIGN KEY(PersonID) REFERENCES Persons(PersonID).
CHECK
Ограничение. Обеспечивает то что значение в колонке удовлетворяет конкретному условию.
DEFAULT
Ограничение. Устанавливается по умолчанию значение для колонки если нет значения в указанном.
CREATE INDEX
Создается индекс, используется для очень быстрого создания и забора данных из БД. Пользователь не видит индексы, они используются только для поиска и запросов.
CREATEINDEX_index_name_
ON_table_name_(column1,column2, …);
создание уникального индекса
CREATEUNIQUEINDEX_index_name_
ON_table_name_(column1,column2, …);
AUTO INCREMENT
позволяет уникальному числу быть сгенерированным автоматически, когда новая запись добавляется в таблицу. Часто это PK. по умолчанию начинается с 1, но значение можно и присвоить. Синтаксис зависит от БД.