SELECT문이란?
- DML 중 하나로 저장되어 있는 데이터를 조회하기 위해 사용하는 쿼리
SELECT문의 기본 구조
SELECT와 FROM절 이외는 필요시에만 작성
SELECT [DISTINCT] [컬럼명]
FROM [테이블명]
WHERE [쿼리 조건]
GROUP BY [컬럼명] HAVING [집계함수 조건]
ORDER BY [컬럼명 ASC || 컬럼명 DESC]
LIMIT [n] OFFSET [n]
;
- 테이블의 모든 데이터 조회 : *(Asterisk)
SELECT *
FROM employees
;
SELECT
emp_no
,birth_date
FROM employees
;
WHERE 절
- 특정 조건의 데이터만 조회
- 비교 연산자 : =, >=, <=, >, <
SELECT *
FROM employees
WHERE emp_no = 10009
;
SELECT *
FROM employees
WHERE first_name = 'Mary'
;
SELECT *
FROM employees
WHERE birth_date >= 19600101
;
SELECT
emp_no
, first_name
, last_name
FROM employees
WHERE hire_date >= 19901225
;
AND, OR 연산자
SELECT *
FROM employees
WHERE
emp_no >= 10005
AND emp_no <= 10009;
SELECT *
FROM employees
WHERE
first_name = 'Mary'
AND last_name = 'Piazza';
SELECT *
FROM employees
WHERE
(
first_name = 'Mary'
OR first_name = 'Moto'
)
AND last_name = 'Piazza';
BETWEEN 연산자
SELECT * FROM employees WHERE emp_no >= 10005 AND emp_no <= 10009;
SELECT * FROM employees WHERE emp_no BETWEEN 10005 AND 10009;
IN 연산자
SELECT * FROM employees WHERE emp_no = 10005 or emp_no = 10009;
SELECT * FROM employees WHERE emp_no IN(10005, 10009);
LIKE 절
- 문자열의 내용을 조회(대소문자 구분 X)
- % : 글자수 상관없이 조회
- _ : 언더바의 개수 만큼 글자의 개수가 제한되서 조회
SELECT * FROM employees WHERE first_name LIKE('%ge');
SELECT * FROM employees WHERE first_name LIKE('ge%');
SELECT * FROM employees WHERE first_name LIKE('%ge%');
SELECT * FROM employees WHERE first_name LIKE('ge____');
ORDER BY 절
- 데이터를 정렬해서 조회
- ASC : 오름차순, defalt값, 생략가능
- DESC : 내림차순
SELECT *
FROM employees
ORDER BY birth_date DESC, hire_date ASC;
SELECT *
FROM employees
WHERE
(hire_date >= 19900101 OR hire_date <= 19951231)
AND gender = 'F'
ORDER BY last_name, first_name;
DISTINCT 키워드
SELECT DISTINCT emp_no
FROM salaries
WHERE emp_no = 10001
;
GROUP BY 절, HAVING 절
- 그룹으로 묶어서 조회 (COUNT)
MAX : 젤 큰 값
SUM : 합계
MIN : 최소값
AVG : 평균
GROUP BY [그룹으로 묶을 컬럼]
HAVING [집계함수조건]
SELECT
gender
, COUNT(gender)
FROM employees
GROUP BY gender;
SELECT
title
, COUNT(title)
FROM titles
WHERE to_date >= 20240305
GROUP BY title HAVING title LIKE('%Engineer%')
;
SELECT
emp_no
,MAX(salary)
FROM salaries
GROUP BY emp_no HAVING MAX(salary) >= 80000;
AS
SELECT
emp_no
,MAX(salary) AS max_sal
FROM salaries
GROUP BY emp_no HAVING MAX(salary) >= 80000;
LIMIT, OFFSET
SELECT *
FROM employees
LIMIT 5 OFFSET 10;
SELECT *
FROM employees
LIMIT 10,5 ;
SELECT emp_no, MAX(salary) max_sal FROM salaries
GROUP BY emp_no
ORDER BY max_sal DESC
LIMIT 1;
SELECT emp_no, salary
FROM salaries
WHERE to_date >= 20240305
ORDER BY salary DESC
LIMIT 5;