-
SQL WHERE절과 연산자back-end&DB/SQL(Oracle) 2023. 5. 3. 12:53728x90
1. WHERE
SELECT 컬럼
FROM 테이블
WHERE 조건
SELECT * FROM employees WHERE job_id = 'IT_PROG';
* Oracle의 경우 Ctrl + F7의 경우 정렬이 된다.
- 실행 순서 FROM > WHERE > SELECT
- employees 테이블에서 IT_PROG의 조건에 해당하는 모든 컬럼에서 찾는다.
1.1. 실습
- 직원 ID가 105인 사람의 성과 이름을 출력
SELECT first_name, last_name FROM employees WHERE employee_id = '105';
2. 연산자
2.1. 산술연산자( +, -, *, / )
SELECT salary, salary + 2 FROM employees; SELECT salary, salary - 2 FROM employees; SELECT salary, salary * 2 FROM employees; SELECT salary, salary / 2 FROM employees;
2.2. 비교연산자(=, >, <, <=, >=)
- 부서 ID가 50인 직원 ID와 부서ID 출력
SELECT employee_id, department_id FROM employees WHERE department_id = 50;
2.2.1. 실습
- 직원 테이블에서 급여 5000 이하 인 사람들의 이름과 급여 출력
SELECT last_name, salary FROM employees WHERE salary <= 5000;
- 직원 테이블에서 연봉 50000 이상 사람들의 이름과 연봉을 출력 단 연봉은 annSal 출력
SELECT last_name, salary * 12 AS annsal FROM employees WHERE salary * 12 >= 50000;
2.3 등가 비교 연산자
- 같다 =
- 같지않다 !=, <>, ^=
- 부정한다 NOT(부정의 역할, 의미가 반대로 변하게 만들어주는 성질)
SELECT * FROM employees WHERE department_id != 50; SELECT * FROM employees WHERE department_id <> 50; SELECT * FROM employees WHERE department_id ^= 50; SELECT * FROM employees WHERE not department_id = 50;
- NOT의 경우 맨 앞에 사용(부정의 의미).
- 부서 ID가 50인 것이 '아닌 것'
2.3.1. 실습
- 급여가 10000 미만이 아닌 직원의 이름과 급여를 출력
SELECT FIRST_name, employee_id FROM employees WHERE not salary < 10000;
2.4. 논리연산자
- AND 그리고 모든 조건이 True일 때만 True
- OR 혹은 하나의 조건이 True 이면 True2.4.1 실습
- JOB_ID가 IT_PROG와 FI_ACCOUNT가 아닌 직원의 이름과 JOB_ID를 출력
SELECT FIRST_name, job_id FROM employees WHERE job_id != 'IT_PROG' AND job_id != 'FI_ACCOUNT';
- 부서 ID가 100이거나 입사일이 16년 2월 2일 이후 입사한 직원의 이름과 입사일 출력
SELECT FIRST_name, hire_date FROM employees WHERE department_id = 100 or hire_date > '16/02/02';
- 부서ID가 100이거나 50인 직원 중에서 연봉 10000 이상 직원의 ID와 이름 그리고 연봉출력(Annsal)
SELECT FIRST_name, hire_date, salary * 12 as Annsal FROM employees WHERE (department_id = 100 or department_id = 50) and salary * 12 >= 10000;
- 부서 아이디가 100이거나 90인 직원 중에서 직원 ID가 101 사람 직원 ID 이름 연봉 출력하기(Annsal)
SELECT FIRST_name, salary * 12 as Annsal, employee_ID, department_id FROM employees WHERE (department_id = 100 or department_id = 90) and employee_ID = 101;
- 먼저 계산을 원하는 부분을 () 처리를 해야 된다.
- 사칙 순서 and가 순위가 더 높다.
3. is null, is not null
- NULL을 처리할 수 있는 유일한 연산자
- is null : null 있는지 확인
- is not null : null이 아닌지 확인SELECT * FROM employees WHERE first_name IS NULL; SELECT * FROM employees WHERE first_name IS NOT NULL;
3.1. 실습
- 핸드폰 번호가 NULL인 직원의 이름과 핸드폰 번호를 출력
SELECT first_name, phone_number FROM employees WHERE phone_number IS NULL;
- 커미션 비율이 NULL이 아닌 직원의 이름과 커미션 비율 출력
SELECT first_name, commission_pct FROM employees WHERE commission_pct IS NOT NULL;
4. IN연산자과 NOT IN연산자
4.1 IN연산자
- IN연산자 > =연산자 + OR연산자
SELECT * FROM employees WHERE department_id = 30 OR department_id = 60 OR department_id = 90;
- IN연산자를 사용을 한다면
SELECT * FROM employees WHERE department_id IN(30, 60, 90);
- 줄이는 것이 가능하다.
- 그러나 NULL이 포함되어 있으면 무시를 한다.
SELECT * FROM employees WHERE department_id IN(30, 60, 90, NULL);
- 이렇게 적어도 NULL은 출력이 되지 않는다.(실제 NULL 데이터 보유)
SELECT * FROM employees WHERE department_id = 30 OR department_id = 60 OR department_id = 90 OR department_id = null;
- 풀어서 적으면 NULL은 출력이 되지 않는다.
- NULL를 정상적으로 출력하려면
SELECT * FROM employees WHERE department_id = 30 OR department_id = 60 OR department_id = 90 OR department_id is null;
- = 과 is는 다르다. is null만 null 출력이 가능하다.
4.2 NOT IN 연산자
- not in : in 조건에 해당하지 않는 데이터 출력
- not : 부정의 역할, 의미가 반대로 변하게 만들어주는 성질
- not in 연산자 : <> 연산자와 AND 연산자SELECT * FROM employees WHERE department_id <> 30 OR department_id <> 50 OR department_id <> 90;
SELECT department_id FROM employees WHERE department_id not IN(30, 50, 90);
- not in에 NULL이 포함되어 있으면 어떠한 값도 출력이 되지 않는다.
5. BEETWEEN
- 범위에 조건을 걸 때 이용
SELECT FIRST_name, salary FROM employees WHERE salary >= 10000 and salary < 20000;
- BEETWEEN 이용 시
SELECT FIRST_name, salary FROM employees WHERE salary BETWEEN 10000 and 19999;
- BETWEEN(10000 이상 ~ 19999 이하)
5.1 실습
- 2005년에 입사한 직원의 이름과 입사일을 출력
SELECT FIRST_name, hire_date FROM employees WHERE hire_date BETWEEN '05/01/01' and '05/12/31';
6. LIKE
- LIKE 특정 조건을 검색할 때 이용
- 와일드카드 % : 문자대체
- 칼럼 LIKE '문자%' 해당 문자로 시작하는 데이터 검색
- 칼럼 LIKE '%문자' 해당 문자로 끝나는 데이터 검색
- 칼럼 LIKE '%문자%' 해당 문자를 포함하는 데이터 검색
- 컬럼 LIKE '1__' 1로 시작하는 3글자로 이루어진 데이터 검색
- 컬럼 LIKE '__1' 1로 끝나는 3글자로 이루어진 데이터 검색SELECT FIRST_NAME FROM employees WHERE first_name LIKE 'S%'; SELECT FIRST_NAME FROM employees WHERE first_name LIKE '%s'; SELECT FIRST_NAME FROM employees WHERE first_name LIKE '%s%';
- S로 시작하는 직원 이름
- s로 끝나는 직원 이름
- s가 포함된 직원 이름
SELECT employee_ID FROM employees WHERE employee_id LIKE '1__'; SELECT employee_ID FROM employees WHERE employee_id LIKE '__1'; SELECT employee_ID FROM employees WHERE employee_id LIKE '_1_';
- 직원 ID에 1로 시작하는 세 글자 찾기
- 직원 ID에 1로 끝나는 세글자 찾기
- 직원 ID에 중간에 1이 포함되는 세글자 찾기
6.1 실습
- 650으로 시작하는 핸드폰 번호 찾기
SELECT phone_number FROM employees WHERE phone_number LIKE '650%';
- 이름이 S로 시작하고 N으로 끝나는 직원 찾기
SELECT first_name FROM employees WHERE first_name LIKE 'S%' AND first_name LIKE '%n';
- 이름에 두 번째 글자가 e인 직원 찾기
SELECT first_name FROM employees WHERE first_name LIKE '_e%';
- 01월에 입사한 직원 찾기
SELECT first_name FROM employees WHERE hire_date LIKE '___01___';
- '___01%' 똑같이 출력이 가능합니다.
728x90'back-end&DB > SQL(Oracle)' 카테고리의 다른 글
SQL CREATE와 ALTER 그리고 제약 조건 (0) 2023.05.10 SQL JOIN (0) 2023.05.09 SQL GROUP BY와 HAVING와 ORDER BY (0) 2023.05.08 SQL 함수 (0) 2023.05.04 SQL SELECT절과 FROM절 (0) 2023.05.02