WHERE — оператор для определения условий выборки
SELECT * FROM table WHERE conditionIN — Оператор IN является сокращением для нескольких OR условий.
SELECT * FROM CustomersWHERE Country IN ('Germany', 'France', 'UK');BETWEEN — выбирает значения в заданном диапазоне. Является инклюзивным: начальное и конечное значения включены.
SELECT * FROM Products WHERE Price BETWEEN 10 AND 20;LIKE — поиск указанного шаблона в столбце
- Знак процента % представляет ноль, один или несколько символов.
- Знак подчеркивания _ представляет собой один, отдельный символ.
SELECT * FROM Customers WHERE CustomerName LIKE 'a%';ESCAPE-символ — используется для экранирования специальных символов (% и \). В случае если вам нужно найти строки, вы можете использовать ESCAPE-символ.
SELECT job_id FROM Jobs WHERE progress LIKE '3!%' ESCAPE '!';CONCAT — позволяет соединять строки.
SELECT CONCAT('SQL', 'Server');
--Результат: 'SQLServer'SUBSTRING — позволяют извлекать подстроку из строки
SUBSTRING( string, start_position, length );
SELECT SUBSTRING('MS SQL Server', 1, 4);
--Результат: 'MS S'REPLACE — заменяет последовательность символов в строке другим набором символов, и не чувствительна к регистру
REPLACE( string1, string_to_replace, replacement_string )
SELECT REPLACE('Ms SQL Server', 'S', 'z');
--Результат: 'Mz zQL zerver' (И большая S и мальнькая s будут заменены на z)INSTR — Осуществляет поиск подстроки в строке, возвращая позицию её первого символа. При этом отсчёт начинается с единицы, а не нуля, как в большинстве языков программирования.
SELECT INSTR('sql-academy', 'academy') AS idx;IF() — возвращает значение, если условие имеет значение ИСТИНА, или другое значение, если условие имеет значение ЛОЖЬ.
SELECT IF(500<1000, 5, 10);CASE — проходит через условия и возвращает значение, когда выполняется первое условие
SELECT OrderID, Quantity,
CASE
WHEN Quantity > 30 THEN 'The quantity is greater than 30'
WHEN Quantity = 30 THEN 'The quantity is 30'
ELSE 'The quantity is under 30'
END
AS QuantityText
FROM OrderDetails;COUNT — возвращает количество возращенных запросом строк.
SELECT COUNT(атрибут или *) FROM таблица;NULL значения в ячейках не будут учтены при подсчете.
Можно считать только уникальные значения
SELECT COUNT(DISTINCT department) AS "Unique departments" FROM employees WHERE salary > 48000;GROUP BY — можно использовать в SELECT для сбора данных по нескольким записям и группировки результатов одного или нескольких столбцов
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n;/* Пример – использования функции SUM */
SELECT department, SUM(sales) AS "Total sales"
FROM order_details
GROUP BY department;/* Пример – использование функции COUNT */
SELECT department, COUNT(*) AS "Number of employees"
FROM employees
WHERE salary > 25000
GROUP BY department;/* Пример – использование функции MIN */
SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;HAVING — используется в сочетании с GROUP BY, чтобы ограничить группы возвращаемых строк, только тех, чьи условия истинны
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n
HAVING condition;Пример — Использование функции SUM
SELECT department, SUM(sales) AS "Total sales"
FROM order_details
GROUP BY department
HAVING SUM(sales) > 1000;Пример — Использование функции COUNT
SELECT department, COUNT(*) AS "Number of employees"
FROM employees
WHERE salary > 25000
GROUP BY department
HAVING COUNT(*) > 10;Пример — Использование функции MIN
SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department
HAVING MIN(salary) > 35000;DISTINCT — используется для удаления дубликатов из результирующего набора
SELECT DISTINCT expressions
FROM tables
[WHERE conditions];- Если в операторе DISTINCT указано только одно выражение, запрос возвратит уникальные значения для этого выражения.
- Если в операторе DISTINCT указано несколько выражений, запрос извлекает уникальные комбинации для перечисленных выражений.
- В SQL оператор DISTINCT не игнорирует значения NULL. Поэтому при использовании DISTINCT в вашем операторе SQL ваш результирующий набор будет содержать значение NULL в качестве отдельного значения.
Пример — поиск уникальных значений в столбце
SELECT DISTINCT state FROM suppliers ORDER BY state;ALIAS — временные имена для столбцов или таблиц
SELECT department, MAX(salary) AS highest
FROM employees
GROUP BY department;- MySQL ALIASES можно использовать для создания временного имени для столбцов или таблиц.
- COLUMN ALIASES используются для упрощения чтения столбцов в вашем результирующем наборе.
- TABLE ALIASES используются для сокращения вашего SQL-кода, чтобы упростить его чтение или когда вы выполняете самосоединение (то есть: перечисление одной и той же таблицы более одного раза в операторе FROM).
Subqueries (подзапросы) — это запрос в запросе
SELECT *
FROM all_tables tabs
WHERE tabs.table_name IN (SELECT cols.table_name
FROM all_tab_columns cols
WHERE cols.column_name = 'SUPPLIER_ID');Подзапрос и оператор ALL
С помощью оператора ALL мы можем сравнивать отдельное значение с каждым значением в наборе, полученным подзапросом. При этом данное условие вернёт TRUE, только если все сравнения отдельного значения со значениями в наборе вернут TRUE.
Например, нижеприведённый синтетический запрос проверяет для всех ли жилых помещений выполняется условие, что оно дешевле чем 200.
SELECT 200 > ALL(SELECT price FROM Rooms)Подзапрос и оператор ANY
Условное выражение с ANY имеет схожее поведение, но оно возвращает TRUE, если хотя бы одно сравнение отдельного значения со значением в наборе вернёт TRUE.
SELECT * FROM Users WHERE id = ANY (
SELECT DISTINCT owner_id FROM Rooms WHERE price >= 150
)Сравнение по нескольким столбцам
SELECT * FROM Reservations //сравнивается целиком
WHERE (room_id, price) IN (SELECT id, price FROM Rooms);Коррелированные подзапросы
Все предыдущие рассматриваемые подзапросы были некоррелированные (независимые). Они могли выполняться автономно от основного запроса и мы могли посмотреть, что они возвращают перед тем, как их результат будет использоваться в основном запросе. Коррелированные же подзапросы ссылаются на один или несколько столбцов основного запроса
Коррелированный подзапрос отличается от некоррелированного подзапроса тем, что он выполняется не один раз перед выполнением запроса, в который он вложен, а для каждой строки, которая может быть включена в окончательный результат.
SELECT FamilyMembers.member_name,
(SELECT MAX(unit_price) FROM Payments WHERE Payments.family_member = FamilyMembers.member_id)
AS good_price
FROM FamilyMembers