-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path09_set_operators.sql
116 lines (106 loc) · 2.46 KB
/
09_set_operators.sql
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
-- ----------------------------
-- set_operators
-- join이 열 추가라면 set 연산자는 행을 추가하는 개념
-- Union(합집합)
-- A U B
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 10
UNION -- 합집합
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000;
-- Union all(덧셈)
-- A + B
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 10
UNION ALL -- 덧셈
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000;
-- Intersect(교집함)
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE category_code = 10
intersect -- 교집합. 원래 지원하지 않음. Join 이나 in을 활용해서 구현해야함.
SELECT
menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000;
-- inner join 활용
SELECT
a.menu_code
, a.menu_name
, a.menu_price
, a.category_code
, a.orderable_status
FROM tbl_menu a
INNER JOIN (SELECT menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000) b ON (a.menu_code = b.menu_code)
WHERE a.category_code = 10 ;
-- in 활용
SELECT
a.menu_code
, a.menu_name
, a.menu_price
, a.category_code
, a.orderable_status
FROM tbl_menu a
WHERE category_code = 10
AND menu_code IN (SELECT menu_code
FROM tbl_menu
WHERE menu_price < 9000);
-- Minus(차집합)
-- MySQL은 Minus 기능을 지원하지 않기에, left join을 통해서 차집합을 구현해야한다.
SELECT
a.menu_code
, a.menu_name
, a.menu_price
, a.category_code
, a.orderable_status
-- , b.* -- b 요소를 전부 넣었을 때 null인 항목을 확인할 수 있다.
FROM tbl_menu a
LEFT JOIN (SELECT menu_code
, menu_name
, menu_price
, category_code
, orderable_status
FROM tbl_menu
WHERE menu_price < 9000) b ON (a.menu_code = b.menu_code)
WHERE a.category_code = 10
AND b.menu_code IS NULL;