본문 바로가기

Data Science/SQLD

[SQLD] SQL 기본 1-5. WHERE절

반응형

1. WHERE 조건절
자신이 원하는 자료만 검색하기 위한 방법

조인 조건 기술 / 결과 제한 조건 기술
WHERE 절의 JOIN 조건 / FROM 절의 JOIN 조건

WHERE 절에 조건이 없는 FTS (Full Table Scan) 문장이 SQL 튜닝의 1차적인 검토대상

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

WHERE절은 FROM 절 다음에 위치한다,
조건식 구성 방법
칼럼명
비교 연산자
문자, 숫자, 표현식
비교 칼럼명 (JOIN 사용시)


2. 연산자의 종류
WHERE 절 조건식의 비교 연산자

K-리그 일부 선수들의 이름과 포지션, 백넘버를 알고 싶다.
조건은 소속팀이 삼성블루윙즈이거나 전남드래곤즈에 소속된 선수들 중에서
포지션이 미드필더 이면서,
키는 170 센티미터 이상, 180 이하여야 한다.

비교 (부정 비교), SQL (부정 SQL), 논리 연산자
(1) 비교 연산자 : = > >= < <=
(2) SQL 연산자 : BETWEEN a AND b IN (list) LIKE '비교문자열%_' IS NULL
(3) 논리 연산자 : AND OR NOT
(4) 부정 비교 연산자 : != ^= <> NOT 칼럼명 = NOT 칼럼명>
(5) 부정 SQL 연산자 : NOT BETWWEN a AND b NOT IN (list) IS NOT NULL

연산자 우선순위
괄호 -> NOT -> 비료 연산자, SQL 비교 연산자 -> AND -> OR


3. 비교 연산자: =>>=<<=
소속팀이 삼성블루윙즈이거나 전남드래곤즈에 소속된 선수들이어야 하고,
포지션이 미드필더이어야 한다.
키는 170 센티미터 이상이고 180이하여야한다.

소속팀코드 = 삼성블루윙즈팀 코드 (K02)
소속팀코드 = 전남드래곤즈팀 코드 (K07)
포지션 = 미드필더 코드 (MF)
키 >= 170 센티미터
키 <= 180 센티미터

1) 소속팀이 삼성블루윙즈
2) 포지션이 미드필더(MF)
3) 키가 170 센티미터 이상인 경우

더보기

1) 소속팀이 삼성블루윙즈

WHERE TEAM_ID=K02;

-> WHERE TEAM_ID = 'K02';

2) 포지션이 미드필더(MF)

WHERE POSITION = 'MF';

-> 문자 유형 간 비교 조건 발생시

: 비교 연산자의 양쪽이 모두 CHAR 유형 타입인 경우

: 비교 연산자의 어느 한 쪽이 VARCHAR 유형타입인 경우

: 상수값과 비교할 경우

3) 키가 170 센티미터 이상인 경우

WHERE HEIGHT >=170;



4. SQL 연산자
SQL연산자 : 모든 데이터 타입에 대해서 연산이 가능한 예약되어 있는 연산자

BETWEEN a AND b
IN (inst)
LIKE '비교문자열%_'
IS NULL

1) 소속팀이 삼성블루윙즈, 전남드래곤즈
2) 포지션이 미드필더(MF)
3) 키가 170 센티미터 이상인 경우

더보기

1) 소속팀이 삼성블루윙즈, 전남드래곤즈

소속팀코드 IN (삼성블루윙즈 코드(K02, 전남드래곤즈 코드(K07))

2) 포지션이 미드필더(MF)

포지션 LIKE 미드필더(MF)

3) 키가 170 센티미터 이상인 경우

키 BETWEEN 170 센티미터 AND 180 센티미터

1) IN (list) 연산자
소속팀 코드와 관련된 IN (list) 형태의 SQL 비교 연산자를 사용하여 WHERE 절에 사용한다.

사원 테이블에서 JOB이 MANAGER이면서 20번 부서에 속하거나, JOB이 CLERK이면서 30번 부서에 속하는 사원의 정보를 IN 연산자의 다중 리스트를 이용해 출력하라

더보기

SELECT ENAME, JOB, DEPTNO

FROM EMP

WHERE (JOB, DEPTNO) IN (('MANAGER', 20), ('CLERK', 30));

더보기

주의

SELECT ENAME, JOB, DEPTNO

FROM EMP

WHERE JOB IN ('MANAGER', 'CLERK') AND DEPTNO IN (20,30);


2) LIKE 연산자
포지션이 미드필더(MF)

더보기

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE POSITION LIKE 'MF';

#와일드 카드
% : 0개 이상의 어떤 문자를 의미한다.
_ : 1개인 단일 문자를 의미한다.

'장'씨 성을 가진 선수들의 정보를 조회하는 WHERE 절 작성

더보기

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE PLAYER_NAME LIKE '장%';

3) BETWEEN a AND b 연산자
키가 170 센티미터 이상 180센티미터 이하인 선수들의 정보를 BETWEEN a AND b 연산자를 사용하여 WHERE 절을 완성한다.

더보기

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE HEIGHT BETWEEN 170 AND 180;

BETWEEN a AND b 는 범위에서 'a'와 'b' 값을 포함하는 범위를 말하는 것이다.

4) IS NULL 연산자
비교 자체가 불가능한 값
NULL 값의 비교 연산은 IS NULL, IS NOT NULL 이라는 정해진 문구를 사용해야 제대로 된 결과를 얻을 수 있다.

WHERE 절 조건이 거짓이 되어 조건에 만족하는 데이터가 없다.
WHERE POSTION = NULL;

칼럼값이 NULL 값인지 판단
WHERE POSITION IS NULL;

5) 논리 연산자
논리 연산자 : 비교 연산자나 SQL 비교 연산자들로 이루어진 여러 개의 조건들을 논리적으로 연결
AND OR NOT

(1) 소속이 삼성 블루윙즈인 조건과 키가 170 센티미터 이상인 조건을 가진 선수 조회

더보기

SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID

FROM PLAYER

WHERE TEAM_ID = 'K02'

AND HEIGHT >=170;


(2) 소속이 삼성블루윙즈이거나 전남드래곤즈인 조건을 SQL 비교연산자로 포지션이 미드필더인 조건을 비교 연산자로 비교한 결과를 논리 연산자로 묶어서 처리

더보기

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE TEAM_ID IN ('K02', 'K07') AND POSITION = 'MF';


(3) AND, OR같은 논리 연산자를 사용해 DBMS가 이해할 수 있는 SQL 형식으로 질문 변경
소속팀이 삼성블루윙즈이거나 전남드래곤즈,
포지션이 미드필더
키는 170 센티미터 이상이고 180이하

더보기

1) 소속팀이 삼성블루윙즈 OR 소속팀이 전남드래곤즈

2) AND 포지션이 미드필더

3) AND 키는 170 센티미터 이상

4) AND 키는 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 = 'K02' OR TEAM_ID = 'K07')

AND POSITION = 'MF'

AND HEIGHT >= 170

AND HEIGHT <= 180;


(4) IN (list)와 BETWEEN a AND b 연산자를 활용하여 같은 결과를 출력하는 SQL 문

더보기

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE TEAM_ID IN ('K02', 'K07')

AND POSITION = 'MF'

AND HEIGHT BETWEEN 170 AND 180;


6. 부정 연산자
(1) 삼성블루윙즈 소속인 선수들 중 포지션이 미드필더가 아니고, 키가 175 센티미터 이상 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;

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

(2) 국적 칼럼의 내국인은 별도 데이터가 없는데, 국적 칼럼이 NULL이 아닌 선수와 국적을 표시하라
SELECT PLAYER_NAME 선수이름, NATION 국적
FROM PLAYER
WHERE NATION IS NOT NULL:

7. ROWNUM, TOP 사용

(1) ROWNUM
Pseudo Column으로 SQL 처리결과  집합의 각 행에 대해 임시로 부여되는 일련번호,
원하는 만큼의 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용

한건의 행
WHERE ROWNUM =1;
WHERE ROWNUM <=1;
WHERE ROWNUM <2;

두건 이상의 N 행
WHERE ROWNUM <=N;
WHERE ROWNUM <= N+1;

고유한 키나 인덱스 값도 만들 수 있다
UPDATE MY_TABLE SET COLUMN = ROWNUM;

(2) TOP (SQL SERVER)

반응형