WHERE절
WHERE절을 쓰면 데이터를 수평으로 가져올 수 있다. 즉, 열을 가져오는 것이 아니라 ROW를 가져온다.
SELECT ENAME FROM EMP WHERE JOB='CLERK';
논리구조
WHERE절은 테이블의 각각의 행에 대해 개체 조건을 만족하는지 여부를 판단한다. 조건을 만족시키는 경우만 출력한다.
SELECT ENAME FROM EMP WHERE SAL>2000;
2000 초과만 출력된다. 2000 미만은 출력되지 않는다.
실습하기
1. 사원 테이블 (EMP)에서 근무 부서 번호(DEPTNO)가 20번이 아닌 사원들의 사원번호(EMPNO), 근무부서번호
2. 사원 테이블에서 1982년 1월 1일 (1982/01/01) 이후에 입사한 사원의 사원번호(EMPNO), 이름(ENAME), 입사일자(HIREDATE)를 가져온다.
3. 사원 테이블에서 급여(SAL)가3000 이상인 사원들의 사원번호(EMPNO), 이름(ENAME), 급여(SAL)를 가져온다.
4. 사원 테이블에서 이름(ENAME)이 'SCOTT' 사원의 사원 번호(EMPNO), 이름(ENAME), 직무(JOB), 급여(SAL)를 가져온다.
5. 사원 테이블에서 직무(JOB)가 'MANAGER'가 아닌 사원의 사원번호(EMPNO), 이름(ENAME), 직무(JOB)를가져온다,
SELECT EMPNO, DEPTNO FROM EMP WHERE DEPTNO!=20;
SELECT EMPNO, ENAME, HIREDATE FROM EMP WHERE HIREDATE >= '1982/01/01';
SELECT EMPNO, DEPTNO FROM EMP WHERE SAL>3000;
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME='SCOTT';
SELECT EMPNO, ENAME, JOB FROM EMP WHERE JOB!='MANAGER';
논리연산자
여러 개의 논리식들을 합쳐서 하나의 논리식으로 구성하거나 논리식을 부정하는 연산자를 말한다.
AND, OR, NOT
1. 사원정보 테이블(EMP)에서 10번 부서에서 근무하고 있으며 직무가 MANAGER인 사원의 사원번호, 이름, 부서번호, 직무를 가져온다.
2. 사원 테이블(EMP)에서 논리 연산자 NOT을 사용해서 부서 번호가 20이 아닌 사원들의 직원 번호, 이름, 직무, 부서 번호를 가져온다.
3. 사원 테이블(EMP)에서 부서 번호가 10이거나 20인 사원들 중에서 급여가 2000 이상인 사원들의 직원 번호, 이름, 급여를 불러온다.
SELECT EMPNO, ENAME, DEPTNO, JOB
FROM EMP
WHERE JOB='MANAGER' AND DEPTNO = 10;
SELECT EMPNO, ENAME, DEPTNO, JOB
FROM EMP
WHERE NOT DEPTNO=20;
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE (DEPTNO=10 OR DEPTNO=20)AND SAL>=2000;
논리 연산자 우선순위 (NOT, AND, OR)
1. NOT, AND, OR 순서로 연산된다. 필수 암기. ★
2. 실습
SELECT EMPNO, ENAME, SAL, HIREDATE
FROM EMP
WHERE HIREDATE >= '1981/01/01' AND HIREDATE <= '1981/12/31' AND SAL>=1500;
SELECT EMPNO, ENAME, DEPTNO, SAL
FROM EMP
WHERE DEPTNO=20 AND SAL>=1500;
SELECT EMPNO, ENAME, MGR, JOB
FROM EMP
WHERE MGR='7698' AND JOB='CLERK';
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL>2000 OR SAL<1000;
오라클에만 있는 SQL 연산자
BETWEEN <최솟값> AND <최댓값> : 범위조건
IN (<값 1>, <값 2>,...) : 여러 개 값들 중 같은 것이 있는 경우 참
1. 실습 예제
SELECT EMPNO, ENAME, SAL, HIREDATE
FROM EMP
WHERE HIREDATE BETWEEN '1981/01/01' AND '1981/12/31' AND SAL>=1500;
2. 실습 예제
SELECT EMPNO, ENAME, JOB
FROM EMP
WHERE JOB IN ('CLERK', 'SALESMAN', 'ANALYST');
3. 시험에 나오는 꼭 알아야 할 포인트
- JOB = 'CLERK' OR JOB ='SALESMAN' OR JOB = 'ANALYST'는 하나씩 뜯어서 해석한다. JOB이 CLERK 또는 SALESMAN 또는 ANALYST인 경우. 하나만 충족되어도 출력됨. OR로 나열된 것은 IN ()와 같은 의미다.
- SAL BETWEEN 400 AND 200
말이 안 되는 문장임. 400 이상이면서 200 미만인 경우가 있나? 없음.
LIKE 연산자
1. SELECT <칼럼명> FROM <테이블명> WHERE <컬럼명> LIKE <와일드카드>;
예 : 직원들의 이름 중에서 A로 시작하는 사람이나 B를 포함하는 사람들의 정보를 얻고 싶다.
2. WHERE <칼럼명, 문자열> LIKE ' '
3. '_' : 특정 미지의 글자 하나를 의미함
4. '_A_' : (아무거나 1글자 + a + 아무거나 1글자) 앞뒤로 어떤 글자와 와도 상관없음
5. '%' : 미지의 글자 0개 이상을 의미한다.
6. '% A%' : 앞뒤로 어떤 글자가 와도 상관없고 몇 글자가 와도 상관없다. A문자열이 포함되어 있으며 참. 출력됨.
7. '% F'는 F로 끝나는 사원을 찾는다.
8. 실습
SELECT ENAME, EMPNO
FROM EMP
WHERE ENAME LIKE '%S';
SELECT ENAME, EMPNO
FROM EMP
WHERE ENAME LIKE '%A%';
SELECT ENAME, EMPNO
FROM EMP
WHERE ENAME LIKE '_A%';
SELECT ENAME, EMPNO
FROM EMP
WHERE ENAME LIKE '____';
'DB' 카테고리의 다른 글
[SQLD] 함수(Function) (1) | 2023.08.03 |
---|---|
[SQLD] 가상 컬럼(Psudocolumn) (0) | 2023.07.31 |
[SQLD] SQL DEVELOPER 사용방법 (1) | 2023.07.28 |
[SQLD] 관계형 데이터베이스는 어떻게 시작됐을까? (0) | 2023.07.27 |
[SQLD] 오라클(ORACLE) 설치하기. 54% 로딩 걸림... (1) | 2023.07.24 |