- 집합 연산자
- 형식
- SELECT * FROM 회원정보 WHERE 이름 = '김흥직';
- UNION <- 여기에옴
- SELECT * FROM 회원정보 WHERE 이름 = '김달수';
- UNION - 합집합(중복제거)
- UNUNION ALL - 합집합(중복허용)
- INTERSECT - 교집합(중복제거)
- EXCEPT - 차집합(중복제거) - MINUS
- 형식
- JOIN : 관련된 컬럼 기준으로 결합 (즉, ID lch3067, ktf3067 이 회원 정보쪽 테이블에 존재 / 가입정보 테이블에 ID 컬럼에 lch3067, ktf3067 존재하야한다.
- 정규화를 통해서 잘게 잘게 쪼갠 테이블을 다시 합친다.
- 내부 조인(Inner Join) - 공통 데이터만 추출
- 형식 : SELECT * FROM 회원정보 INNER JOIN 주문 ON 회원정보.회원번호 = 주문.회원번호
- 자연 조인(Natural Join) : 컬럼이 어떤거 부터 올지 모름(시험장에서는 아무거나 컬럼 입력해서 쓰기)
- 형식 : SELECT * FROM R1 NATURAL JOIN R2;
- 전체 외부 조인(Full Outer Join) : 일치한거 외는 NULL값으로 표현
- 왼쪽 외부 조인 : L1.COL1 = R1.COL1 에서 L1테이블만 쓰기
- 오른쪽 외부 조인 : L1.COL1 = R1.COL1 에서 R1테이블만 쓰기
- 곱집합(Crocss Join) : 4 * 2
- 서브 쿼리
- 스칼라 서브쿼리 : SELECT 절에 위치
- 형식 : SELECT 이름, ( SELECT 주분번호 FROM 주문 WHERE 주문.주문번호 = 회원정보.회원번호) AS 주문번호 FROM 회원정보 WHERE 회원번호 = '0003';
- 인라인뷰 서브쿼리 : FROM 안쪽에 테이블 형태로 만들어진다. 즉, FROM 뒤에 SELECT문이 온다. * SELECT문은 테이블 표형태이니...
- 중첩 서브쿼리 : WHERE 쪽에 위치함
- 다중행
- IN : 값이 존재하는지?
- EXISTS : 행이 있는지?
- ANY : 하나만 만족(다중으로 결과값이 나올때.. ANY가 없으면, 에러 발생)
- ALL : 모두 만족
- 다중행
- 그룹 함수
- 집계함수
- 그룹함수
- GROUP BY
- 스칼라 서브쿼리 : SELECT 절에 위치
[SQL 문제 주의점]
1. ; 세밀콜론 붙히기
2. , 붙혀서 구분하기
3. 문자는 '' 홀따움표 붙히기
4. NOT EXISTS와 EXISTS는 형식상 컬럼이 존재하지 않으며, 행의 존재유무 파악이다.
5. NULL은 비교가 안된다.
6. count(*)으로 하면, Null이던, 상관없이 무조건 null 포함해서 가져온다.
7. count(특정컬럼)이 들어오면, Null을 제외하고 갯수를 가져온다.