[SQL 레벨업] 7강. 조건 분기,집합 연산, 윈도우 함수,갱신

가니·2023년 11월 7일
0

SQL레벨업

목록 보기
5/5

1. SQL 조건분기

CASE 식이란 ?

  • SQL에서 조건으로 분기하는 기능을 말합니다.
  • ‘단순 CASE 식’과 ‘검색 CASE 식’ 이렇게 두 종류로 나뉩니다.
  • When 구의 평가식으로 평가되고 조건이 맞으면 THEN 구에서 지정한 식이 리턴됩니다.
  • SELECT,WHERE,GROUP BY, HAVING,ORDER BY 구와 같은 곳 어디에나 적을 수 있습니다.
  • SQL 성능과도 굉장히 큰 관련이 있습니다.

시도의 이름을 큰 지역으로 구분하는 CASE 식

SELECT name,address,
				CASE WHEN address = '서울시' THEN '경기'
						 WHEN address = '인천시' THEN '경기'
						 WHEN address = '부산시' THEN '영남'
						 WHEN address = '속초시' THEN '관동'
						 WHEN address = '서귀포시' THEN '호남'
						 ELSE NULL 
				END AS district
FROM Address;

결과

+--------+---------+----------+
|  name  | address | district  |
+--------+---------+----------+
|   A    | 서울시  |   경기   |
|   B    | 인천시  |   경기   |
|   C    | 부산시  |   영남   |
|   D    | 속초시  |   관동   |
|   E    | 서귀포시 |   호남   |
|   F    | 대전시  |   NULL   |
+--------+---------+----------+



2. SQL의 집합 연산

UNION 합집합

  • 테이블의 합집합을 구할 때 사용합니다.
  • 합집합을 구할 때 중복된 레코드를 제거합니다.
  • 중복을 제외하고 싶지 않다면 ‘UNION ALL’ 을 이용합니다.
SELECT * FROM Address
UNION
SELECT * FROM Address2 ;
+--------+---------+------+------+--------------+
|  name  | address | age  | sex  |  phone_number |
+--------+---------+------+------+--------------+
|   A    | 서울시  |  30  |  M   | 123-456-7890  |
|   B    | 인천시  |  25  |  F   | 234-567-8901  |
|   C    | 부산시  |  35  |  M   | 345-678-9012  |
|   D    | 대구시  |  40  |  M   | 456-789-0123  |
|   E    | 대전시  |  28  |  F   | 567-890-1234  |
|   F    | 광주시  |  32  |  F   | 678-901-2345  |
+--------+---------+------+------+--------------+



INTERSECT 교집합

  • 테이블에서 교집합을 구할 때 사용합니다.
  • 중복된 레코드는 제외한다.
SELECT * FROM Address
INTERSECT
SELECT * FROM Address2 ;
+--------+---------+------+------+--------------+
|  name  | address | age  | sex  |  phone_number |
+--------+---------+------+------+--------------+
|   B    | 인천시  |  25  |  F   | 234-567-8901  |
|   D    | 대구시  |  40  |  M   | 456-789-0123  |
+--------+---------+------+------+--------------+



EXCEPT 차집합

  • 테이블에서 차집합을 구할 때 사용합니다.
  • 순서가 중요하다
  • 중복된 레코드는 제외한다.
SELECT * FROM Address
EXCEPT
SELECT * FROM Address2 ;
+--------+---------+------+------+--------------+
|  name  | address | age  | sex  |  phone_number |
+--------+---------+------+------+--------------+
|   A    | 서울시  |  30  |  M   | 123-456-7890  |
|   C    | 부산시  |  35  |  M   | 345-678-9012  |
+--------+---------+------+------+--------------+



3. 윈도우 함수

  • 윈도우 함수는 데이터를 가공하게 해준다.
  • 테이블을 자른다.
  • 집약 후 자르지 않아, 출력 결과 레코드 수가 입력되는 테이블의 레코드 수와 같다
    • group by 는 레코드 수가 다르다.
  • 윈도우 함수의 기본적인 구문은 집약 함수 뒤에 OVER 구를 작성하고, 내부에 키를 정하는 PARTITION BY 또는 ORDER BY를 입력한다.
SELECT address, COUNT(*) OVER(PARTITION BY address)
FROM Address2 ;
+---------+----------+
| address | count |
+---------+----------+
| 서울시  |    3     |
| 서울시  |    3     |
| 서울시  |    3     |
-----------------------
| 인천시  |    1     |
-----------------------
| 부산시  |    2     |
| 부산시  |    2     |
+---------+----------+

윈도우 함수 종류는 아래 블로그를 참고하면 좋을 것 같습니다 !

[SQL] 윈도우 함수 (WINDOW FUNCTION)



4. 트랜잭션과 갱신

기본적으로 SQL 갱신 작업은 3 종류로 분류한다.

  1. 삽입
  2. 제거
  3. 갱신


INSERT로 데이터 삽입

  • 기본적인 INSERT 구문
INSERT INTO [테이블] ([필드1],[필드2],[필드3] ... )
VALUES([1],[2],[3]);
  • multi-row insert
INSERT INTO [테이블] ([필드1],[필드2],[필드3] ... )
VALUES([A값1],[A값2],[A값3]),
			([B값1],[B값2],[B값3]),
			([C값1],[C값2],[C값3]);



DELETE로 데이터 제거

  • DELETE 구문의 기본 구조
DELETE FROM [테이블 이름];
  • 일부 레코드 제거
DELETE FROM [테이블 이름] WHERE [필드]=[];



UPDATE로 데이터 갱신

  • UPDATE 구문의 기본 구조
UPDATE [테이블 이름] SET [필드 이름] = [];
  • UPDATE 구문을 한 번 사용해서 갱신
1) 필드를 쉼표로 구분해서 나열
UPDATE [테이블 이름] SET [필드 이름1] = [1],[필드 이름2] = [2] WHERE [필드 이름3] = [3];

2) 필드를 괄호로 감싸서 나열 (DBMS에 따라 지원하지 않을 수 있음)
UPDATE [테이블 이름] SET ([필드 이름1],[필드 이름2]) = ([1],[2]) WHERE [필드 이름3] = [3];
profile
동료에게 선한 영향력을 전달할 수 있는 개발자가 되고싶닷 ദ്ദി(☆⸝⸝•̀ᴥ•́⸝⸝)

0개의 댓글