서브쿼리(SubQuery)
- 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다.
Select some_column, another_column
From table
Where column = (Select column From table);
검은색 : 외부쿼리, 빨간색 : 내부 쿼리, 서브쿼리
서브쿼리 조건
1. 서브쿼리는 언제나 Select 문 하나다.
2. 서브쿼리는 항상 괄호 안에 있어야 한다.
3. 서브쿼리는 세미콜론이없다. 세미콜론은 항상 전체 쿼리의 마지막에 위치한다.
4. 서브쿼리는 쿼리문의 4 곳에 나올 수 있다.
- Select절, 열들의 하나로 열 리스트를 선택하는 경우, From 절, Having 절.
5. 서브쿼리는 Select뿐 아니라 Insert, Delete, Update와 함께 사용될 수 있다.
서브쿼리 사용히 주의할 사항
1. 서브쿼리는 괄호로 감싸서 사용한다.
2. 서브쿼리는 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다.
단일 행 비교 연산는 서브쿼리의 결과가 반드시 1건 이하여야 하고,
복수 행 비교 연산자는 서브쿼리의 결과 건수과 상관없다.
3. 서브쿼리에서는 Order by 절을 사용하지 못한다. Order by 절은 Select 절에서 오직 한개만 올 수
있기때문에 Order by 절은 메인 쿼리의 마지막 문장에 위치해야 한다.
예) Where절에서 서브쿼리 사용
Select last_name, first_name
From my_contacts
WHERE zip_code = (Select zip_code From zip_code Wherer city = 'Memphis' And state = 'IN');
예) 자연 조인을 포함한 서브쿼리문
Select mc.first_name, mc.last_name, mc.phone, jc.title
From job_current AS jc
Natural Join my_contacts AS mc
Where jc.title IN (Select title From job_listings);
예) Select절에서 서브쿼리 사용
Seletc mc.first_name, mc.last_name,
(Select state From zip_code Where mc.zip_code = zip_code) AS state
From my_contacts mc;
비상관 쿼리
- 만약 서브쿼리가 외부쿼리의 어떤 것도 참조하지 않고 단독으로 사용되면 비상관 쿼리라고 한다.
- 내부쿼리가 우선 실행되고 외부쿼리로 이동한다.
* 여러 값을 반환하는 비상관 서브쿼리 : IN, NOT IN
- 비상관 서브 쿼리는 In이나 NOT IN을 사용하여 값이 서브쿼리에서 반환된 집합의
원소인지(아닌지)를 확인한다.
유용한 예) 리스트에 없는 직업 이름을 찾자
Select mc.first_name, mc.last_name, mc.phone, jc.title
From job_current jc Natural Join my_contacts mc
Where jc.title Not In (Select title From job_listings);
상관 쿼리
- 외부 쿼리에 의존적이다.
아래 예를 살펴보자
Select mc.first_name, mc.last_name
From my_contacts AS mc
Where 3 = (Select Count(*) From contact_interest Where contact_id = mc.contact_id);
서브쿼리가 별명 mc를 참조한다. 외부쿼리가 실행되어야 mc.contact_id의 값을 알 수 있다.
그러므로 서브쿼리는 외부쿼리에 의존적인 것을 알 수 있다.
유용한 예) 외부쿼리에 있는 행들에서 관련 테이블에 없는 모든 행을 찾자
my_contacts의 사람들 중 job_current 테이블에 없는 모든 사람을 찾는다.
Select mc.first_name firstname, mc.last_name lastname, mc.email email
From my_contacts mc
Where Not Exists (Select * From job_current jc Where mc.contact_id = jc.contact_id);
* 참고 : Exist와 Not Exists는 서로 반대의 의미이다.
출처 : http://warmz.tistory.com
- 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다.
Select some_column, another_column
From table
Where column = (Select column From table);
검은색 : 외부쿼리, 빨간색 : 내부 쿼리, 서브쿼리
서브쿼리 조건
1. 서브쿼리는 언제나 Select 문 하나다.
2. 서브쿼리는 항상 괄호 안에 있어야 한다.
3. 서브쿼리는 세미콜론이없다. 세미콜론은 항상 전체 쿼리의 마지막에 위치한다.
4. 서브쿼리는 쿼리문의 4 곳에 나올 수 있다.
- Select절, 열들의 하나로 열 리스트를 선택하는 경우, From 절, Having 절.
5. 서브쿼리는 Select뿐 아니라 Insert, Delete, Update와 함께 사용될 수 있다.
서브쿼리 사용히 주의할 사항
1. 서브쿼리는 괄호로 감싸서 사용한다.
2. 서브쿼리는 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다.
단일 행 비교 연산는 서브쿼리의 결과가 반드시 1건 이하여야 하고,
복수 행 비교 연산자는 서브쿼리의 결과 건수과 상관없다.
3. 서브쿼리에서는 Order by 절을 사용하지 못한다. Order by 절은 Select 절에서 오직 한개만 올 수
있기때문에 Order by 절은 메인 쿼리의 마지막 문장에 위치해야 한다.
예) Where절에서 서브쿼리 사용
Select last_name, first_name
From my_contacts
WHERE zip_code = (Select zip_code From zip_code Wherer city = 'Memphis' And state = 'IN');
예) 자연 조인을 포함한 서브쿼리문
Select mc.first_name, mc.last_name, mc.phone, jc.title
From job_current AS jc
Natural Join my_contacts AS mc
Where jc.title IN (Select title From job_listings);
예) Select절에서 서브쿼리 사용
Seletc mc.first_name, mc.last_name,
(Select state From zip_code Where mc.zip_code = zip_code) AS state
From my_contacts mc;
비상관 쿼리
- 만약 서브쿼리가 외부쿼리의 어떤 것도 참조하지 않고 단독으로 사용되면 비상관 쿼리라고 한다.
- 내부쿼리가 우선 실행되고 외부쿼리로 이동한다.
* 여러 값을 반환하는 비상관 서브쿼리 : IN, NOT IN
- 비상관 서브 쿼리는 In이나 NOT IN을 사용하여 값이 서브쿼리에서 반환된 집합의
원소인지(아닌지)를 확인한다.
유용한 예) 리스트에 없는 직업 이름을 찾자
Select mc.first_name, mc.last_name, mc.phone, jc.title
From job_current jc Natural Join my_contacts mc
Where jc.title Not In (Select title From job_listings);
상관 쿼리
- 외부 쿼리에 의존적이다.
아래 예를 살펴보자
Select mc.first_name, mc.last_name
From my_contacts AS mc
Where 3 = (Select Count(*) From contact_interest Where contact_id = mc.contact_id);
서브쿼리가 별명 mc를 참조한다. 외부쿼리가 실행되어야 mc.contact_id의 값을 알 수 있다.
그러므로 서브쿼리는 외부쿼리에 의존적인 것을 알 수 있다.
유용한 예) 외부쿼리에 있는 행들에서 관련 테이블에 없는 모든 행을 찾자
my_contacts의 사람들 중 job_current 테이블에 없는 모든 사람을 찾는다.
Select mc.first_name firstname, mc.last_name lastname, mc.email email
From my_contacts mc
Where Not Exists (Select * From job_current jc Where mc.contact_id = jc.contact_id);
* 참고 : Exist와 Not Exists는 서로 반대의 의미이다.
출처 : http://warmz.tistory.com
댓글 5개
joseehn
12년 전
감사합니다.
takumi22
12년 전
여기서 강의를??
mirrV
12년 전
기본적으로 생각해도 알 수 있는 기본적인 팁이네요.
12년 전
감사합니다.^^
12년 전
참고로 select 내에서 inner select로도 가능합니다.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 330 |
prosper
|
20년 전 | 2284 | |
| 329 |
prosper
|
20년 전 | 1913 | |
| 328 |
prosper
|
20년 전 | 1707 | |
| 327 | 20년 전 | 3774 | ||
| 326 | 20년 전 | 4860 | ||
| 325 |
hwatta
|
20년 전 | 2485 | |
| 324 |
|
20년 전 | 3147 | |
| 323 | 20년 전 | 5869 | ||
| 322 |
hwatta
|
20년 전 | 2854 | |
| 321 |
hwatta
|
20년 전 | 2325 | |
| 320 |
yesmoa
|
20년 전 | 4576 | |
| 319 | 20년 전 | 2692 | ||
| 318 | 20년 전 | 2243 | ||
| 317 |
kyodon
|
20년 전 | 2762 | |
| 316 | 20년 전 | 2587 | ||
| 315 |
|
20년 전 | 2886 | |
| 314 |
|
20년 전 | 3345 | |
| 313 |
|
20년 전 | 2650 | |
| 312 |
yesmoa
|
20년 전 | 4724 | |
| 311 | 20년 전 | 3279 | ||
| 310 |
홀로남은자
|
20년 전 | 4570 | |
| 309 | 20년 전 | 3009 | ||
| 308 | 20년 전 | 4139 | ||
| 307 | 20년 전 | 4376 | ||
| 306 | 20년 전 | 7039 | ||
| 305 | 20년 전 | 3872 | ||
| 304 | 20년 전 | 2773 | ||
| 303 |
크리스탈처럼
|
20년 전 | 4409 | |
| 302 | 20년 전 | 2210 | ||
| 301 |
|
20년 전 | 4327 | |
| 300 | 20년 전 | 3812 | ||
| 299 | 20년 전 | 2621 | ||
| 298 | 20년 전 | 4835 | ||
| 297 |
|
20년 전 | 2531 | |
| 296 | 20년 전 | 4534 | ||
| 295 | 20년 전 | 3573 | ||
| 294 | 20년 전 | 3594 | ||
| 293 | 20년 전 | 3821 | ||
| 292 | 20년 전 | 3215 | ||
| 291 |
yesmoa
|
20년 전 | 5945 | |
| 290 | 20년 전 | 2942 | ||
| 289 | 20년 전 | 5865 | ||
| 288 |
|
20년 전 | 2383 | |
| 287 |
|
20년 전 | 1813 | |
| 286 |
|
20년 전 | 2152 | |
| 285 |
|
20년 전 | 3545 | |
| 284 |
|
20년 전 | 2039 | |
| 283 |
|
20년 전 | 4404 | |
| 282 | 20년 전 | 3382 | ||
| 281 |
|
20년 전 | 2216 | |
| 280 |
|
20년 전 | 7811 | |
| 279 | 20년 전 | 5562 | ||
| 278 | 20년 전 | 2999 | ||
| 277 |
|
20년 전 | 5573 | |
| 276 | 20년 전 | 2363 | ||
| 275 | 20년 전 | 2613 | ||
| 274 | 20년 전 | 2397 | ||
| 273 | 20년 전 | 2230 | ||
| 272 | 20년 전 | 2157 | ||
| 271 | 20년 전 | 2614 | ||
| 270 | 20년 전 | 2646 | ||
| 269 | 20년 전 | 2489 | ||
| 268 | 20년 전 | 2694 | ||
| 267 | 20년 전 | 2380 | ||
| 266 | 20년 전 | 2570 | ||
| 265 | 20년 전 | 3516 | ||
| 264 |
|
20년 전 | 5376 | |
| 263 |
|
20년 전 | 3736 | |
| 262 | 20년 전 | 3196 | ||
| 261 |
허저비
|
20년 전 | 5942 | |
| 260 |
|
20년 전 | 5722 | |
| 259 | 20년 전 | 4147 | ||
| 258 | 20년 전 | 2381 | ||
| 257 | 20년 전 | 3199 | ||
| 256 | 20년 전 | 1914 | ||
| 255 | 20년 전 | 1584 | ||
| 254 | 20년 전 | 3156 | ||
| 253 | 20년 전 | 3550 | ||
| 252 | 20년 전 | 5130 | ||
| 251 | 20년 전 | 5824 | ||
| 250 | 20년 전 | 3682 | ||
| 249 | 20년 전 | 5028 | ||
| 248 | 20년 전 | 3295 | ||
| 247 | 20년 전 | 3654 | ||
| 246 |
|
20년 전 | 7963 | |
| 245 |
|
20년 전 | 5925 | |
| 244 | 20년 전 | 4498 | ||
| 243 |
|
20년 전 | 4071 | |
| 242 | 20년 전 | 2798 | ||
| 241 | 20년 전 | 2744 | ||
| 240 | 20년 전 | 2382 | ||
| 239 | 20년 전 | 1673 | ||
| 238 |
아우겐나이스
|
20년 전 | 2283 | |
| 237 |
email
|
20년 전 | 3695 | |
| 236 | 20년 전 | 4173 | ||
| 235 | 20년 전 | 10473 | ||
| 234 | 20년 전 | 5081 | ||
| 233 | 20년 전 | 3384 | ||
| 232 | 20년 전 | 3222 | ||
| 231 | 20년 전 | 3860 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기