코딩 테스트에서는 조회 문제가 나오기 때문에
DML에서 기본적인 데이터 검색의 형식에 대해 정리해보겠다.
- 이렇게 세가지 테이블이 있다고 가정
1. 기본 구조
기본 검색
SELECT 열_리스트
FROM 테이블리스트
WHERE 조건;
2. 일반 형식
- all, distinct 연산자
SELECT [All | DISTINCT] 열리스트
FROM 테이블 리스트
GROUP BY 열리스트 (HAVING 조건)
ORDER BY 열리스트 [ASC | DEDC];
3. 검색 결과에서 레코드의 중복 제거
- distinct → 중복 제거
SELECT DISTINCT DEPT
FROM STUDENT;
4. 테이블의 열 전부 검색
→ asterisk
SELECT *
FROM STUDENT;
5. 조건 검색
- 4학년인 컴퓨터학과 학생의 sno와 sname 조회
SELECT SNO, SNAME
FROM STUDENT
WHERE DEPT='컴퓨터' AND YEAR=4;
6. 순서를 명세하는 검색
- sno가 같을 경우, cno 기준으로 오름차순 정렬
SELECT SNO, CNO
FROM ENROL
WHERE MIDTERM>=90
ORDER BY SNO DESC, CNO ASC;
7. 산술식과 문자 스트링이 명세된 검색
- ‘중간시험=’이라는 데이터가 들어간 시험 열 추가
SELECT SNO AS 학번, '중간시험='AS 시험, MIDTERM +3 AS 점수
FROM ENROL
WHERE CNO = 'C312';
8. 복수 테이블로부터의 검색
- 조인 연산과 동일한 결과
SELECT STUDENT.SNAME, STUDENT.DEPT, ENROL.GRADE
FROM STUDENT, ENROL
WHERE STUDENT.SNO = ENROL.SNO AND ENROL.CNO = 'C413';
9. 자기 자신의 테이블에 조인하는 검색
- join 연산자 사용 가능
SELECT S1.SNO, S2.SNO
FROM STUDENT S1, STUDENT S2
WHERE S1.DEPT=S2.DEPT AND S1.SNO<S2.SNO;
10. 집단 함수(Aggregate Function)를 이용한 검색
- COUNT, SUM, AVG, MAX, MIN
SELECT COUNT(*) AS 학생 수
FROM STUDENT;
11. Group by를 이용한 검색
- cno로 그룹 지어 select
SELECT CNO, AVG(FINAL) AS 기말평균
FROM ENROL
GROUP BY CNO; -- CNO 별로 그룹 지어 그 그룹 별로 SELECTION
12. HAVING을 이용한 검색
- 튜플의 수가 3개 이상인 그룹에서만 평균을 구함
SELECT CNO, AVG(FINAL) AS 평균
FROM ENROL
GROYP BY CNO
HAVING COUNT(*) >= 3 -- 그룹 안에 속하는 TUPLE 평균을 구함
-- 튜플의 수가 3개 이상인 그룹에서만 평균
13.부속 질의어(Subquery)를 사용한 검색
- IN | NOT IN
SELECT SNAME
FROM STUDENT
WHERE SNO IN ( SELECT SNO FROM ENROL WHERE CNO='C413';
14. LIKE를 사용하는 검색
- LIKE ‘C%C’ : C로 시작하고 C로 끝나는 문자열
- LIKE ‘C%’ : C로 시작하는 CNO
SELECT CNO, CNAME
FROM COURSE
WHERE CNO LIKE 'C%'; -- C로 시작하는 CNO
15. NULL을 사용한 검색
- null 값을 찾을 경우 is null 사용
SELECT SNO, SNAME
FROM STUDENT
WHERE DEPT IS NULL;
16. EXISTS를 사용한 검색
- 단항 연산자, 뒤가 공집합이 아니면 참, 맞으면 거짓
SELECT SNAME
FROM STUDENT
WHERE EXISTS (SELECT * FROM ENROL WHERE SNO=STUDENT.SNO AND CNO='C413');
17. UNION이 관련된 검색
- UNION, UNION ALL
- UNION : 쿼리 결과의 합, 중복된 ROW 제거
- UNION ALL : 중복 포함.
SELECT SNO
FROM STUDENT
WHERE YEAR = 1
UNION
SELECT SNO
FROM ENROL
WHERE CNO = 'C324';
'코딩 > MySQL' 카테고리의 다른 글
[MySQL] 코딩테스트 대비 문법 정리 (1) | 2023.10.05 |
---|---|
[SQL] GROUP BY vs PARTITION BY (0) | 2023.10.03 |
[SQL] 조건문 (1) | 2023.10.02 |
[SQL] JOIN 연산 (1) | 2023.10.02 |