서브쿼리(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로도 가능합니다.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 7930 | 9년 전 | 398 | ||
| 7929 | 9년 전 | 316 | ||
| 7928 | 9년 전 | 407 | ||
| 7927 | 9년 전 | 327 | ||
| 7926 | 9년 전 | 657 | ||
| 7925 | 9년 전 | 341 | ||
| 7924 | 9년 전 | 329 | ||
| 7923 | 9년 전 | 334 | ||
| 7922 | 9년 전 | 369 | ||
| 7921 | 9년 전 | 394 | ||
| 7920 | 9년 전 | 314 | ||
| 7919 | 9년 전 | 330 | ||
| 7918 | 9년 전 | 485 | ||
| 7917 | 9년 전 | 323 | ||
| 7916 | 9년 전 | 398 | ||
| 7915 | 9년 전 | 398 | ||
| 7914 | 9년 전 | 405 | ||
| 7913 | 9년 전 | 560 | ||
| 7912 | 9년 전 | 408 | ||
| 7911 | 9년 전 | 356 | ||
| 7910 | 9년 전 | 399 | ||
| 7909 | 9년 전 | 498 | ||
| 7908 | 9년 전 | 412 | ||
| 7907 | 9년 전 | 359 | ||
| 7906 | 9년 전 | 378 | ||
| 7905 | 9년 전 | 356 | ||
| 7904 | 9년 전 | 344 | ||
| 7903 | 9년 전 | 341 | ||
| 7902 | 9년 전 | 549 | ||
| 7901 |
|
9년 전 | 726 | |
| 7900 | 9년 전 | 570 | ||
| 7899 | 9년 전 | 367 | ||
| 7898 | 9년 전 | 378 | ||
| 7897 | 9년 전 | 330 | ||
| 7896 | 9년 전 | 351 | ||
| 7895 | 9년 전 | 459 | ||
| 7894 | 9년 전 | 378 | ||
| 7893 | 9년 전 | 323 | ||
| 7892 | 9년 전 | 372 | ||
| 7891 | 9년 전 | 753 | ||
| 7890 | 9년 전 | 1188 | ||
| 7889 | 9년 전 | 741 | ||
| 7888 |
limsy1987
|
9년 전 | 540 | |
| 7887 | 9년 전 | 535 | ||
| 7886 | 9년 전 | 422 | ||
| 7885 | 9년 전 | 395 | ||
| 7884 | 9년 전 | 398 | ||
| 7883 | 9년 전 | 393 | ||
| 7882 | 9년 전 | 435 | ||
| 7881 | 9년 전 | 428 | ||
| 7880 | 9년 전 | 547 | ||
| 7879 | 9년 전 | 449 | ||
| 7878 | 9년 전 | 1206 | ||
| 7877 | 9년 전 | 740 | ||
| 7876 | 9년 전 | 471 | ||
| 7875 | 9년 전 | 549 | ||
| 7874 |
|
9년 전 | 798 | |
| 7873 | 9년 전 | 509 | ||
| 7872 | 9년 전 | 664 | ||
| 7871 | 9년 전 | 473 | ||
| 7870 | 9년 전 | 597 | ||
| 7869 | 9년 전 | 423 | ||
| 7868 | 9년 전 | 430 | ||
| 7867 | 9년 전 | 410 | ||
| 7866 | 9년 전 | 477 | ||
| 7865 | 9년 전 | 441 | ||
| 7864 | 9년 전 | 503 | ||
| 7863 | 9년 전 | 498 | ||
| 7862 | 9년 전 | 459 | ||
| 7861 | 9년 전 | 620 | ||
| 7860 | 9년 전 | 609 | ||
| 7859 | 9년 전 | 400 | ||
| 7858 | 9년 전 | 693 | ||
| 7857 | 9년 전 | 1062 | ||
| 7856 | 9년 전 | 509 | ||
| 7855 | 9년 전 | 734 | ||
| 7854 | 9년 전 | 722 | ||
| 7853 | 9년 전 | 571 | ||
| 7852 | 9년 전 | 499 | ||
| 7851 | 9년 전 | 493 | ||
| 7850 | 9년 전 | 577 | ||
| 7849 | 9년 전 | 351 | ||
| 7848 | 9년 전 | 402 | ||
| 7847 | 9년 전 | 639 | ||
| 7846 | 9년 전 | 446 | ||
| 7845 | 9년 전 | 405 | ||
| 7844 | 9년 전 | 386 | ||
| 7843 | 9년 전 | 403 | ||
| 7842 | 9년 전 | 390 | ||
| 7841 | 9년 전 | 374 | ||
| 7840 | 9년 전 | 390 | ||
| 7839 | 9년 전 | 425 | ||
| 7838 | 9년 전 | 507 | ||
| 7837 | 9년 전 | 346 | ||
| 7836 | 9년 전 | 392 | ||
| 7835 | 9년 전 | 463 | ||
| 7834 |
|
9년 전 | 1184 | |
| 7833 | 9년 전 | 413 | ||
| 7832 | 9년 전 | 405 | ||
| 7831 | 9년 전 | 547 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기