Все ленты — последние статьи

Простые SQL запросы — короткая справка и примеры

Простые SQL запросы

Запросы написаны без экранирующих кавычек, так как у MySQL, MSSQL и PostGree они разные.

Вывод нужны полей

Выводим только указанные поля из указанной таблицы

SELECT name_last, name_first, salary FROM table_name

Вывод всех полей из таблицы

* обозначает все поля

SELECT * FROM table_name

 

Задание псевдонима таблице

Таблице table_name в качестве псевдонима задано t. Выводим всех служащих с окладом свыше 35000

SELECT * FROM table_name AS t WHERE t.salary>35000

Исключение дубликатов

Хотим знать из каких стран поставляют продукцию продавцы

SELECT DISTINCT country FROM vendors

Постановка условия

Выводим поставщиком из России

SELECT * FROM vendors WHERE country="Россия"

Использование логических операторов

Хотим знать из каких стран поставляют продукцию продавцы выводим только предпочитаемых поставщиков из России. Когда используется оператор AND, то должны удовлетворяться оба условия

SELECT * FROM vendors WHERE country="Россия" AND preferred="true"

Использование логических операторов

Хотим видеть только тех животных, которые обитают в Тюменской области или в Московской области. Когда используем оператор OR, то должно удовлетворяться хотя бы одно условие

SELECT * FROM animals WHERE area="Тюменская область" OR area="Московская область"

Использование логических операторов

Выводим животных, обитающих в Тюменской области с весом не менее 7 кг. Когда используется оператор AND NOT должно удовлетворять первое условие и не должно второе

SELECT * FROM animals WHERE area="Тюменская область" AND NOT massa<7

Упорядочивание записей по возрастанию

Выводим животных в порядке увеличения веса: с начала самые легкие, в конце самые тяжелые.

SELECT * FROM animals ORDER BY massa

Упорядочивание записей по убыванию

Выводим животных в порядке уменьшения веса: с начала самые тяжелые, в конце самые легкие.

SELECT * FROM animals ORDER BY massa DESC

Упорядочивание записей по возрастанию

Упорядочить по третьему столбцу (отсчет начинается с 1)

SELECT * FROM animals ORDER BY 3

Вывести ограниченное количество записей

Выводим записи с первой, всего 10 записей. Остальные отсекаются

SELECT * FROM animals LIMIT 0,10

Сложные SQL запросы

Объединение нескольких запросов

SELECT * FROM animals WHERE area="Тюменская область"
UNION
SELECT * FROM animals WHERE area="Московская область"

Выводим тех животных, которые обитают в Тюменской области, а также тех, которые обитают в Московской области. Оператором UNION можем объединить несколько запросов.

Внимание! Данная структура уже используется редко. Оставлена для поддержания старых версий. Запрос работает гораздо быстрее, чем UNION. Сам запрос для многих может показаться бредовым, но лично мне встречаются такие конструкции довольно часто, поэтому я его и огласил. Сам оператор UNION куда эффективнее используется, чем можно себе представить, но от этого менее трудоемкий он не становится.
SELECT * FROM animals WHERE area="Тюменская область" AND area="Московская область"

Подсчеты значений поля

// Выводим максимальный оклад из таблицы служащих
SELECT MAX(salary) FROM employee
// Выводим минимальный оклад из таблицы служащих
SELECT MIN(salary) FROM employee
// Выводим сумма всех окладов
SELECT SUM(salary) FROM employee
// Выводим среднею сумма всех окладов
SELECT AVG(salary) FROM employee
// Выводим количество сотрудников имеющих оклад
SELECT COUNT(*) FROM employee
// Выводим количество сотрудников в 310а кабинете
SELECT COUNT(*) FROM employee WHERE office="310а"

Это важные команды. Рекомендуется, где это возможно, использовать для подсчета именно SQL запросы такого рода, так как ни одна среда программирования не сравнится в скорости обработки данных, чем SQL сервер при обработке своих же данных.


Группировка записей

C помощью конструкции ORDER BY можем узнать какая страна занимает самую большую площадь для каждого континента

SELECT continent, MAX(area) FROM country GROUP BY continent

Конструкция IN

Выводим покупателей из России, Болгарии и Китая

SELECT * FROM customer WHERE country IN ("Россия", "Болгария", "Китай")

Конструкция NOT IN

Выводим всех покупателей за исключением тех, кто проживает в России и Китае

SELECT * FROM customer WHERE country NOT IN ("Россия","Кита")

Вывод пустых / не пустых значений

// Выводим те записи, где НЕ введено значение state
SELECT * FROM customer WHERE state IS NULL
// Выводим те записи, где введено значение state
SELECT * FROM customer WHERE state IS NOT NULL

Вывод значений приблизительно соответствующих нужным

Выводим только тех служащих, у которых фамилия начинается на букву А. Знак % означает любые символы

SELECT * FROM employee WHERE name_last LIKE "А%"

Вывод значений приблизительно соответствующих нужным

Например, мы не помним как правильно пишется «Кабанов» или «Кобанов», тогда нужно будет воспользоваться знаком подчеркивания, который означает любой символ

SELECT * FROM employee WHERE name_last LIKE "К_банов"

Диапазон значений

Можем вывести только тех, кто получает от 25000 до 50000 включительно

SELECT * FROM salary BETWEEN 25000 AND 50000

Использование нескольких таблиц

SELECT o.order_no, o.amount_paid, c.company
FROM orders AS o, customer AS с
WHERE o.custno=c.custno AND c.city="Тюмень"

Выводим номер и сумму заказа из таблицы заказов и компанию сделавшую заказ из таблицы покупателей.

На самом деле, при правильном запроектированной базе данных данного вида запрос является самым частым, поэтому в MySQL был введен специальный оператор, который работает в разы быстрее, чем выше написанный код.

SELECT o.order_no, o.amount_paid, с.company
FROM orders AS o
LEFT JOIN customer AS с ON (с.custno=o.custno)

Настоятельно рекомендую использовать в своих запросах именно этот код


Вложенные подзапросы

SELECT * FROM employee WHERE salary=(SELECT MAX(salary) FROM employee)

Мы научились выводить максимальное значение, например, можем узнать максимальный оклад у служащих, но куда было бы интереснее узнать, кто тот счастливчик. Именно здесь используется механизм вложенных подзапросов

Внимание! Вложенные подзапросы являются одним из самых узких мест в SQL серверах. Совместно со своей гибкостью и мощностью, они также существенно увеличивают нагрузку на сервер. Что приводит к катастрофическому замедлению работы других пользователей. Очень часты случаи рекурсивных вызовов при вложенных запросах. Поэтому настоятельно рекомендую НЕ использовать вложенные запросы, а разбивать их на более мелкие. Либо использовать вышеописанную комбинацию LEFT JOIN. Помимо этого данного вида запросы являются повышенным очагом нарушения безопасности.. Если все таки вы решили использовать вложенные подзапросы, то проектируйте их очень внимательно и первоначальные запуски сделать на копиях баз.