Еще немного SQL

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

Вложенный запрос – это запрос, который находится внутри другого SQL запроса и встроен внутри условного оператора WHERE. На самом деле вложенность может быть и многоуровневой, то есть select в select в select и т.д.

Общая структура запроса

SELECT – поля_таблиц

FROM – список_таблиц

WHERE – конкретное_поле IN (

SELECT поле_таблицы FROM таблица )

Пример использования

Для примера мы хотим найти самого младшего члена семьи. Запрос будет выглядеть так:

SELECT *
FROM FailyMembers
WHERE birthday = ( SELECT MAX(birthday) FROM FamilyMembers)

Результат запроса

Подзапросы с ANY, IN, ALL

ANY — ключевое слово, которое должно следовать за операцией сравнения (>, <, <>, = и т.д.), возвращающее TRUE, если хотя бы одно из значений столбца подзапроса удовлетворяет обозначенному условию.

SELECT – поле_таблиц_1

FROM – таблица_1

WHERE – поле_таблицы_1 <= ANY (SELECT поле_таблицы_2 FROM таблица_2 )

ALL — ключевое слово, которое должно следовать за операцией сравнения, возвращающее TRUE, если все значения столбца подзапроса удовлетворяет обозначенному условию.

SELECT – поле_таблиц_1

FROM – таблица_1 WHERE – поле_таблицы_1 > ALL (SELECT поле_таблицы_2 FROM таблица_2 )

IN — ключевое слово, являющееся псевдонимом ключевому слову ANY с оператором сравнения = (эквивалентность), либо <> ALL для NOT IN. Например, следующие запросы равнозначны:

SELECT – поле_таблиц_1

FROM – таблица_1

WHERE – поле_таблицы_1 = ANY (SELECT поле_таблицы_2 FROM таблица_2 )

или

WHERE – поле_таблицы_1 IN (SELECT поле_таблицы_2 FROM таблица_2 )

Другие операции с БД

В теории реляционных баз данных часто фигурирует акроним CRUD, образованный от слов Create, Read, Update, Delete. Обозначает он тот факт, что данные в БД можно:

Добавление данных, оператор INSERT

Для добавления новых записей в таблицу предназначен оператор INSERT.

Общая структура запроса

INSERT INTO – имя_таблицы [(поле_таблицы, …)]

VALUES – (значение_поля_таблицы, …)

| SELECT поле_таблицы, … FROM имя_таблицы …

Значения можно вставлять перечислением с помощью слова values, перечислив их в круглых скобках через запятую или c помощью оператора select. Таким образом, добавить новые записей можно следующими способами:

INSERT INTO Goods (good_id, good_name, type)
VALUES (5, ‘Table’, 2)

или

INSERT INTO Goods
VALUES (5, ‘Table’, 2)

good_idgood_nametype
1apartment fee1
2phone fee1
3bread2

Сделали INSERT, результат следующий

good_idgood_nametype
1apartment fee1
2phone fee1
3bread2
4Table2

Мы можем также вставить значения при помощи SELECT.

INSERT INTO Users (name, last_name, balance)
SELECT name, last_name, balance
FROM clients

user_idnamelast_namebalancephone_numbertype
1EdwinGreer500038067…1
2CliffordBarnett1300038050…1
3DinahWilson3000038066…2
Таблица Users

namelast_namebalance
CarolHoover3000
RebeccaSmall 1000
Robert Banks20000
Таблица Clients

user_idnamelast_namebalancephone_numbertype
1EdwinGreer500038067…1
2CliffordBarnett1300038050…1
3DinahWilson3000038066…2
4CarolHoover3000nullnull
5RebeccaSmall 1000nullnull
6Robert Banks20000nullnull
Результат INSERT

Обновление данных, оператор UPDATE

Для редактирования записей в таблице существует SQL оператор UPDATE.

Общая структура запроса

UPDATE – имя_таблицы

SET – поле_таблицы_1 = значение_поля_таблицы_1

          поле_таблицы_n = значение_поля_таблицы_n

WHERE – условие_выборки

Например, нам надо обновить имя, тогда запрос будет выглядеть следующим образом:

UPDATE FamilyMembers
SET  member_name = “Andie Anthony”
WHERE member_name = “Andie Quincey”

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

UPDATE Payments
SET unit_price = unit_price * 2

Удаление данных, оператор DELETE

Время от времени возникает задача удаления записей из таблицы. Для этого в SQL предусмотрены операторы DELETE и TRUNCATE, из которых наиболее универсальным и безопасным является первый вариант.

Общая структура запроса

DELETE FROM – имя_таблицы

WHERE – условие_выборки

Эту же операцию (удаления всех записей) можно сделать также с помощью оператора TRUNCATE. Он выполнит удаление таблицы и пересоздаст ее заново – этот вариант работает гораздо быстрее, чем удаление всех записей одна за другой (как в случае с DELETE) особенно для больших таблиц.

Если в DELETE запросе используется JOIN, то необходимо указать из каких(ой) именно таблиц(ы) требуется удалять записи.

DELETE имя_таблицы_ 1 (, имя_таблицы_2)

FROM имя_таблицы_1 JOIN имя_таблицы_2 

ON имя_таблицы_1.поле = имя_таблицы_2.поле WHERE – условие_выборки

Например, удалим все бронирования жилья, где нет кухни. Запрос будет следующий:

DELETE Reservations

FROM Reservations JOIN Rooms 

ON Reservations.room_id = Rooms.id

WHERE Rooms.has_kitchen = false

Rudchenko Yuliya

Автор: Rudchenko Yuliya