노력하는문돌이
2. 조건문(WHERE, AND, OR ..) 본문
0. 들어가기 전
1에서는 테이블을 조회하기 위한 명령어를 봤다면, 이제는 조건문을 활용하여 필요한 데이터만 조회하는 명령어를 정리할 것이다. PANDAS에서의 조건문, R에서의 SELECT/FILTER와 같은 함수와 동일한 작업을 수행하는 명령문들이 있다.
1. 조건문 명령어
1-1. WHERE절
- SELECT문으로 데이터를 조회할 때 특정 조건을 기준으로 원하는 행을 출력하는데 사용
- 여러 연산자와 함께 사용하면 더욱 세밀한 데이터 검색 가능
- FROM 절 뒤에 원하는 조건문을 작성하면 된다.
## WHERE절 활용 형테
SELECT 열, 열2, 열3 ...
FROM 테이블
WHERE 조건식;
## 예시
SELECT * FROM EMP
WHERE COL1 = 30;
1-2. AND/OR 연산자
- 조건식을 여러 개 지정할 수 있는 명령어
## AND 조건문
SELECT * FROM TABLE
WHERE 열1 = 30 AND 열2 = '조건2'; ## STRING에 대한 조건은 ''안에 넣어서 비교
## OR 조건문
SELECT * FROM TABLE
WHERE 열1 = 30 OR 열2 = '조건2;
## 산술 연산자 (EX1)
SELECT * FROM TABLE
WHERE 열1 = SAL*12; ## 이렇게 다른 연산자와 함께 사용 가능
## 산술 연산자 (EX2)
SELECT * FROM TABLE
WHERE 열2 > 30;
## 문자 대소비교
SELECT * FROM TABLE
WHERE 열1 >= 'F'; ## 문자에 대소비교를 넣으면, 첫 글자가 F와 같거나 F 뒤인 ROW 출력
## 문자 대소비교2
SELECT * FROM TABLE
WHERE 열2 <= 'FORD'; ## 첫글자가F, 두번째가O, 세번째가R .. 보다 작은 ROW 출력
1-3. 등가비교 연산자
연산자 | 사용법 | 의미 | |
= | A = B | A와 B가 같을 경우 T, 다를 경우 F | |
!= | A != B | A와 B가 다를 경우 T, 같을 경우 F | |
<> | A <> B | ||
^= | A ^= B |
1-4. 논리 부정 연산자
- Python에서의 NOT 명령어와 동일하게, TRUE와 FALSE를 반대로 반환할 때 사용하는 명령어
- 조건문 앞에 NOT을 붙임으로써 출력값을 반대로 뒤집을 수 있음
SELECT * FROM TABLE
WHERE NOT SAL = 3000; ## 이러면 SAL이 3000이 아닌 값으로 반환
1-5. IN 연산자
- 특정 열에 해당하는 조건을 여러 개 지정할 수 있는 명령어
- 파이썬에서 LIST COMPREHENSION에서의 IN 함수와 동일한 역할 수행
## 기본 문법 형태
SELECT [조회할 열], [열2], [열3]
FROM [테이블]
WHERE [열 이름] IN (데이터1, 데이터2, 데이터,3 ..);
## 예시1
SELECT * FROM EMP
WHERE JOB IN ('MANAGER','SALESMAN','CLERK'); ## JOB이 MANAGER,SALESMAN,CLERK인 사람만 도출
## 예시2
SELECT * FROM EMP
WHERE JOB NOT IN ('MANAGER','SALESMAN','CLERK') ## 예시1과 반대되는 사람만 도출
1-6. BETWEEN A AND B 연산자
- 특정 열 값의 최소 및 최고 범위를 지정하여 해당 범위 내의 데이터만 조회하는 명령어
- FROM 절 다음에 BETWEEN 최소 AND 최대로 표현하면 된다
## 기본 예제
SELECT * FROM EMP
WHERE SAL BETWEEN 2000 AND 3000;
## NOT과 함께 쓰는 예지
SELECT * FROM EMP
WHERE SAL NOT BETWEEN 2000 AND 3000;
1-7. LIKE 연산자와 와일드 카드
- LIKE 연산자는 일부 문자열이 포함된 데이터를 조회할 때 사용
- LIKE 연산자와 함께 사용할 수 있느 와일드카드는 _와 %가 있음
- | 어떤 값이든 상관없이 한 개의 문자 데이터를 의미 |
% | 길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를 의미 |
## 기본 문법
SELECT * FROM EMP
WHERE 열1 LIKE 조건;
## 예제1
SELECT * FROM EMP
WHERE 열1 LIKE 'S%'; ## 열1의 첫 글자가 S로 시작하는 모든 값 반환
## 예제2
SELECT * FROM EMP
WHERE 열1 LIKE '_L%'; ## 열1의 두 번째 글자가 L로 시작하는 모든 값 반환
## 예제3
SELECT * FROM EMP
WHERE 열1 LIKE '%AM%'; ## 열1의 중간 글자가 AM이 들어간 모든 값 반환
## 예제4
SELECT * FROM EMP
WHERE 열1 NOT LIKE '%AM%'; ## 열1의 중간 글자가 AM이 안 들어간 모든 값 반환
- 와일드 카드 문자가 데이터 일부일 경우에는 ESCAPE절을 사용하면 된다
- ESCAPE 절을 쓸 때는 '\'를 아래의 빈칸 자리에 사용해주면 된다.
## ESCAPE 절 예시
SELECT * FROM TABLE
WHERE 열1 LIKE 'A( )_A%' ESCPAE '( )'; ## 여기서 ( )은 위의 원화 표시임. 여기서 안 보여서 대체함
1-8. IS NULL 연산자
- NULL은 데이터가 비어있는 상태를 의미하며, IS NULL 연산자는 그런 NULL 값들을 조회해주는 명령어
- NULL은 연산 자체가 무의미해지는 현상이 발생해서 기존의 연산자(=,+,* 등)은 무의미할 수 있음
- 이럴 때 활용하는 것이 IS NULL
## 기본 형태
SELECT * FROM TABLE
WHERE 열 IS NULL;
## NOT과 응용
SELECT * FROM TABLE
WHERE 열 IS NOT NULL; ## 다른 연산자와 다르게 IS와 NULL 사이에 NOT이 들어감
1-9. 집합 연산자
- 합집합, 교집합처럼 데이터 간의 집합 관계를 바탕으로 데이터를 조회할 때 활용하는 명령어
- 두 개의 SELECT 문 사이에 넣으면 된다
- 이때, 두 SELECT 절의 COLUMN의 개수와 자료형이 동일해야 한다. 만약 다를 경우 오류를 반환한다
종류 | 설명 |
UNION | 연결된 SELECT문의 결과 값을 합집합으로 묶어 줍니다. 결과 값의 중복은 제거됩니다. |
UNION ALL | 연결된 SELECT문의 결과 값을 합집합으로 묶어 줍니다. 중복된 결과 값도 제거 없이 모두 출력 |
MINUS | - 먼저 작성한 SELECT문의 결과 값에서 다음 SELECT문의 결과 값을 차집합 처리 - 먼저 작성한 SELECT문의 결과 값 중 다음 SELECT문에 존재하지 않는 데이터만 출력 (차집합) |
INTERSECT | 먼저 작성한 SELECT문과 다음 SELECT문의 결과 값이 같은 데이터만 출력 (교집합) |
## 열 개수와 열 자료형이 같다는 가정 하에
SELECT 열1, 열2, 열3 FROM TABLE
WHERE 열1 = 10
UNION ## 이 자리에 UNION ALL, MINUS, INTERSECT 등이 들어가면 됨
SELECT 열1,열5,열6 FROM TABLE
WHERE 열1 = 20;
2. 연습문제 풀이
2-1. 이름이 S로 끝나는 사원 데이터 출력
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
FROM EMP
WHERE ENAME LIKE '%S';
2-2. SALESMAN이면서 30번 부서에서 근무하는 사원 데이터 출력
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 30 AND JOB = 'SALESMAN';
2-3. 20번, 30번 부서에 근무하고 있으며, 급여가 2000 초과인 사원 데이터 출력
## 1번 : 집합 연산자를 사용하지 않은 방식
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE DEPTNO IN (20,30) AND SAL > 2000;
## 2번 : 집합 연산자 사용
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 20 AND SAL > 2000;
UNION
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 30 AND SAL > 2000;
2-4. SAL 열 값이 2000이상 3000이하 범위 이외의 값을 가진 데이터만 출력 (BETWEEN 사용 X)
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
FROM TABLE
WHERE SAL < 2000
UNION
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
FROM TABLE
WHERE SAL > 3000
2-5. 사원 이름에 E가 포함되어 있는 30번 부서의 사원 중 급여가 1000~2000 사이가 아닌 데이터
SELECT ENAME,EMPNO,SAL,DEPTNO FROM EMP
WHERE ENAME LIKE'%E%' AND SAL NOT BETWEEN 1000 AND 2000;
2-6. 추가 수당이 존재 X, 상급자 존재, 직책이 MANAGER, CLERK인 사원 중 두 번째 글자가 L인 사원
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
FROM EMP
WHERE SAL IS NULL AND MGR IS NOT NULL AND ENAME NOT LIKE '_L%';
'프로그래밍 언어 공부 > SQL' 카테고리의 다른 글
4. 다중행 함수와 데이터 그룹화(GROUP BY) (0) | 2021.10.15 |
---|---|
3. 데이터 가공 함수(문자, 숫자, 날짜 등) (0) | 2021.10.15 |
1. Table 조회 함수 (0) | 2021.10.11 |