SELECT 컬럼,컬럼...
FROM 테이블
WHERE 기준컬럼 비교연산자 비교값
AND 기준컬럼 비교연산자 비교값;
- 행을제한하는 절
- 조건절
- 기준컬럼이 문자열, 날짜열이면 비교값은 작은 따음표로 묶어야 한다.
- 영문자는 대소문자를 구분한다.
- 날짜형식은 지역에 따라 기본 날짜 형식이 다르다.
한국(RR/MM/DD), 미국(DD-MON-RR)- 비교연산자
- =(같다), >(크다), >=(크거나같다), <(작다), <=(작거나같다), !=,^=,<>(같지않다)
- 논리연산자
- AND : 두 조건이 모두 참일 경우 TRUE
- OR : 두 조건중에 하나가 참일 경우 TRUE
- NOT : FALSE 경우TRUE, TRUE 경우 FALSE
- 우선순위 : NOT > AND > OR
SELECT * FROM hr.employees WHERE hire_date = '04/01/30'; -- 한국지역(RR/MM/DD) SELECT * FROM hr.employees WHERE hire_date = '30-JAN-04'; -- 미국지역(DD-MON-RR) SELECT * FROM hr.employees WHERE department_id = 60; SELECT * FROM hr.employees WHERE department_id != 60; SELECT * FROM hr.employees WHERE department_id = 60 AND salary >= 6000;
예시 구문_
SELECT last_name, salary FROM hr.employees WHERE salary between 2500 and 3500 ORDER BY 1; SELECT last_name, salary FROM hr.employees WHERE last_name between 'King' and 'Smith' ORDER BY 1; SELECT last_name, salary, hire_date FROM hr.employees WHERE hire_date BETWEEN '01/01/01' AND '02/12/31' ORDER BY 3;
예시구문_
SELECT * FROM hr.employees WHERE employee_id IN (100,101) SELECT * FROM hr.employees WHERE employee_id NOT IN (100,101) SELECT * FROM hr.employees WEHRE department_id IN (30,50,60) AND salary >= 5000;
NULL을 체크하는 연산자
SELECT * FROM hr.employees WHERE commission_pct IS NULL; SELECT * FROM hr.employees WHERE commission_pct IS NOT NULL;
- 문자 패턴을 찾는 연산자.
- % : 0개 이상의 문자를 찾을 때 사용
- _ : 1개 문자를 찾을 때 사용
- ESCAPE('\') : LIKE 연산자 사용시에 % 또는 _를 순수한 문자로 인식할 수 있는 방법
SELECT * FROM hr.employees WHERE last_name LIKE 'K%' SELECT * FROM hr.employees WHERE last_name LIKE '_i%' SELECT * FROM hr.employees WHERE job_id LIKE 'HR\%%'
[문제6]
employees 테이블에 있는 데이터 중에 job_id가 SA로 시작되고
salary 값은 10000이상 받는 사원들의 정보를 출력해주세요.SELECT * FROM hr.employees WHERE job_id LIKE 'SA%' AND salary >= 10000;
[문제7]
last_name의 세번째 문자가 'a' 또는 'e' 글자가 포함된 사원들의 정보를 출력해주세요.
SELECT * FROM hr.employees WHERE last_name LIKE '__a%' OR last_name LIKE '__e%';
[문제8]
employees 테이블에 있는 데이터 중에 job_id가 SA로 시작되고 salary 값은 10000이상 받고 2005년도에 입사한(hire_date)
사원들의 정보를 출력해주세요.SELECT * FROM hr.employees WHERE job_id LIKE 'SA%' AND salary >= 10000 AND hire_date BETWEEN '05/01/01' AND '05/12/31' ORDER BY 6;
- ORDER BY 절을 이용해서 정렬한다.
- ORDER BY 절은 SELECT문의 가장 마지막절에 기술한다.
- 기본값으로 오름차순(ASC Ascending) 정렬된다.
SELECT employee_id, salary FROM hr.employees ORDER BY salary asc;
- 내림차순(DESC Descending) 정렬
SELECT employee_id, salary FROM hr.employees ORDER BY salary desc;
- 열 별칭 표기법
SELECT employee_id, (salary*12)+(salary*12*coalesce(commission_pct,0)) as "annual_salary" FROM hr.employees ORDER BY "annual_salary" asc;
- 위치 표기법
SELECT employee_id, (salary*12)+(salary*12*coalesce(commission_pct,0)) as "annual_salary" FROM hr.employees ORDER BY 2 asc;
[문제9]
2006년도 입사한 사원의 employee_id, last_name, hire_date를 출력해주세요 단 last_name을 기준으로 오름차순정렬 해주세요.
SELECT employee_id, last_name, hire_date FROM hr.employees WHERE hire_date BETWEEN '2006/01/01' AND '2006/12/31' ORDER BY 2 asc;
[문제10]
80번 department_id 사원중에 commission_pct 값이 0.2 이고 job_id는 SA_MAN인 사원의 employee_id, last_name, salary를 출력해주세요.
단 last_name을 기준으로 오름차순정렬해 주세요.SELECT employee_id, last_name, salary FROM hr.employees WHERE department_id = 80 AND commission_pct = 0.2 AND job_id = 'SA_MAN' ORDER BY 2 asc;
[문제11]
salary가 5000 ~ 12000의 범위에 속하지 않는 모든 사원의 last_name 및 salary를 출력해주세요. 단 salary을 기준으로 내림차순 정렬하세요
SELECT last_name, salary FROM hr.employees WHERE salary < 5000 OR salary > 12000 ORDER BY 2 desc;
- 기능의 프로그램
- 단일행 함수
- 행당 조작하는 함수, 입력값으로 한 행의 필드값이 들어가서 출력값은 하나를 리턴한다.
- 문자함수, 숫자함수,날짜함수,형변환함수,일반함수
- 그룹(여러행)함수
- 행 그룹당 하나의 결과를 산출하도록 행 그룹을 조작하는 함수.
- 여러행의 값이 들어가서 출력값은 하나를 리턴한다.
SELECT lower(last_name) FROM hr.employees;
SELECT upper(last_name) FROM hr.employees;
SELECT initcap(last_name) FROM hr.employees;
WHERE절에 함수를 함부로 사용하면 풀테이블 스캔을 하기 때문에 신중하게 사용해야한다. (조회속도 느려짐)
SELECT
last_name || first_name,
concat(last_name,first_name),
upper(last_name || first_name || job_id),
lower(concat(concat(last_name,first_name),job_id)))
FROM hr.employees;
SELECT last_name, length(last_name) FROM hr.employees;
문자의 바이트값을 리턴하는 함수
전세계 출판되는 글자는 char, varchar2 타입의 컬럼에 입력할 수 있다.
영어는 1글자당 1byte, 한글은 1글자당 3byte
NLS_CHARACTERSET AL32UTF8
한글,한자,영어,일어 글자를 char,varchar2 타입의 컬럼에 입력할 수 있다. 2byte
NLS_CHARACTERSET KO16MSWIN949
SELECT last_name,lengthb(last_name) FROM hr.employees;
SELECT last_name,
instr(last_name,'a'),
instr(last_name,'a',1,1),
instr(last_name,'a',1,2)
FROM hr.employees
WHERE instr(last_name,'a',1,2)>0;