doo_ 2023. 12. 15. 16:03

[오늘 할 일]

1. SQL 코드카타 풀기 (5문제)

2. SQLD 자격증 대비반 11주차 수강&12주차 수강

3. 아티클 스터디

 

[내용 정리]

1.SQL 코드카타 문제

-- CASE 활용
SELECT ORDER_ID, PRODUCT_ID, TO_CHAR(OUT_DATE,'YYYY-MM-DD'),
    CASE WHEN TO_DATE('2022-05-01','YYYY-MM-DD') >= OUT_DATE THEN '출고완료'
    WHEN OUT_DATE > TO_DATE('2022-05-01','YYYY-MM-DD') THEN '출고대기'
    ELSE '출고미정'
    END AS 출고여부
FROM FOOD_ORDER
ORDER BY ORDER_ID ASC

 

 

2. SQLD 자격증 대비반 수강

<11주차>

[JOIN]
- 여러 테이블을 연결 또는 결합하여 조회하는 것을 말한다.
1. EQUI JOIN(등가 조인)
- 두 테이블 간에 칼럼의 값들이 서로 같은 경우 두 데이터를 하나의 데이터로 합치는 JOIN을 말한다.
+) WHERE 절에 = 를 사용하여 표현
+) 테이블에 ALIAS 사용가능.

-- 기본구조
SELECT 테이블1.칼럼명, 테이블2.칼럼명, ... 
FROM 테이블1, 테이블2 
WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2;

2. NON EQUI JOIN 비등가 조인
- 서로 정확하게 일치하는 것이 아니라 특정 범위 내에 있는 경우 합칠 때 사용한다. 연산자 = 가 아닌 BETWEEN, LIKE, >, >=, <, <= 연산자들을 사용한다.

EX. 사원의 급여마다 등급을 나눈 테이블을 조회할 때

+) 설계상의 이유로 NON EQUI JOIN이 안되는 경우도 있다.

- JOIN조건이 정의되지 않았거나 잘못된 경우, 또는 하나의 테이블이 다른 테이블의 모든 행과 조인된다면 Cartesain Product(카티션 곱) 즉 모든 행의 조합이 나온다.


3. 3개 이상 TABLE JOIN

- JOIN하고자 하는 테이블을 차례대로 작성해서 합치면 된다.
- 다만, 모든 테이블을 정규화시켜 JOIN하면 시스템의 부하가 발생할 수 있다. 그래서 무작정 정규화하기 보다는 역정규화를 통해 최적의 테이블 구조를 만드는 것이 중요하다.

 

[표준 조인]

1. 대표적인 JOIN 6가지 방식
1) INNER JOIN
- 조건이 일치하는 행만 반환 (EQUI 조인이라고도 함)
- 반드시 USING 조건절이나 ON 조건절을 사용해줘야 한다.

SELECT 테이블1.칼럼1, 테이블2.칼럼2, ..
FROM 테이블1 [INNER] JOIN 테이블2 
	ON 테이블1.칼럼 = 테이블2.칼럼;

2) NATURAL JOIN (Oracle 에서만 지원)
INNER JOIN의 하위 개념으로, 두 테이블의 조인되는 칼럼을 별도로 지정하지 않아도 동일한 이름을 갖는 모든 칼럼들에 대해 자동으로 EQUI JOIN을 수행한다.
주의할 점은 칼럼에 ALIAS나 테이블 명과 같은 접두사를 칼럼에 붙일 수 없다. 그리고 동일한 칼럼명이라도 다른 데이터 유형이 저장되어 있다면 제대로 동작되지 않게 된다.

SELECT 칼럼1, 칼럼2, ..
FROM 테이블1 NATURAL JOIN 테이블2;

 

3) USING 조건절
FROM 절에서 사용하는 조건절로, 같은 컬럼명 중에서 원하는 칼럼에 대해서 선택적으로 EQUI JOIN을 한다.
주의할 점은 칼럼에 ALIAS나 테이블 명과 같은 접두사를 칼럼에 붙일 수 없다. 다만 JOIN칼럼이 아닌 다른 칼럼은 ALIAS 사용이 가능하다.

SELECT 칼럼1, 칼럼2, ..
FROM 테이블1 JOIN 테이블2 
	USING (EXPR);

4) ON 조건절 
칼럼명이 다르더라도  JOIN이 가능하다.

SELECT 칼럼1, 칼럼2, ..
FROM 테이블1 JOIN 테이블2 
	ON 1.COL = 2.COL;

5) CROSS JOIN
PRODUCT 개념으로 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 결과로 나타낸다. 
평소에는 CROSS JOIN이 필요한 경우는 많지 않지만, 간혹 튜닝이나 리포트를 작성하기 위해 의도적으로 사용하는 경우가 있습니다. 

SELECT 칼럼1, 칼럼2
FROM 테이블1 CROSS JOIN 테이블2

 

6) OUTER JOIN
 "OUTER 집합을 기준으로 JOIN"한다는 의미다. OUTER JOIN은 기준이 되는 테이블에 따라 LEFT OUTER JOIN / RIGHT OUTER JOIN 으로 나뉘며 기준이 되는 테이블이 조인 수행시 무조건 드라이빙 테이블이 된다.

SELECT 테이블1.칼럼1, 테이블2.칼럼2, ..
FROM 테이블1 LEFT|RIGHT [OUTER] JOIN 테이블2 
	ON 테이블1.칼럼 = 테이블2.칼럼;

[계층형 질의와 표준 셀프 조인]
1. 계층형 질의란?
계층형 데이터는 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 의미한다.
EX. 회사 상위 부서와 하위 부서
> 저장하는 조회하는 방법이 기존과 다르다.

2. ORACLE 계층형 질의
- START WITH
- CONNECT BY 
- PRIOR A AND B (순방향 OR 역방향)

+) START WITH / PRIOR 부분 해석하는게 핵심
-> 나중에 문제풀이를 통한 이해가 필요할 듯..

3. 셀프 조인(SELF JOIN)
셀프 조인(SELF JOIN)은 동일한 테이블 간의 JOIN을 의미한다. FROM 절에서 동일 테이블을 두 번 이상 JOIN 테이블로 명시하면 된다.

 

<12주차>

[집합 연산자] SET OPERATOR
SELECT를 통해 얻은 결과 간의 집합 연산을 수행하는 연산자다.
UNION / UNION ALL / INTERSECT / MINUS(EXCEPT)

SELECT job FROM emp WHERE deptno = 10
UNION / UNION ALL / INTERSECT / MINUS(EXCEPT)
SELECT job FROM emp WHERE deptno = 20;

[서브쿼리]
- 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 의미한다.
- 조인과 다르게 자유로운 형태의 참조가 아닌 특정 조건에 맞게 참조 해야 한다.
- 알려지지 않은 기준을 이용한 검색을 위해 사용된다. (데이터베이스에서 복잡한 정보를 가져올 때 사용)

SELECT A.EMPNO
     , A.ENAME
	 	, A.DEPTNO
		, A.SAL 
FROM EMP A
WHERE A.SAL >= (
			SELECT AVG(X.SAL) 
			FROM EMP X
			WHERE X.DEPTNO = A.DEPTNO
			GROUP BY X.DEPTNO );

[기타 서브쿼리와 뷰]
1. 위치별 서브쿼리
- 스칼라 서브쿼리 : SELECT 절에 위치한 서브쿼리
- 인라인뷰 서브쿼리 : FROM 절에 위치한 서브쿼리
나머지는 '서브쿼리'라 부름

2. 뷰(VIEW)
- 데이터베이스에서 저장된 정보를 좀 더 편리하게 보여주기 위해 사용되는 가상의 테이블
- 이미 존재하는 데이터 테이블을 사용하여 원하는 정보를 필터링하거나 정리하여 새로운 '가상' 테이블을 만드는 것.

EX.

CREATE VIEW v_p_nation AS -- V_라고 표현하는 건 VIEW라고 표시하기 위함 (암묵적 관례)
SELECT p.first_name,
       p.last_name,
       p.main_sport_id,
       p.height,
       p.weight,
       n.country_name,
       n.population
FROM participant p, nation n
WHERE p.nation_id = n.nation_id;