629.40K
Категория: Базы данныхБазы данных

Использование подзапросов в SQL

1.

2.

3.


SELECT * FROM Person
INNER JOIN
City
ON Person.city_id = City.id

4.

Таблица городов City
id
name
population
1
Москва
100
2
Нижний Новгород
25
3
Тверь
22
4
Санкт-Петербург
80
5
Выборг
18
6
Челябинск
30
7
Одинцово
5
8
Павлово
5
Таблица персонала Person
id
name
city_id
1
Колованов
1
2
Петров
3
3
Плотников
12
4
Кучеров
4
5
Малкин
2
6
Иванов
13

5.

Таблица городов City
Таблица персонала Person
id
name
population
id
name
city_id
1
Москва
100
1
Колованов
1
2
Нижний Новгород
25
2
Петров
3
3
Тверь
22
3
Плотников
12
4
Санкт-Петербург
80
4
Кучеров
4
5
Выборг
18
5
Малкин
2
6
Челябинск
30
6
Иванов
13
7
Одинцово
5
8
Павлово
5
Результат запроса
SELECT * FROM Person
INNER JOIN
City
ON Person.city_id = City.id
Person.id
Person.name
Person.city_id
City.id
City.name
City.popul
ation
1
Колованов
1
1
Москва
100
2
Петров
3
3
Тверь
22
4
Кучеров
4
4
СанктПетербург
80
5
Малкин
2
2
Нижний
Новгород
25

6.


SELECT * FROM Person
LEFT JOIN
City
ON Person.city_id = City.id

7.

Таблица городов City
id
name
population
1
Москва
100
2
Нижний Новгород
25
3
Тверь
22
4
Санкт-Петербург
80
5
Выборг
18
6
Челябинск
30
7
Одинцово
5
8
Павлово
5
Таблица персонала Person
id
name
city_id
1
Колованов
1
2
Петров
3
3
Плотников
12
4
Кучеров
4
5
Малкин
2
6
Иванов
13

8.

Таблица городов City
Таблица персонала Person
id
name
population
id
name
city_id
1
Москва
100
1
Колованов
1
2
Нижний Новгород
25
2
Петров
3
3
Тверь
22
3
Плотников
12
4
Санкт-Петербург
80
4
Кучеров
4
5
Выборг
18
5
Малкин
2
6
Челябинск
30
6
Иванов
13
7
Одинцово
5
Результат запроса
8
Павлово
5
Person.id
Person.name
Person.city_id
City.id
City.name
City.populatio
n
1
Колованов
1
1
Москва
100
2
Петров
3
3
Тверь
22
3
Плотников
12
NULL
NULL
NULL
4
Кучеров
4
4
СанктПетербург
80
5
Малкин
2
2
Нижний
Новгород
25
6
Иванов
13
NULL
NULL
NULL
SELECT * FROM Person
LEFT JOIN
City
ON Person.city_id = City.id

9.


SELECT * FROM Person
RIGHT JOIN
City
ON Person.city_id = City.id

10.

Таблица городов City
Таблица персонала Person
id
1
2
3
4
5
6
name
Москва
Нижний Новгород
Тверь
Санкт-Петербург
Выборг
Челябинск
population
id
name
city_id
1
Колованов
1
2
Петров
3
3
Плотников
12
4
Кучеров
4
5
Малкин
2
6
Иванов
13
100
25
22
80
18
30
7
Одинцово
5
8
Павлово
5

11.

Таблица городов City
Таблица персонала Person
id
name
population
id
name
city_id
1
Москва
100
1
Колованов
1
2
Нижний Новгород
25
2
Петров
3
3
Тверь
22
3
Плотников
12
4
Санкт-Петербург
80
4
Кучеров
4
5
Выборг
18
5
Малкин
2
6
Челябинск
30
6
Иванов
13
7
Одинцово
5
8
Павлово
5
SELECT * FROM Person
RIGHT JOIN
City
ON Person.city_id = City.id
Результат запроса
Person.id
Person.name
Person.city_i
d
City.id
City.name
City.popul
ation
1
Колованов
1
1
Москва
100
2
Петров
3
3
Тверь
22
4
Кучеров
4
4
Санкт-Петербург
80
5
Малкин
2
2
Нижний Новгород
25
NULL
NULL
NULL
5
Выборг
18
NULL
NULL
NULL
6
Челябинск
30
NULL
NULL
NULL
7
Одинцово
5
NULL
NULL
NULL
8
Павлово
5

12.

внутри
перед
выполнением основного запроса
результат

13.

14.

15.

16.

SELECT имя_столбца FROM имя_таблицы WHERE часть условия IN
(SELECT имя_столбца FROM имя_таблицы WHERE часть условия IN
(SELECT имя_столбца FROM имя_таблицы WHERE условие);

17.

18.

snum
sname
city
comm
1
Колованов
Москва
10
2
Петров
Тверь
25
3
Плотников
Москва
22
4
5
Кучеров
Малкин
СанктПетербург
Пример таблицы заказов ORDERS
Пример таблицы покупателей CUSTOMERS
Пример таблицы продавцов SALES
28
СанктПетербург
18
cnum
cname
city
rating
snum
onum
amt
odate(YEAR)
cnum
snum
1
Деснов
Москва
90
6
1001
420
2013
9
4
2
Краснов
Москва
95
7
1002
653
2005
10
7
3
Кириллов
Тверь
96
3
1003
960
2016
2
1
4
Ермолаев
Обнинск
98
3
1004
320
2016
3
3
5
Колесников
Серпухов
98
5
1005
200
2015
5
4
1006
2560
2014
5
4
1007
1200
2013
7
1
1008
50
2017
1
3
1009
564
2012
3
7
1010
900
2018
6
8
6
Пушкин
Челябинск
90
4
7
Белый
Одинцово
85
1
6
Шипачев
Челябинск
30
8
Чудинов
Москва
89
3
7
Мозякин
Одинцово
25
9
Проворов
Москва
95
2
8
Проворов
Москва
25
10
Лосев
Одинцово
75
8
Вывести суммы заказов и даты, которые проводил продавец с фамилией "Плотников".
Начнем с такого примера и для начала вспомним, как бы делали этот запрос ранее: посмотрели бы в таблицу
SALES(или выполнили отдельный запрос), определили бы snum продавца "Плотников" — он равен 3. И
выполнили бы запрос SQL с помощью условия WHERE.

19.

Вывести суммы заказов и даты, которые проводил продавец с фамилией "Плотников"
Пример таблицы продавцов SALES
Пример таблицы покупателей CUSTOMERS
Пример таблицы заказов ORDERS
onum
amt
odate(YEAR)
cnum
snum
snum
sname
city
comm
cnum
cname
city
rating
snum
1001
420
2013
9
4
1
Колованов
Москва
10
1
Деснов
Москва
90
6
1002
653
2005
10
7
2
Петров
Тверь
25
2
Краснов
Москва
95
7
1003
960
2016
2
1
3
Плотников
Москва
22
3
Кириллов
Тверь
96
3
1004
320
2016
3
3
4
Ермолаев
Обнинск
98
3
Кучеров
СанктПетербург
1005
200
2015
5
4
5
Колесников
Серпухов
98
5
1006
2560
2014
5
4
6
Пушкин
Челябинск
90
4
1007
1200
2013
7
1
1008
50
2017
1
3
1009
564
2012
3
7
1010
900
2018
6
8
4
5
Малкин
СанктПетербург
28
18
7
Белый
Одинцово
85
1
8
Чудинов
Москва
89
3
6
Шипачев
Челябинск
30
7
Мозякин
Одинцово
25
9
Проворов
Москва
95
2
8
Проворов
Москва
25
10
Лосев
Одинцово
75
8
Результат работы
SELECT snum
FROM sales
WHERE sname ='Плотников'
SELECT amt, odate
FROM orders
WHERE snum = 3
amt
odate
320
2016
50
2017

20.

Вывести суммы заказов и даты, которые проводил продавец с фамилией "Плотников"
Пример таблицы продавцов SALES
Пример таблицы заказов ORDERS
Пример таблицы покупателей CUSTOMERS
onum
amt
odate(YEAR)
cnum
snum
snum
sname
city
comm
cnum
cname
city
rating
snum
1001
420
2013
9
4
1
Колованов
Москва
10
1
Деснов
Москва
90
6
1002
653
2005
10
7
2
Петров
Тверь
25
2
Краснов
Москва
95
7
1003
960
2016
2
1
3
Плотников
Москва
22
3
Кириллов
Тверь
96
3
1004
320
2016
3
3
4
Ермолаев
Обнинск
98
3
Кучеров
СанктПетербург
1005
200
2015
5
4
5
Колесников
Серпухов
98
5
1006
2560
2014
5
4
6
Пушкин
Челябинск
90
4
1007
1200
2013
7
1
1008
50
2017
1
3
1009
564
2012
3
7
1010
900
2018
6
8
4
5
Малкин
СанктПетербург
28
18
7
Белый
Одинцово
85
1
8
Чудинов
Москва
89
3
6
Шипачев
Челябинск
30
7
Мозякин
Одинцово
25
9
Проворов
Москва
95
2
8
Проворов
Москва
25
10
Лосев
Одинцово
75
8
SELECT amt, odate
FROM orders
WHERE snum = ( SELECT snum
FROM sales
WHERE sname = 'Плотников')
Результат работы
amt
odate
320
2016
50
2017

21.

snum
sname
city
comm
1
Колованов
Москва
10
2
Петров
Тверь
25
3
Плотников
Москва
22
4
5
Кучеров
Малкин
СанктПетербург
Пример таблицы заказов ORDERS
Пример таблицы покупателей CUSTOMERS
Пример таблицы продавцов SALES
28
СанктПетербург
18
cnum
cname
city
rating
snum
onum
amt
odate(YEAR)
cnum
snum
1
Деснов
Москва
90
6
1001
420
2013
9
4
2
Краснов
Москва
95
7
1002
653
2005
10
7
3
Кириллов
Тверь
96
3
1003
960
2016
2
1
4
Ермолаев
Обнинск
98
3
1004
320
2016
3
3
5
Колесников
Серпухов
98
5
1005
200
2015
5
4
1006
2560
2014
5
4
1007
1200
2013
7
1
1008
50
2017
1
3
1009
564
2012
3
7
1010
900
2018
6
8
6
Пушкин
Челябинск
90
4
7
Белый
Одинцово
85
1
6
Шипачев
Челябинск
30
8
Чудинов
Тверь
89
3
7
Мозякин
Одинцово
25
9
Проворов
Москва
95
2
8
Проворов
Москва
25
10
Лосев
Одинцово
75
8
Вывести суммы заказов и даты, которые осуществлял покупатель из города
«Тверь".

22.

23.

Показать уникальные номера и фамилии продавцов, которые провели сделки в 2016
Пример таблицы заказов ORDERS
Пример таблицы продавцов SALES
Пример таблицы покупателей CUSTOMERS
snum
sname
city
comm
cnum
cname
city
rating
snum
1
Колованов
Москва
10
1
Деснов
Москва
90
6
2
Петров
Тверь
25
2
Краснов
Москва
95
7
3
Плотников
Москва
22
3
Кириллов
Тверь
96
3
Кучеров
СанктПетербург
Малкин
СанктПетербург
4
5
28
18
4
Ермолаев
Обнинск
98
3
5
Колесников
Серпухов
98
5
6
Пушкин
Челябинск
90
4
7
Белый
Одинцово
85
1
8
Чудинов
Москва
89
3
onum
amt
odate(YEAR)
cnum
snum
1001
420
2013
9
4
1002
653
2005
10
7
1003
960
2016
2
1
1004
320
2016
3
3
1005
200
2015
5
4
1006
2560
2014
5
4
1007
1200
2013
7
1
1008
50
2017
1
3
6
Шипачев
Челябинск
30
7
Мозякин
Одинцово
25
9
Проворов
Москва
95
2
1009
564
2012
3
7
8
Проворов
Москва
25
10
Лосев
Одинцово
75
8
1010
900
2018
6
8
Результат запроса
SELECT snum
FROM orders
WHERE odate = 2016)
snum
1
3

24.

Показать уникальные номера и фамилии продавцов, которые провели сделки в 2016
Пример таблицы заказов ORDERS
Пример таблицы продавцов SALES
Пример таблицы покупателей CUSTOMERS
snum
sname
city
comm
cnum
cname
city
rating
snum
1
Колованов
Москва
10
1
Деснов
Москва
90
6
2
Петров
Тверь
25
2
Краснов
Москва
95
7
3
Плотников
Москва
22
3
Кириллов
Тверь
96
3
Кучеров
СанктПетербург
Малкин
СанктПетербург
4
5
28
18
4
Ермолаев
Обнинск
98
3
5
Колесников
Серпухов
98
5
6
Пушкин
Челябинск
90
4
7
Белый
Одинцово
85
1
8
Чудинов
Москва
89
3
onum
amt
odate(YEAR)
cnum
snum
1001
420
2013
9
4
1002
653
2005
10
7
1003
960
2016
2
1
1004
320
2016
3
3
1005
200
2015
5
4
1006
2560
2014
5
4
1007
1200
2013
7
1
1008
50
2017
1
3
6
Шипачев
Челябинск
30
7
Мозякин
Одинцово
25
9
Проворов
Москва
95
2
1009
564
2012
3
7
8
Проворов
Москва
25
10
Лосев
Одинцово
75
8
1010
900
2018
6
8
SELECT snum, sname
FROM sales
WHERE snum IN ( SELECT snum
FROM orders
WHERE odate = 2016)
Результат запроса
snum
sname
1
Колованов
3
Плотников
Этот SQL запрос отличается тем, что
вместо знака = здесь используется
оператор IN.

25.

Пример таблицы заказов ORDERS
Пример таблицы продавцов SALES
Пример таблицы покупателей CUSTOMERS
snum
sname
city
comm
cnum
cname
city
rating
snum
1
Колованов
Москва
10
1
Деснов
Москва
90
6
2
Петров
Тверь
25
2
Краснов
Москва
95
7
3
Плотников
Москва
22
3
Кириллов
Тверь
96
3
Кучеров
СанктПетербург
4
5
Малкин
28
СанктПетербург
18
4
Ермолаев
Обнинск
98
3
5
Колесников
Серпухов
98
5
6
Пушкин
Челябинск
90
4
7
Белый
Одинцово
85
1
onum
amt
odate(YEAR)
cnum
snum
1001
420
2013
9
4
1002
653
2005
10
7
1003
960
2016
2
1
1004
320
2016
3
3
1005
200
2015
5
4
1006
2560
2014
5
4
1007
1200
2013
7
1
1008
50
2017
1
3
6
Шипачев
Челябинск
30
8
Чудинов
Москва
89
3
7
Мозякин
Одинцово
25
9
Проворов
Москва
95
2
1009
564
2012
3
7
8
Проворов
Москва
25
10
Лосев
Одинцово
75
8
1010
900
2018
6
8
Вывести номера заказов у покупателей у которых рейтинг более 90

26.

27.

Вывести пары покупателей и продавцов, которые осуществили сделку между собой, но не позднее 2014
Пример таблицы продавцов SALES
Пример таблицы заказов ORDERS
Пример таблицы покупателей CUSTOMERS
onum
amt
odate(YEAR)
cnum
snum
1001
420
2013
9
4
7
1002
653
2005
10
7
96
3
1003
960
2016
2
1
Обнинск
98
3
1004
320
2016
3
3
Колесников
Серпухов
98
5
1005
200
2015
5
4
6
Пушкин
Челябинск
90
4
1006
2560
2014
5
4
7
Белый
Одинцово
85
1
1007
1200
2013
7
1
8
Чудинов
Москва
89
3
1008
50
2017
1
3
25
9
Проворов
Москва
95
2
1009
564
2012
3
7
25
10
Лосев
Одинцово
75
8
1010
900
2018
6
8
snum
sname
city
comm
cnum
cname
city
rating
snum
1
Колованов
Москва
10
1
Деснов
Москва
90
6
2
Петров
Тверь
25
2
Краснов
Москва
95
3
Плотников
Москва
22
3
Кириллов
Тверь
4
Ермолаев
4
Кучеров
СанктПетербург
28
5
5
Малкин
СанктПетербург
18
6
7
8
Шипачев
Мозякин
Проворов
Челябинск
Одинцово
Москва
30

28.

Вывести пары покупателей и продавцов, которые осуществили сделку между собой, но не позднее 2014
snum
1
2
3
4
5
6
7
8
sname
city
Колованов
Москва
Петров
Тверь
Плотников
Москва
Кучеров
СанктПетербург
Малкин
СанктПетербург
Шипачев
Мозякин
Челябинск
Одинцово
Проворов
Москва
comm
cnum
cname
city
rating
snum
onum
amt
odate(YEAR)
cnum
snum
1
Деснов
Москва
90
6
1001
420
2013
9
4
2
Краснов
Москва
95
7
1002
653
2005
10
7
3
Кириллов
Тверь
96
3
1003
960
2016
2
1
4
Ермолаев
Обнинск
98
3
1004
320
2016
3
3
5
Колесников
Серпухов
98
5
1005
200
2015
5
4
6
Пушкин
Челябинск
90
4
1006
2560
2014
5
4
1007
1200
2013
7
1
1008
50
2017
1
3
1009
564
2012
3
7
1010
900
2018
6
8
10
25
22
28
18
30
25
25
7
Белый
Одинцово
85
Чудинов
Москва
89
3
9
Проворов
Москва
95
2
10
Лосев
Одинцово
75
8
cnum
snum
9
4
10
7
1
3
3
7
SELECT cnum, snum
WHERE odate < 2014 )
1
8
Список пар покупатель - продавец
FROM orders
Пример таблицы заказов ORDERS
Пример таблицы покупателей CUSTOMERS
Пример таблицы продавцов SALES

29.

Вывести пары покупателей и продавцов, которые осуществили сделку между собой, но не позднее 2014
snum
1
sname
Колованов
2
3
city
Москва
Петров
Плотников
4
5
6
СанктПетербург
Малкин
СанктПетербург
Мозякин
8
Москва
Кучеров
Шипачев
7
Тверь
Проворов
Челябинск
Одинцово
Москва
Пример таблицы заказов ORDERS
Пример таблицы покупателей CUSTOMERS
Пример таблицы продавцов SALES
comm
cnum
cname
city
rating
snum
onum
amt
odate(YEAR)
cnum
snum
1
Деснов
Москва
90
6
1001
420
2013
9
4
2
Краснов
Москва
95
7
1002
653
2005
10
7
3
Кириллов
Тверь
96
3
1003
960
2016
2
1
4
Ермолаев
Обнинск
98
3
1004
320
2016
3
3
5
Колесников
Серпухов
98
5
1005
200
2015
5
4
6
Пушкин
Челябинск
90
4
1006
2560
2014
5
4
1007
1200
2013
7
1
1008
50
2017
1
3
1009
564
2012
3
7
1010
900
2018
6
8
10
25
22
28
18
30
25
25
7
Белый
Одинцово
85
1
8
Чудинов
Москва
89
3
9
Проворов
Москва
95
2
10
Лосев
Одинцово
75
8
Список пар покупатель - продавец
SELECT cname as 'Покупатель', sname as 'Продавец'
Покупатель
Продавец
Проворов
Кучеров
Лосев
Мозякин
Белый
Колованов
Кириллов
Мозякин
FROM customers, sales
WHERE (customers.cnum, sales.snum) IN ( SELECT
cnum, snum
FROM orders
WHERE odate < 2014 )
Сравниваем сразу два поля одновременно по
идентификаторам. То есть из таблицы
ORDERS берутся те строки, которые
удовлетворяют условию не позднее 2014 года,
затем вместо идентификаторов
подставляются значение имен покупателей и
продавцов.

30.

snum
1
2
3
4
5
6
7
8
sname
Колованов
Петров
Плотников
city
Москва
Тверь
Москва
Кучеров
СанктПетербург
Малкин
СанктПетербург
Шипачев
Мозякин
Проворов
Челябинск
Одинцово
Москва
Пример таблицы заказов ORDERS
Пример таблицы покупателей CUSTOMERS
Пример таблицы продавцов SALES
comm
cnum
cname
city
rating
snum
onum
amt
odate(YEAR)
cnum
snum
1
Деснов
Москва
90
6
1001
420
2013
9
4
2
Краснов
Москва
95
7
1002
653
2005
10
7
3
Кириллов
Тверь
96
3
1003
960
2016
2
1
4
Ермолаев
Обнинск
98
3
1004
320
2016
3
3
5
Колесников
Серпухов
98
5
1005
200
2015
5
4
6
Пушкин
Челябинск
90
4
1006
2560
2014
5
4
1007
1200
2013
7
1
1008
50
2017
1
3
1009
564
2012
3
7
1010
900
2018
6
8
10
25
22
28
18
30
25
25
7
Белый
Одинцово
85
1
8
Чудинов
Москва
89
3
9
Проворов
Москва
95
2
10
Лосев
Одинцово
75
8
Вывести номера заказов у покупателей у которых рейтинг более 90

31.

32.

INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [, column2 ]
FROM table1 [, table2 ]
[ WHERE VALUE OPERATOR ]

33.


UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]

34.


DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE)
English     Русский Правила