1. SQL 명령문 개괄
1) 연산순서
- from - where - group by - having - select - order by
2) 종류
- DML: select, insert, delete, update
- DDL: alter, create, drop, truncate, modify
- TCL: rollback, commit
- DCL: grant, revoke
- 📌다음 중 DML이 아닌 것은?
2. select
1) distinct: 집약 기능
2) ⭐alias
- select절: as 생략가능, 컬럼명에 띄어쓰기 있는 경우(ex. "직원 번호")
- from절: as 사용불가
3) concat
- ||: oracle
- 인수는 반드시 2개 ex.concat(A, B)
3. 논리연산자
1) 종류
2) ⭐연산순위
- not => and => or
- ex) not 조건1 and 조건2 and not 조건3 or 조건4
=> 조건1-1 and 조건2 and 조건3-1 or 조건4
=> 조건new or 조건4
4. SQL 연산자
1) 논리 변환
- A between 1 and 2 : 1 <= A <= 2
- A in (1,2,3) : A=1 or A=2 or A=3
2)LIKE 🚩🚩🚩
- 와일드카드의 의미
- ex) _L% : 이름 두번째에 L이 들어가는 항목
3) escape
- 와일드카드인 _, %를 문자로 취급해주는 함수
- LIKE '%[문자][실제문자로인식시킬문자]%' ESCAPE '[문자]'
- ex) ename like '%@%' escape '@(아무 문자 가능)' => @ 다음에 오는 문자()를 문자로 취급
4) Rownum(oracle), Top(SQL server)
- Rownum의 특징: where절에서 rownum = 1 을 포함
- Top의 특징: select Top(n) 컬럼명 => 해당 컬럼의 상위 n개만 추출
- ex)
select empNo, sal
from emp
where rownum <= 3
order by sal desc
=> ⭐ order by가 가장 마지막에 실행됨( rownum에 의한 조건절이 실행되므로 먼저 결과값을 얻은 후 정렬)
5. NULL 🚩🚩🚩
1) 정의: 부재, 모르는 값
2) 산술연산
- null + 2 = null
- null - 4 = null
- null X null = null
3) 비교연산
- null = null
- null = 2
- 전부 알수없음(unknown)
- where절에 들어갈 경우 false와 같이 동작함
4) 정렬상 의미
- oracle: 무한대(null이 마지막에 나옴)
- SQL server: -무한대(null이 맨 처음에 나옴)
5) ⭐관련 연산
- NVL(값1, 값2): 값1이 null이면 값2, 아니면 값1
- NVL2(값1, 값2, 값3): 값1이 null이면 값3, 아니면 값2
- ISNULL(값1, 값2): 값1이 null이면 값2, 아니면 값1
- NULLIF(값1, 값2): 두 값이 같으면 null, 다르면 값1
- COALESCE(값1, 값2, 값3...): null이 아닌 첫번째 값
6. 정렬
1) ⭐정렬의 특성
- 가장 마지막에 실행
- 쿼리 성능이 느려질 수 있음
- null값과의 관계
2) 컬럼번호로 정렬
- 출력되는 컬럼의 수보다 큰 값은 불허(오류 발생)
3) 인수 2개의 정렬
4) 출력되지 않은 컬럼명으로 정렬 가능
- ex) select ename from emp order by sal (O)
7. 숫자 함수
- Round(숫자값, 반올림할 자릿수)
- ex) ROUND(1234.56789 ,1)
2) Ceil(oracle), Ceiling(SQL server)
8. 문자열 함수
1) upper, lower
2) LPad, Rpad
3) LTrim, RTrim
4) substr, nstr
9. 날짜 함수
1) To_char, To_date
- 📌 다음 중 데이터의 형변환을 일으키는 함수는?
2) 현재시간 출력
- Sysdate(oracle), Getdate()(SQL server)
3) 날짜 데이터 + 숫자
- ex) 날짜 + 100 => 100일 이후: 숫자는 기본적으로 day로 인식
10. DECODE, CASE
- case 함수 사용법
- case when 조건1 then 출력1 when 조건2 then 출력 2 end as xxx
- ⭐ else가 없을 경우: 조건1, 조건2를 만족하지 않는다면 null이 출력됨
11. 집계함수 🚩🚩🚩
| A | B | C | A+B+C |
|---|
| null | null | 1 | null |
| 3 | 2 | 2 | 7 |
| null | 2 | 3 | null |
sum(A) = 3
sum(B) = 4
count(A) = 1
count(*) = 3
sum(A+B+C) = 7 => 새로운 컬럼을 생성한 뒤 더해줘야 함
- ⭐sum(A)+sum(B)+sum(C) vs sum(A+B+C)
12. GROUP BY 🚩🚩🚩
- 집약 가능
- 그룹수준의 정보를 바꿈
- having: group by의 조건식
13. JOIN
1) natural join, using
- 중복된 컬럼이 사라지고 1개만 출력됨
- ⭐중복된 컬럼이 제일 앞에 등장함
- ⭐using의 경우 alias 사용 불가, natural join은 사용 가능
2) left outer join
- ⭐A left join B : Acoll = Bcoll(+)
3) 조인순서
- from A, B, C => A,B를 먼저 조인하고나서 C를 합침
14. 서브쿼리
1) ⭐위치에 따른 서브쿼리 사용법
- select절 => scalar
- from절 => inline view라고 함 메인쿼리의 컬럼 사용가능
- where절 => 거의 모든 서브쿼리(중첩 서브쿼리)
- group by절 => 사용불가
- having절 => 거의 모든 서브쿼리(중첩 서브쿼리)
- order by절 => scalar
2) 서브쿼리 동작방식
3) in, any/some, all, exist의 의미
15. 집합연산자
- union: 합집합(중복데이터 x)
- intersect: 교집합
- minus(Except): 차집합
- union all: 중복데이터 O, 정렬작업 X, 속도가 빠름
- union vs union all => union all이 더 빠름
16. DDL
1) ⭐TCL과의 연관성
- truncate(구조는 남아있음) vs drop(구조도 삭제)
- truncate(DDL) vs delete(DML)
17. DML
- insert, update, delete: TCL(commit, rollback)과의 연관성
- merge
📌 오류 상황은? ex) insert into A (1, 2, 3) values (1, 2)
18. ⭐제약조건
- PK: unique + not null
- unique
- not null
19. DCL
- grant
- revoke
- role의 특징(사람에게 부여, 권한이 필요...): 명령어는 아니고 object의 하나
- on, to
20. VIEW
- 독립성: 기존 테이블의 구조가 변경되어도 뷰를 따로 업데이트할 필요 없음
- 편리성
- 보안성
- SQL 명령문을 저장하므로 기존 테이블보다는 저장용량이 적음
21. 그룹함수 🚩🚩🚩
1) 종류
- roll up
- cube
- groupsets
- grouping(최근 출제빈도 낮음)
📌 다음 결과값을 도출하기 위해 사용한 그룹함수는?
2) 3개 함수의 비교
ex) rollup (A,B) != rollup (B,A)
ex) cube (A,B) == cube (B,A)
- null 다 찾기
- 총합행의 유무 찾기
- 없음: groupingsets
- 있음: roll up(한쪽 계층만 나옴), cube(양쪽 결과가 다 있음)
22. TCL
- commit, rollback
- auto commit off
- begin transaction
- DDL의 커밋기능은 없음