Search

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

생성일
2022/10/31 13:18
태그
1.
조건분기
CASE 식의 구문
단순 CASE 식
검색 CASE 식 : 단순 CASE 식의 기능을 모두 포함하고 있으므로 검색 CASE 식만 기억해도 충분
CASE WHEN [평가식] THEN [] WHEN [평가식] THEN [] WHEN [평가식] THEN [] 생략 ELSE [] END
SQL
복사
CASE 식의 작동 :
처음에 있는 WHEN 구의 평가식부터 평가되고 조건이 맞으면 THEN 구에서 지정한 식이 리턴되며 CASE 식 전체가 종료됨. 만약 조건이 맞지 않으면,
다음 WHEN 구로 이동해 같은 처리를 반복하고 마지막 WHEN 구까지 반복 했는데도 조건이 맞는 경우가 없다면 ‘ELSE’에서 지정한 식이 리턴되며 끝이남
SELECT name, address, CASE WHEN address = '서울시' THEN '경기' WHEN address = '인천시' THEN '경기' WHEN address = '부산시' THEN '영남' WHEN address = '속초시' THEN '관동' WHEN address = '서귀포시' THEN '호남' ELSE NULL END AS distirict FROM Address;
SQL
복사
CASE 식의 강력함 점은 ‘식’이라는 것 → 식을 적을 수 있는 곳이라면 어디든지 적을 수 있음. (SELECT, WHERE, GROUP BY, HAVING, ORDER BY)
CASE 식은 기본적인 SQL 구문이지만, 데이터 변환에 굉장히 많이 사용되고 있음. 복잡한 구문과 CASE 식을 조합해서 사용하는 경우가 많으므로, CASE 식을 어떻게 사용하는지 확실하게 기억해 두는 것이 좋음.
SQL의 성능과도 굉장히 큰 관련이 있음.
2.
SQL의 집합연산
UNION으로 합집합 구하기 :
UNION은 합집합을 구할 때 중복된 레코드를 제거(*중복을 제외하고 싶지 않다면 UNION ALL 옵션 사용)
SELECT * FROM Address UNION SELECT * FROM Address2;
SQL
복사
INTERSECT로 교집합 구하기 :
SELECT * FROM Address INTERSECT SELECT * FROM Address2;
SQL
복사
EXCEPT로 차집합 구하기 :
집합의 뺄셈 연산에서도 교환 법칙이 성립하지 않기 때문에 주의가 필요함.(순서가 중요)
SELECT * FROM Address EXCEPT SELECT * FROM Address2;
SQL
복사
3.
윈도우 함수
집약 기능이 없는 GROUP BY 구
집약 함수 뒤에 OVER 구를 작성하고, 내부에 자를 키를 지정하는 PARTITION BY 또는 ORDER BY를 입력하는 것
RANK() 함수 : 지정된 키로 레코드에 순위를 부팅는 함수
DENSE_RANK() 함수 : RNAK() 함수는 숫자가 같으면 같은 순위로 표시하고 건너 뛰고 표시하는데 건너 뛰는 순위를 구할 때 사용
SELECT address, COUNT(*) OVER (PARTITION BY address) FROM Address; SELECT name, age, RANK() OVER (ORDER BY age DESC) AS rnk FROM Address; SELECT name, age, DENSE_RANK() OVER (ORDER BY age DESC) AS dense_rnk FROM Address;
SQL
복사
4.
트랜잭션과 갱신
INSERT로 데이터 삽입 :
필드 리스트와 값 리스트는 같은 순서로 대응하게 입력해야 함.(* 잘 못 입력하면 오류 발생)
레코드(행) : 데이터를 등록하는 단위
NULL : ‘’로 입력하면 문자열로 인식하기 때문에 ‘’없이 입력
기본적인 INSERT 구문
INSERT INTO [테이블 이름] ([필드1], [필드2], [필드3] ....) VALUES([1], [2], [3] ....); INSERT INTO Address (name, phone_nbr, address, sex, age) VALUES ('小川', '080-3333-XXXX', '서울시', '남', 30);
SQL
복사
DELETE로 데이터 제거 :
삭제 대상이 레코드이기 때문에 필드 제거는 오류 발생(* 기호도 오류)
WHERE 구문을 사용하여 일부 데이터 제거 가능
DROP TABLE : 테이블 자체를 삭제할 때 사용
DELETE 구문의 기본구조
DELETE FROM [테이블 이름]; DELETE FROM Address WHERE address = '인천시';
SQL
복사
UPDATE로 데이터 갱신 :
테이블의 데이터 갱신 시 사용
UPDATE 구문의 기본 구조
UPDATE [테이블 이름] SET [필드 이름] = []; UPDATE Address SET phone_nbr = '080-5848-XXXX', age = 20 WHERE name = '인성';
SQL
복사