-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEXCEPT.txt
116 lines (87 loc) · 6.43 KB
/
EXCEPT.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
****** SQL оператор EXCEPT ******
SQL оператор EXCEPT используется для возврата всех строк в первом операторе
SELECT, которые не возвращаются вторым оператором SELECT. Каждый оператор
SELECT будет определять набор данных. Оператор EXCEPT извлечет все записи
из первого набора данных, а затем удалит из результатов все записи из
второго набора данных.
Пояснение: Представим два круга наложенных один на другой (пересекающиеся).
В месте пересечения получается двояковыпуклая линза. Круг слева это "Левая"
таблица, круг спарва это "Правая" таблица. А теперь мы закрасим часть левого
круга выдавленного линзей, т.е. линзу не закрашиваем (как это было при JOIN).
Запрос EXCEPT вернет записи в заштрихованной области. Это записи, которые
существуют в наборе данных "Левая таблица", а не в наборе данных "Правая таблица".
!!! ВНИМАНИЕ !!!
Каждый оператор SELECT в запросе EXCEPT должен иметь одинаковое количество полей
в наборах результатов с одинаковыми типами данных.
Оператор EXCEPT поддерживается не во всех базах данных SQL. Он может использоваться
в таких базах данных, как SQL Server, PostgreSQL и SQLite.
Для таких баз данных, как Oracle, используйте оператор MINUS для выполнения этого
типа запроса.
!!! ВНИМАНИЕ !!!
Синтаксис для оператора EXCEPT в SQL:
**************************************************************************************
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
EXCEPT
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
**************************************************************************************
Параметры:
- expression1, expression2, expression_n - cтолбцы или расчеты, которые мы хотим получить.
- tables - таблицы, из которых мы хотим получить записи. В запросе FROM должна быть указана
хотя бы одна таблица.
- WHERE conditions - необязательный. Это условия, которые должны быть выполнены для
выбора записей.
!!! ВНИМАНИЕ !!!
В обоих операторах SELECT должно быть одинаковое количество выражений.
Соответствующие выражения должны иметь одинаковый тип данных в SELECT
запросе.
Например: expression1 должен иметь одинаковый тип данных как в первом,
так и во втором операторе SELECT.
!!! ВНИМАНИЕ !!!
****** Использование EXCEPT с одним выражением ******
Оператор EXCEPT в SQL, который возвращает одно поле с одинаковым типом данных:
**************************************************************************************
SELECT product_id
FROM products
EXCEPT
SELECT product_id
FROM inventory;
**************************************************************************************
В данном случае при использовании EXCEPT возвращаются все значения product_id, которые
находятся в таблице products, а не в таблице inventory. Это означает, что если значение
product_id существовало в таблице products, а также в таблице inventory, то product_id
не будет отображаться в результатах запроса EXCEPT.
****** Использование EXCEPT с несколькими выражениями ******
Пример использования запроса EXCEPT в SQL, который возвращает более одного столбца:
**************************************************************************************
SELECT contact_id, last_name, first_name
FROM contacts
WHERE last_name = 'Bieber'
EXCEPT
SELECT customer_id, last_name, first_name
FROM customers
WHERE customer_id > 45;
**************************************************************************************
В этом примере EXCEPT запрос вернет записи из таблицы contacts со значениями contact_id,
last_name и first_name, которые не совпадают со значениями customer_id, last_name и
first_name в таблице customers.
****** Использование EXCEPT с ORDER BY ******
Применение оператора ORDER BY в запросе EXCEPT в SQL:
**************************************************************************************
SELECT supplier_id, supplier_name
FROM suppliers
WHERE supplier_id < 30
EXCEPT
SELECT company_id, company_name
FROM companies
WHERE state = 'Florida'
ORDER BY 2;
**************************************************************************************
Результатом EXCEPT будет следующий вывод: поскольку имена столбцов в двух операторах SELECT
различаются, более выгодно ссылаться на столбцы в предложении ORDER BY по их положению в
наборе результатов. Далее мы отсортировали результаты по supplier_name / company_name в
порядке возрастания, как обозначено ORDER BY 2, поскольку поля supplier_name / company_name
находятся на позиции № 2 в наборе результатов.