용어 뜻:
출처:
SQL의 SELECT 문은 관계대수의 selection, projection, join, cartisian multiple 등을 결합한 것으로 SELECT문은
관계 데이터베이스에서 가장 자주 사용되며 중요하다.
SELECT문의 형식은 6개로 이루어지며 이들 중에서 SELECT 절과 FROM 절만 필수적인 절이고 나머지는 선택사항이다.
SQL 문은 대문자/소문자를 구분하지 않으며 SELECT 문의 결과는 새로운 relation이다.
기본적인 SELECT 문
1), 2)는 필수이고 3)~7)은 선택이다.
1) SELECT 절
질의 결과에 포함하려는 애트리뷰트들의 리스트를 열거한다.
관계대수의 Projection 연산에 해당한다.
Projection이란 언급된 속성에 한하여 해당 릴레이션의 N개의 컬럼이 결과로 나타나는 것이다.
중복되는 행은 결과에서 제거된다.
2) FROM 절
질의에서 필요로 하는 릴레이션들의 리스트를 열거한다.
SELECT 절에서 사용자가 검색하려는 애트리뷰트들을 포함하고 있는 릴레이션들 뿐만 아니라
WHERE 절의 Predicate에 사용된 애트리뷰트들을 포함하고 있는 릴레이션들도 열거해야 한다.
3) WHERE 절
관계대수의 SELECTION 연산의 predicate(selection 조건)에 해당한다.
From 절에 열거한 릴레이션이 속하는 애트리뷰트들만 사용해서 Predicate를 표현해야 한다.
4) 중첩 질의
중첩 질의는 다른 질의(SubQuery)의 WHERE 절에 포함된 SELECT 문이다.
5) GROUP BY 절
질의 결과에서 GROUP BY 다음에 명시된 애트리뷰트에 동일한 값을 갖는 튜플들을 한 그룹으로 묶는다.
6) HAVING 절
튜플들의 그룹이 만족해야 하는 조건을 나타낸다.
7) ORDER BY 절
결과 튜플들의 정렬 순서를 지정한다. ASC는 오름차순이고 DESC는 내림차순이다.
실행 순서
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
|
(1) SELECT 예제
SELECT * FROM dept ;
SELECT deptno, loc FROM dept ;
SELECT ename, sal, 12 * (sal + 100) FROM emp ;
* Null 값과 연산을 하면 Null이 나온다.
(2) Column Alias 예제
SELECT ename AS nme, sal salary
FROM emp ;
SELECT ename "Name", sal*12 "Annual Salary"
FROM emp ;
* 대소문자를 구분하고 공백있는 컬럼 Alias를 만들고 싶을땐 " "로 막는다.
* AS는 안 써도 된다.
* WHERE, GROUP BY절에는 안된다. ORDER BY 절에는 사용 가능.
(3) Concatenation 연산자 (|| : pipeline 2개)
SELECT ename||job "Employees" FROM emp ;
--> ename 데이터와 job 데이터가 붙어서 출력된다.
(4) 문자열을 데이터로 출력할때
SELECT ename||' '||'is a'||' '||job "Employee Details"
FROM emp ;
* 문자열은 ' '로 막고, 컬럼 Alias는 " "로 막는다.
(5) DISTINCT keyword : 중복된 Row를 하나로 만들어 준다. 자동 SORTING[ASC]
SELECT DISTINCT deptno
FROM emp ;
* DISTINCT 대신 UNIQUE를 써도 된다.
(6) 비교연산자
= : Equal to
> : Grater than
>= : Greater than or equal to
< : Less than
<= : Less than or equal to
<> : Not equal to
예) SELECT ename, sal, comm
FROM emp
WHERE sal <= comm ;
(7) 비교연산자 2
BETWEEN A AND B , IN(list), LIKE, IS NULL
(8) BETWEEN 연산자( NOT BETWEEN )
SELECT ename, sal
FROM emp
WHERE sal BETWEEN 1000 AND 1500 ; --> sal >= 1000 and sal <= 1500
(9) IN 연산자( NOT IN )
SELECT emp, ename, sal, mgr
FROM emp
WHERE mgr IN (7902, 7566, 7788) ; --> mgr = 7902 or mgr = 7566 or mgr = 7788
(10) LIKE 연산자( NOT LIKE )
예1) SELECT ename
FROM emp
WHERE ename LIKE 'S%' ; --> ename이 S로 시작하는 모든 데이터를 찾는다.
예2) SELECT ename
FROM emp
WHERE ename LIKE '_A%' ; --> 두 번째 글자가 A인 모든 데이터를 찾는다.
예3) SELECT ename
FROM emp
WHERE ename LIKE '%A/_%B' ESCAPE '/' ;
--> '/'는 Escape문자로 정의되었기 때문에 '_'도 문자로 인식한다.
즉, ename이 A_로 포함하는 모든 데이터를 찾는다.
* ESCAPE는 모든 문자가 가능하다.
(11) IS NULL 연산자
SELECT ename, mgr
FROM emp
WHERE mgr IS NULL ; --> mgr이 null인 데이터를 찾는다.
(12) Logical 연산자
AND : 두 개의 조건이 모두 만족해야 OK
OR : 한 개의 조건만 만족하면 OK
NOT
(13) AND 연산자
SELECT empno, ename, job, sal
FROM emp
WHERE sal >= 1100
AND job = 'CLERK' ;
(14) OR 연산자
SELECT empno, ename, job, sal
FROM emp
WHERE (sal >= 1100 OR job = 'CLERK') ;
(15) NOT 연산자
SELECT ename, job
FROM emp
WHERE job NOT IN ('CLERK', 'MANAGER') ;
--> NOT (job = 'CLERK OR job = 'MANAGER')
(16) 연산자 우선순위( 산술 > 문자 > 비교 > 논리 )
1 : 모든 비교 연산자
2 : NOT
3 : AND --> False > Null > True
4 : OR --> True > Null > False
예) A AND B에서...
- A가 False이고 B가 Null이면... False 이다.
- A가 True이고 B가 Null이면.... Null이다.
(17) SORT (ORDER BY)
* ASC는 default값이다.(작은 값부터..)
* 값이 Null일 때 가장 큰 값이 된다. (ASC일 때...맨 뒤에 붙는다.)
* column alias도 sorting이 된다.
예1) SELECT ename, job, deptno, hiredate "Date"
FROM emp
ORDER BY hiredate["Date" or 4 ] ;
예2) SELECT ename, job, deptno, hiredate
FROM emp
ORDER BY hiredate DESC ;
예3) SELECT empno, ename, sal*12 annsal
FROM emp
ORDER BY empno, annsal ; * select 절에 없는 열을 기준으로 정렬 가능.
예4) SELECT ename, deptno, sal
FROM emp
ORDER BY deptno, sal DESC
| cs |
자바잡아, 2016-10-27, http://hottteokbokki.tistory.com/entry/SQL
엠제이, 2016-10-27, http://emzei.tistory.com/233
댓글
댓글 쓰기