메뉴 건너뛰기

조회 수 20 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

조건문에 추가로 검색 조건을 추가해야 하는 경우가 있습니다.

단순히 AND 조건이나 OR 조건이 아닌 서브 쿼리를 추가하고 싶은 경우도 있습니다.

서브 쿼리에서 사용하는 방법으로 EXISTS를 사용하기도 합니다.

EXISTS는 SELECT 문이나 UPDATE 처리를 할 때 유용하게 사용됩니다.

 

이번 내용에서는 EXISTS를 사용하여 SELECT 문에서 사용하는 방법을 보도록 하겠습니다.

 

SELECT 조건문에서 EXISTS를 사용하는 방법을 먼저 보겠습니다.

사용 방법을 보기 전에 테스트 테이블과 테이터를 먼저 만들겠습니다.

 

  테이블 정보

STUDENT_GRADE ・・・학생 성적 테이블

STUDENT_INFO    ・・・학생 정보 테이블

 

학생 성적 테이블 작성 (STUDENT_GRADE)

-- 성적 테이블 작성
CREATE TABLE STUDENT_GRADE
(
	STUDENT_ID int NOT NULL,
	STUDENT_NAME nvarchar(20) NOT NULL,
	SCORE int NOT NULL,
	CONSTRAINT [PK_STUDENT_GRADE] PRIMARY KEY CLUSTERED
	(
		STUDENT_ID ASC
	)
) ON [PRIMARY]

 

학생 성적 데이터 작성

-- 학생 성적 데이터 입력
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (1, N'이름 1', 391)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (2, N'이름 2', 489)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (3, N'이름 3', 437)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (4, N'이름 4', 339)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (5, N'이름 5', 493)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (6, N'이름 6', 361)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (7, N'이름 7', 470)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (8, N'이름 8', 456)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (9, N'이름 9', 417)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (10, N'이름 10', 391)

 

학생 정보 테이블 작성 (STUDENT_INFO)

-- 성적 테이블 작성
CREATE TABLE STUDENT_INFO
(
	STUDENT_ID int NOT NULL,
	STUDENT_CLASS nvarchar(10) NULL,

	CONSTRAINT [PK_STUDENT_GRADE] PRIMARY KEY CLUSTERED
	(
		STUDENT_ID ASC
	)
) ON [PRIMARY]

 

학생 정보 데이터 작성

-- 학생 성적 데이터 입력
INSERT INTO STUDENT_INFO (STUDENT_ID, STUDENT_CLASS) VALUES (1, N'이과')
INSERT INTO STUDENT_INFO (STUDENT_ID, STUDENT_CLASS) VALUES (2, N'예체')
INSERT INTO STUDENT_INFO (STUDENT_ID, STUDENT_CLASS) VALUES (3, N'문과')
INSERT INTO STUDENT_INFO (STUDENT_ID, STUDENT_CLASS) VALUES (4, N'이과')
INSERT INTO STUDENT_INFO (STUDENT_ID, STUDENT_CLASS) VALUES (5, N'예체')
INSERT INTO STUDENT_INFO (STUDENT_ID, STUDENT_CLASS) VALUES (6, N'문과')
INSERT INTO STUDENT_INFO (STUDENT_ID, STUDENT_CLASS) VALUES (7, N'이과')

 

 

 

 

  EXISTS 사용 방법

기본적으로 EXISTS는 WHERE문 안에서 사용됩니다.

SELECT
	컬럼
FROM
	테이블 이름
WHERE EXISTS (
	SELECT 문
)

 

위에서 만든 테이블을 이용해 사용방법을 보도록 하겠습니다.

테스트용 테이블로 학생 성적 데이터가 저장된 테이블과 학생 정보 데이터가 저장된 테이블을 만들었습니다.

 

학생들중 이과 학생 성적만 취득 하도록 하겠습니다.

EXISTS 예제

SELECT
	*
FROM
	STUDENT_GRADE
WHERE EXISTS (
	SELECT
		*
	FROM
		STUDENT_INFO
	WHERE STUDENT_GRADE.STUDENT_ID = STUDENT_INFO.STUDENT_ID
		  AND STUDENT_INFO.STUDENT_CLASS = N'이과'
)

 

결과

EXISTS 결과

이과 학생들 성적만 출력되고 있습니다.

예제에서 사용한 쿼리 내용을 보겠습니다.

 

STUDENT_GRADE.STUDENT_ID = STUDENT_INFO.STUDENT_ID

서브 쿼리에 작성한 WHERE에 검색 조건으로 사용된 부분입니다.

JOIN을 사용하거나 공부를 하셨다면 이미 알고 계실 겁니다.

[테이블명.컬럼명]을 의미합니다.

 

STUDENT_GRADE와 STUDENT_INFO 테이블에는 컬럼 STUDENT_ID가 기본키로 양쪽 테이블 모두 존재합니다.

두 테이블에 동일한 데이터가 있는지 조건을 설정해줘야 합니다.

그리고 STUDENT_ID 컬럼은 두 테이블 모두 컬럼 이름이 같기 때문에 컬럼 이름 앞에 테이블명도 지정해야 합니다.

만약 기본키로 조건을 지정하지 않으면 원하는 값을 취득할 수 없습니다.

 

기본키 없이 취득 예제

SELECT
	*
FROM
	STUDENT_GRADE
WHERE EXISTS (
	SELECT
		*
	FROM
		STUDENT_INFO
	WHERE STUDENT_INFO.STUDENT_CLASS = N'이과'
)

 

결과

EXISTS 결과2

클래스와 상관없이 모든 데이터가 출력되었습니다.

JOIN을 사용하는 것처럼 공통된 값을 가진 컬럼으로 묶어줘야 합니다.

 

AND STUDENT_INFO.STUDENT_CLASS = '이과'

두 테이블을 공통된 키로 연결하고 원하는 검색 조건을 설정합니다.

이과 학생들 성적만 출력하고 싶기 때문에 STUDENT_CLASS 컬럼에서 이과인 학생만 출력하도록 지정했습니다.

 

SELECT *

EXISTS 안에서 사용한 SELECT 문에서 *를 사용해 모든 항목을 취득하도록 하고 있습니다.

하지만 *이나 일부 컬럼을 설정해도 결과는 같습니다.

이유는 EXISTS 결과는 TRUE 또는 FALSE를 반환하기 때문입니다.

즉, SELECT 뒤에는 어떤 것을 설정하든 결과는 같습니다.

 

  NOT EXISTS 사용 방법

이번에는 반대로 이과가 아닌 모든 학생을 취득하는 방법을 보겠습니다.

검색 조건에 STUDENT_CLASS 컬럼이 이과와 같지 않은 학생을 출력하도록 지정해도 되지만 NOT EXISTS를 사용 해서도 가능합니다.

 

NOT EXISTS 예제

SELECT
	*
FROM
	STUDENT_GRADE
WHERE NOT EXISTS (
	SELECT
		*
	FROM
		STUDENT_INFO
	WHERE STUDENT_GRADE.STUDENT_ID = STUDENT_INFO.STUDENT_ID
		  AND STUDENT_INFO.STUDENT_CLASS = N'이과'
)

 

결과

NOT EXISTS 결과

 

  정리

EXISTS를 사용하여 서브 쿼리를 작성하는 방법을 알아봤습니다.

다른 테이블을 참조하여 검색해야 하는 경우 유용하게 사용됩니다.

EXISTS로 작성한 서브 쿼리는 대부분 JOIN 문으로도 작성 가능하지만, 데이터를 취득하지 않고 존재 여부만 확인하는 경우에는 EXISTS만으로도 심플하게 작성할 수 있습니다.


List of Articles
번호 제목 날짜 조회 수
» MSSQL EXISTS로 서브 쿼리 작성 방법 예제 file 2022.02.16 20
29 MSSQL IN 다중조건 사용 방법 2022.02.16 182
28 MSSQL 테이블 작성 인덱스 생성 하기 file 2022.02.16 53
27 MSSQL CLUSTERED INDEX와 NONCLUSTERED INDEX 차이점 2022.02.16 16
26 MSSQL Primary Key 컬럼 속성 변경 안될때 해결 방법 file 2022.02.16 23
25 MSSQL 컬럼 추가, 변경, 삭제 ALTER 사용 방법 예제 file 2022.02.16 19
24 MSSQL 컬럼 중간에 추가하는 방법 file 2022.02.16 187
23 MSSQL RANK와 DENSE_RANK 랭크 함수 차이 예제 file 2022.02.16 14
22 MSSQL ROW_NUMBER로 성적 순위 설정 방법 예제 file 2022.02.16 9
21 MSSQL 성적 순위 설정 RANK 사용 방법 예제 file 2022.02.14 15
20 MSSQL 간단한 만나이 계산하기 DATEDIFF 사용 예제 file 2022.02.14 266
19 MSSQL 현재 시간 취득하는 여러 가지 방법 file 2022.02.14 14
18 MSSQL NULL값 변환 (NVL, ISNULL, CASE) 사용 방법 예 file 2022.02.14 134
17 MSSQL 공백값과 NULL값 동시에 체크 하는 방법 file 2022.02.14 1015
16 MSSQL 앞에 숫자0 채우기 FORMAT 사용 2022.02.14 86
15 MSSQL 숫자 3자리 콤마 넣기 또는 삭제하기 2022.02.14 57
14 MSSQL MERGE사용 안하고 있으면 UPDATE 없으면 INSERT 하기 2022.02.14 78
13 MSSQL MERGE 테이블에 있으면 업데이트 없으면 추가 하기 2022.02.14 10
12 MSSQL 문자열에서 숫자 또는 문자만 추출하기 REPLACE, PATINDEX 2022.02.14 674
11 MSSQL 모든 테이블 사용하고 있는 용량 확인 방법 2022.02.14 35
Board Pagination Prev 1 2 Next
/ 2

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved