SQL 레벨업 - 2장 SQL 기초
6강 - SELECT 구문
검색 = 질의 = 추출
검색을 위해 사용하는 SQL 구문 -> SELECT 구문
1. SELECT 구와 FROM 구
'SELECT [컬럼이름] FROM [테이블 이름]
'SELECT 1'처럼 상수를 선택하는 경우와 같은 예외를 제외하고는 FROM 구를 반드시 입력해야함
2. WHERE 구
레코드를 선택할 때 추가적인 조건을 지정할 수 있는 방법
'필터 조건'
=, <>, >=, >, <=, < 와 같은 대표적인 연산자들이 있음
ex) SELECT name, age
FROM Address
WHERE address = '서울시'
OR age >= 30;
- WHERE구는 거대한 벤다이어그램
- IN으로 OR조건을 간단하게 작성할 수 있음
ex) WHERE address = '서울시'
OR address = '인천시'
OR address = '부산시';
=> WHERE address IN('서울시', '인천시', '부산시');
- NULL은 IS NULL 아니면 IS NOT NULL 둘 중 하나
ex) WHERE phone_num = NULL; (X)
=> WHERE phone_num IS NULL
3. GROUP BY 구
테이블에서 단순하게 데이터를 선택하는 것뿐만 아니라 합계 또는 평균 등의 집계 연산을 SQL 구문으로 할 수 있음
- SQL의 대표적인 집계 함수
COUNT, SUM, AVG, MAX, MIN
ex) SELECT address, COUNT(*)
FROM Address
GROUP BY address;
-GROUP BY (); -> 키를 지정하지 않는다는 뜻, GROUP BY구 자체를 생략하는 일이 많음
4. HAVING 구
WHERE구로 레코드를 선택하는 것과 거의 같음
- 선택된 결과 집합에 또다시 조건을 지정할 수 있음
WHERE구가 '레코드'에 조건을 지정한다면, HAVING 구는 '집합'에 조건을 지정하는 기능
5. ORDER BY 구
SELECT 구문의 결과 순서를 보장하기 위해 명시적으로 순서를 지정해주는 구
ex) 나이가 많은 순으로 정렬
-ASC: 오름차순 (기본), DESC: 내림차순
ex) ORDER BY age DESC
6. 뷰와 서브쿼리
뷰: 테이블과 같이 데이터베이스 안에 저장, 하지만 테이블과 달리 내부에 데이터를 보유하지는 않음
CREARE VIEW CountAddress (v_address, cnt)
AS
SELECT address, COUNT(*)
FROM Address
GROUP BY address;
-> 테이블의 모습을 한 SELECT 구문
SELECT v_address, cnt
FROM CountAddress;
=> SELECT v_address, cnt
FROM (SELECT address AS v_address , COUNT(*) AS cnt
FROM Address
GROUP BY address) AS CountAddress; -> 서브쿼리
7강 - 조건분기, 집합 연산, 윈도우 함수
1. SQL과 조건분기
CASE 식의 구문
CASE WHEN [평가식] THEN [식]
WHEN [평가식] THEN [식]
WHEN [평가식] THEN [식]
생략
ELSE [식]
END
CASE '식'은 SELCT, WHERE, GROUP BY, HAVING, ORDER BY 구와 같은 곳 같이 식을 적을 수 있는 곳이라면 어디든지 적을 수 있음
2. SQL의 집합연산
UNION : 합집합, 중복 제거
UNION ALL: 합집합, 중복 제거 x
INTERSECT: 교집합, 중복 제거
EXCEPT: 차집합, 중복 제거 -> 어떤 테이블을 먼저 적냐에 따라 결과가 달라짐
3. 윈도우 함수
집약 기능이 없는 GROUP BY 구, GROUP BY에서 자르기 기능만 있는 것 (GROUP BY는 자르기 + 집약 기능)
PARTITION BY라는 구로 수행
SELECT name,
age,
RANK() OVER (ORDER BY age DESC) AS rnk
FROM ADDRESS;
SELECT address,
COUNT(*) OVER(PARTITION BY address)
FROM Address;
4. 트랜잭션과 갱신
- INSERT로 데이터 삽입
INSERT INTO [테이블 이름] ([필드 1], [필드 2], [필드 3] ....)
VALUES ([값1], [값2], [값3] ......);
-DELETE로 데이터 제거
DELETE FROM Address
WHERE address = '인천시';
*DELETE name FROM Address -> 오류
*DELETE * FROM Address -> 오류
-UPDATE로 데이터 갱신
UPDATE [테이블 이름]
SET [필드 이름] = [식];
UPDATE 구문의 SET 구에 여러 개의 필드를 입력하면, 한 번에 여러 개의 값을 변경할 수 있음
UPDATE Address
SET (phone_nbr, age) = ('080-5848-XXXX', 20)
WHERE name = '빛나래';