💡 목적
6강. SELECT 구문
- 검색 = 질의(query) = 추출(retrieve)
1. SELECT 와 FROM 구
- 대부분의 경우 FROM 구 사용해야 함.
- SELECT 1 처럼 상수 접근에는 안 써도 됨.
- 불명한 데이터는 NULL로 처리
2. WHERE 구
- 레코드 선택 시 추가 조건 지정
- 벤 다이어그램을 생각하면 쉽다
키워드
3. GROUP BY 구
- 그룹으로 나누면 합계, 평균 등 집계 연산 사용 가능해짐
- count, sum, avg, max, min
4. HAVING 구
- 결과 집합에 조건 걸어 선택하는 기능
WHERE
구는 레코드
에 조건 지정
HAVING
구는 집합
에 조건 지정
5. ORDER BY 구
- 레코드 출력 순서는
딱히 정해진 규칙 없다
- ORDER BY 로 명시적 지정 가능
6. 뷰, 서브쿼리
- 뷰
-
DB안에 저장
-
테이블과 달리 데이터 저장 X
-
SELECT 구문 저장 O
CREATE VIEW CountAddress (v_address, cnt)
AS
SELECT address, COUNT(*)
FROM Address
GROUP BY address;
SELECT v_address, cnt
FROM CountAddress;
- 익명 뷰
- 이거시 바로 서브쿼리다
- FROM 구에 직접 SELECT 구문을 걸어주는 것
- WHERE 절에 서브쿼리를 걸어
매칭
하는 방식으로 많이 사용
7강. 조건 분기, 집합 연산, 윈도우 함수, 갱신
1. SQL 과 조건 분기
- SQL은 조건 분기를 ‘문장’ 이 아닌
식
으로 함
- SQL 조건분기는 특정한 값(상수)를 리턴
- CASE 식 구문
- 단순 CASE 식 < 검색 CASE 식
- 식을 적을 수 있는 곳이라면 어디든 사용 가능
2. SQL 집합 연산
UNION - 합집합
- 두 개 테이블을 한 테이블로 합친 결과
- 중복 제거
- 중복 제거 싫다! → UNION ALL
INTERSECT - 교집합
- 양쪽 테이블에 공통 존재 레코드 출력
- 중복 제거
EXCEPT - 차집합
- 순서가 중요하다
- 뭐가 먼저 나오느냐에 따라 결과 달라짐
3. 윈도우 함수
- 성능에 큰 영향
- 집약 기능 없는 GROUP BY 구
- 집약 기능이 없다
- 출력 결과 레코드 수 = 테이블 레코드 수
- COUNT, SUM 같은 일반함수 사용 가능
- 윈도우 전용 함수 제공
- RANK() : 지정 키로 레코드에 순위 매김
- DENSE_RANK()
SELECT ADDRESS,
COUNT(*) OVER(PARTITION BY ADDRESS)
FROM ADDRESS;
4. 트랜잭션과 갱신
- DB 근본은
검색
이다
- SQL 갱신 작업
- INSERT - 삽입
- DELETE - 삭제
- 한번에 여러 개 레코드 단위 처리
- 삭제 대상은
필드가 아니라 레코드
- 일부 필드 제거는 update 사용
- delete * from : 안 됨
- delete 필드 from : 안 됨
- 삭제 후에도 테이블은 유지됨
- UPDATE - 갱신
- SET 구에 여러 필드를 입력하면 한 번에 여러 필드 갱신 가능
💡 문제
- SELECT 구문 입력, 출력 자료형은 무엇인가? 테이블(관계). 이외에는 아무것도 없음. 무조건 테이블이 입력이자 출력
- Address 테이블에서 성별 별로 나이 순위 (건너뛰기 있게)를 매기는 SELECT 구문은?