공부하자
SELECT문 본문
SELECT문의 기본 구조
SELECT [DISTINCT] [컬럼명]
FROM [테이블명]
WHERE [쿼리 조건]
GROUP BY [컬럼명] HAVING [집계함수 조건]
ORDER BY [컬럼명 ASC || 컬럼명 DESC];
1. 테이블 전체 조회
SELECT [컬럼명]
FROM [테이블명];
SELECT *
FROM employees;
> employees 테이블의 데이터 전체를 조회
- 컬럼명으로 조회
SELECT emp_no
FROM employees;
> employees 테이블의 emp_no 컬럼 전체 조회
2. 특정 조건으로 조회
SELECT [컬럼명]
FROM [테이블명]
WHERE [쿼리 조건];
- 특정 데이터와 일치하는 조회
SELECT *
FROM employees
WHERE emp_no = 10001;
> emp_no가 10001인 사원의 전체 데이터 조회
- 관계 연산자를 이용하여 조회
SELECT *
FROM employees
WHERE emp_no <= 10005;
- AND, OR로 여러 조건을 설정하여 조회
SELECT *
FROM employees
WHERE emp_no >= 10001
AND emp_no <= 10005;
> and는 모든 조건을 만족하는 데이터 조회
SELECT *
FROM employees
WHERE emp_no <= 10003
OR emp_no >= 499997;
> 조건 하나라도 만족하는 데이터 조회
- BETWEEN [A] AND [B]로 해당 범위 내의 데이터 조회
SELECT *
FROM employees
WHERE emp_no BETWEEN 10003 AND 10010;
- IN()으로 해당 데이터 조회
SELECT *
FROM employees
WHERE emp_no IN( 10003, 10010 );
- LIKE로 문자열의 내용을 조회
> "%"는 무엇이든 허용한다는 의미
SELECT *
FROM employees
WHERE first_name like( '%mi%' );
>"_"는 "_"의 개수만큼 허용.
만약 "__"인 경우, 2글자라면 무엇이든 허용한다는 의미
SELECT *
FROM employees
WHERE first_name like( '_yeon' );
SELECT *
FROM employees
WHERE first_name like( 'hyeo_' );
- ORDER BY로 정렬하여 조회
> ASC : 오름차순 정렬( 디폴트값)
SELECT *
FROM employees
ORDER BY emp_no ASC;
> DESC : 내림차순 정렬
SELECT *
FROM employees
ORDER BY emp_no DESC;
- DISTINCT로 중복값 없이 조회
SELECT DISTINCT dept_no
FROM dept_manager;
- recode단위로 중복되는 걸 제외시켜줌.
- LIMIT로 출력 개수를 제한하여 조회
SELECT *
FROM employees
LIMIT 5 OFFSET 10;
-> offset : 원하는 행의 수 만큼 건너 뛰고 그 다음 행부터 검색
3. 서브쿼리(SubQuery)
: 쿼리 안에 또다른 쿼리가 있는 형태
: WHERE절 외에도 서브쿼리 올 수 있음.
SELECT *
FROM dept_manager
WHERE
dept_no = (
SELECT dept_no
FROM dept_manager
WHERE emp_no = 110114
);
* 다중열 서브쿼리
: 여러개의 컬럼을 검색하는 서브 쿼리
: 서브 쿼리의 SELECT문에 여러개의 컬럼을 검색한다.
: 반드시 비교 대상 컬럼과 1:1 대응이 되어야 한다.
: 다중 열 서브쿼리는 주로 IN을 사용하지만 '=' 도 사용 가능함.
여러개의 컬럼을 검색하는 서브 쿼리
4. ANY / ALL
SELECT *
FROM dept_manager
WHERE dept_no = (
SELECT dept_no
FROM dept_manager
WHERE dept_no = 'd002'
);
=은 결과값이 1개가 나와야 하는데
서브쿼리의 결과가 2개 이상이라 에러 발생
- ANY
: 2개 이상의 결과 중 하나라도 만족하는 데이터 조회
SELECT *
FROM dept_manager
WHERE dept_no = ANY (
SELECT dept_no
FROM dept_manager
WHERE dept_no = 'd002'
);
- ALL
: 2개 이상의 결과 모두를 만족하는 데이터 조회
SELECT *
FROM dept_manager
WHERE dept_no = ALL (
SELECT dept_no
FROM dept_manager
WHERE dept_no = 'd002'
);
-> =은 뒤에 나오는 값이 1개여야 하고 앞에 조건과 일치해야함.
IN과 ANY는 여러개 결과가 나와도 1개만 만족한다면 데이터가 조회가 되고,
ALL은 여러개 데이터가 나오면 그 데이터 모두를 만족하는 데이터가 조회됨.
5. 집계 함수
- AVG(컬럼명) : 평균을 구합니다.
- MAX(컬럼명) : 최대값을 구합니다.
- MIN(컬럼명) : 최소값을 구합니다.
- COUNT(컬럼명) : 개수를 구합니다.
count - > 검색된 recode의 개수
select count(*)
from employees;
6. 그룹으로 묶어서 조회
GROUP BY 컬럼명 HAVING [집계함수조건 ]
SELECT dept_no, COUNT(emp_no) no
FROM dept_manager
GROUP BY dept_no
HAVING no > 2;
'Database' 카테고리의 다른 글
JOIN (0) | 2023.03.19 |
---|---|
함수 (0) | 2023.03.19 |
데이터 형식 (0) | 2023.03.19 |
INSERT, UPDATE, DELETE (0) | 2023.03.19 |
데이터 베이스 , SQL 기본 개념 (0) | 2023.03.19 |