Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions 2week-sql-basic/youngjo-summary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# 2장. SQL 기초

## SELECT 구문

---

### SELECT 구와 FROM 구
- SELECT 구문 = SELECT 구(필수) + FROM 구(필수는 아님. 예외 조건 있음.)
- FROM 구를 입력하지 않아도 되는 경우
- 특정 테이블에서 데이터를 꺼내는 작업이 아닌 경우
- 불완전한 정보 = 공란 = NULL

### WHERE 구
- 특정한 조건을 갖는 레코드를 검색하고 싶을 때 사용
- 다양한 연산자들이 있고, 연산자의 종류는 아래와 같다.

| 연산자 | 의미 | 종류 |
|:----------------:|:------------------:|:--:|
| = | ~ 와 같음 | 비교 |
| <> | ~ 와 같지 않음 | 비교 |
| \>= | ~ 이상 | 비교 |
| \> | ~ 보다 큼 | 비교 |
| <= | ~ 이하 | 비교 |
| < | ~ 보다 작음 | 비교 |
| AND | 하나라도 False이면 False | 논리 |
| OR | 하나라도 True이면 True | 논리 |
| IN (값1, 값2, ...) | 선택하고자 하는 값들 | 논리 |
| NOT | 부정 | 논리 |
| IS NULL | 공란 | 논리 |

그 밖에 산술 연산자, 비트 논리 연산자 등이 있다.

### GROUP BY 구
- 특정 컬럼의 값이 같은 레코드 들을 묶어 하나의 그룹으로 만든다.
- 장점 : 집계 함수 사용 가능

### HAVING 구
- GROUP BY 구를 사용한 결과에 조건을 걸어주는 구

### ORDER BY 구
- 순서를 보장하게 해주는 구
- ASC(생략): 오름차순, DESC: 내림차순

### 뷰와 서브쿼리
- 뷰: SELECT 구문을 저장한 것 / 서브쿼리: FROM 구에 직접 지정한 SELECT 구문
- 뷰는 컴퓨터 상의 바로가기 느낌이다. 실행 파일은 아니지만 해당 파일의 바로가기를 클릭함으로써 실행 파일이 실행이 되는 느낌
- 결국 뷰나 서브쿼리를 사용하는 목적은 복잡한 SELECT 문을 단순화시켜 사용함 + 동적으로 쿼리를 사용 가능

## 조건 분기, 집합 연산, 윈도우 함수, 갱신

---

### SQL과 조건 분기
- CASE 구문
- Java의 switch 조건문과 매우 유사함
- WHEN 구의 조건이 맞으면 THEN 구에서 지정한 값이 리턴되는 방식
- 조건들이 맞지 않을 경우 ELSE 에서 지정한 식 리턴

### SQL의 집합 연산
- UNION
- 합집합의 개념(중복 레코드 제거)
- 만약 중복 레코드도 포함하고 싶다면 UNION ALL 사용

- INTERSECT
- 교집합의 개념(중복 레코드 제거)
- 양쪽으로 공통되는 레코드 출력

- EXCEPT
- 차집합의 개념
- 테이블 작성 순서에 따라 결과값이 달라지므로 주의해야한다.

### 윈도우 함수
GROUP BY : 집약 + 자르기 / 윈도우 함수 : 자르기
- 보통 윈도우 함수 뒤에 OVER (PARTITION BY or ORDER BY) 를 사용하여 자른다.
- 대표적으로 COUNT, SUM, RANK(건너뛰기), DENSE_RANK(건너뛰지 않기), ROW_NUMBER 등이 있다.

### 트랜잭션과 갱신
- INSERT(삽입)
- 테이블에 데이터를 보관(레코드)
```sql
INSERT INTO [테이블 명] ([필드1], [필드2], ...) VALUES ([값1], [값2], ...);
```

- DELETE(삭제)
- 하나의 레코드만 삭제하는 것이 아닌 테이블 내의 모든 레코드를 삭제(특정 조건의 레코드 삭제 가능).
- 테이블은 남아있음.
```sql
DELETE FROM [테이블 명];

또는

DELETE FROM [테이블 명] WHERE [조건];
```

- UPDATE
- 등록된 데이터를 변경(조건별 레코드 수정 가능)
```sql
UPDATE [테이블 명] SET [필드 명] = [식];

또는

UPDATE [테이블 명] SET [필드 명1] = [식1], [필드 명2] = [식2] WHERE [조건];
```