Back-End/SQL 개발자 자격증

[ 데이터베이스 ] WHERE, IN, LIKE, IS NULL, ROWNUM, TOP

psy_er 2023. 10. 1. 21:36
728x90

[ 데이터베이스 ] WHERE, IN, LIKE, IS NULL, ROWNUM, TOP

 

WHERE

WHERE : SQL 문장에 WHERE 절을 사용해 특정 자료만 검색 가능, 테이블 두 개 이상 INNER JOIN 지원 기능

조건식 구성 : 칼럼명(좌측) + 비교 연산자 + 문자/숫자/표현식(우측) OR 비교 칼럼명 (JOIN 사용) 

SELECT [ALL/DISTINCT] 칼럼명 [ALIAS 명]
FROM 테이블명
WHERE 조건식;

 

연산자 종류

연산자 우선순위 : (), NOT, 비교 연산자, AND, OR

SQL 연산자 BETWEEN A AND B A, B 값 사이에 있다 (A, B 값이 포함됨)
IN (LIST) LIST 값중 하나라도 일치하면 된다
LIKE '비교문자열' 비교문자열과 형태가 일치(%, _사용)
IS NULL NULL 값인 경우
부정 비교 연산자 != 같지 않다
^= 같지 않다
<> 같지 않다 (ISO 표준)
NOT 칼럼명 = ~와 같지 않다
NOT 칼럼명 > ~보다 크지 않다
부정 SQL 연산자 NOT BETWEEN A AND B A,B 값 사이에 있지 않다 (A, B 값을 포함하지 않는다)
A보다 작거나 B보다 크다 조건으로 바꿀 수 있다
NOT IN (LIST) LIST 값과 일치하지 않는다
IS NOT NULL NULL 값을 갖지 않는다

 

 

WHERE 활용

 

CHAR, VARCHAR2 : 문자형 인용부호 ' ' 묶어 비교

NUMERIC : 숫자형 인용부호 ' '사용 안 함

 

EX) 소속팀이 삼성블루윙즈(K02)이거나 전남드래곤즈(K07)에 소속된 선수 들이어야 하고, 포지션이 미드필더(MF).

키는 170 이상, 180 이하여야 한다.

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE (TEAM_ID = 'K02' OR TEAM_ID = 'K07') AND POSITION = 'MF' AND HEIGHT >= 170 AND HEIGHT <= 180;
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID IN ('K02', K07) AND POSITION = 'MF' AND HEIGHT BETWEEN 170 AND 180;

 

WHERE 조건

 

WHERE IN (다중리스트) 

 

EX) JOB이 MANAGER이면서 20번 부서 OR JOB이 CLERK이면서 30번 부서에 속하는 사원 정보 다중 리스트로 출력

SELECT ENAME, JOB, DEPTNO
FROM EMP
WHERE (JOB, DEPTNO) IN ((' MANAGER ', 20), ('CLERK', 30));

 

WHERE LIKE (와일드카드)

 

% : 0개 이상의 어떤 문자를 의미한다.

_ : 1개 단일 문자를 의미한다.

 

EX) '장' 씨 성을 가진 선수들의 정보를 조회하는 SQL 작성

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE PLAYER_NAME LIKE '장%';

EX) 포지션 데이터 2번째 자리 값 'F'인 선수 정보 조회

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE PLAYER_NAME LIKE '_F%'

 

IS NULL

 

- NULL 값과 수치연산NULL 값을 리턴한다.

- NULL 값과 비교연산거짓(FALSE)을 리턴한다.

- NULL 값의 비교 연산은 IS NULL, IS NOT NULL이라는 정해진 문구를 사용해야 제대로 결과 얻음

SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID
FROM PLAYER
WHERE POSITION IS NULL;

 

부정연산자

 

EX) 삼성블루윙즈 소속인 선수들 중에서 포지션이 미드필더가 아니고, 키가 175CM 이상, 185 이하가 아닌 선수들의 자료

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버 HEIGHT 키
FROM PLAYER
WHERE TEAM_ID = 'K02' AND NOT POSITION = 'MF' AND NOT HEIGHT BETWEEN 175 AND 185;

EX) 국적 칼럼이 NULL이 아닌 선수와 국적을 표시하라

SELECT PLAYER_NAME 선수이름, NATION 국적
FROM PLAYER
WHERE NATION IS NOT NULL;

 

ROWNUM (ORACLE)

 

ROWNUM : 사용자 아닌 시스템이 관리하는 유사 칼럼, 테이블이나 집합에서 원하는 만큼 행을 가지고 올 때 WHERE 사용

 

- 한 행만 가지고 올 때

SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM = 1;
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= 1;
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM < 2;

- 두 개 이상의 행 가지고 올 때

SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM = N; (불가능!!!!)
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= N; (가능)
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM < N+1; (가능)

 

TOP (SQL SERVER)

 

TOP : TOP 절을 사용하여 행 개수 제한

TOP(Expression) [PERCENT] [WITH TIES]
- Expression : 반환할 행의 수 지정
- PERCENT : 처음 Expression%의 행만 반환
- WITH TIES : ORDER BY 지정될때 TOP N [PERCENT] 마지막 행과 같은 값 있는 경우 추가 행 출력
한행 가지고 올때
SELECT TOP(1) PLAYER_NAME FROM PLAYER;

두개 이상 행 가지고 올때
SELECT TOP(N) PLAYER_NAME FROM PLAYER;

 

728x90