728x90
📕 2과목 - SQL 기본 및 활용
📌 2장 - SQL 활용
+) 2023.03.11 추가.
📍 순수 관계 연산자 ?
- SELECT, PROJECT, JOIN, DIVIDE
- DIVIDE 연산은 현재 사용되지 않음.
- PROJECT 연산은 수직 연산이라고도 함.
- 빨간색 :: SELECT
- 파란색 :: PROJECT
NAME | 국어 | 영어 | 수학 |
김땡땡 | 90 | 95 | 100 |
이두둥 | 80 | 90 | 95 |
박띠용 | 85 | 80 | 100 |
📍 66번 ? ( https://www.youtube.com/watch?v=T7d1EPc662c )
- N
📍 67번 ?
❗️ 문제 67번의 3번. ::
제품과 생산라인 엔터티에는 생산제품과 대응되지 않는 레코드는 없다. ❌ ❌
➡️ A004 처럼 "제품"에는 있는데, "생산"을 안 하는 경우가 있을 수 있음.
📍 JOIN 에서 USING조건절 ? (Q,70)
- USING 조건절을 이용해서 JOIN 하는 경우, JOIN 컬럼에 대해서는 ALIAS 나 테이블 이름과 같은 접두사 붙일 수 없음.
- SELECT T.REGION_NAME, T.TEAM_NAME, STADIUM_ID, S.STADIUM_NAME
- FROM TEAM T INNER JOIN STADIUM S
- USING(STADIUM_ID);
- +) 2023.03. 11 추가.
- USING을 쓰는 것은 오라클에서만 가능.
- "어떤 컬럼을 이용해서 조인을 할 것이다." 라는 명시만 해주면 됨.
- ➡️ 두 테이블에 공통적으로 있는 컬럼을 적어주기만 하면 됨.
- 옵티마이져
- SELECT A.ID, A.NAME, A.DEPT_ID, B.DEPT_ID, B.DEPT_NAME
FROM A JOIN B ON A.DEPT_ID = B.DEPT_ID; - 원리 :: 조인을 하기 전에 ON에 있는 조건에 맞는 데이터들만 거르고 나서 조인을 함.
- SELECT A.ID, A.NAME, A.DEPT_ID, B.DEPT_ID, B.DEPT_NAME
- EQUI JOIN
- SELECT A.ID, A.NAME, A.DEPT_ID, B.DEPT_ID, B.DEPT_NAME
FROM A, B
WHERE A. DEPT_ID = B.DEPT_ID; - 원리 :: FROM 에 있는 테이블들을 먼저 붙이고,
조건절의 것을 맞춤.
- SELECT A.ID, A.NAME, A.DEPT_ID, B.DEPT_ID, B.DEPT_NAME
📍 CROSS JOIN ?
- 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말함.
- 카티시안 곱(Cartesian Product)이 발생함. (곱집함)
- 결과는 양쪽 집합의 M*N 건의 데이터 조합이 발생함.
- 제품(제품코드, 제품명);
- 생산(생산코드, 생산명);
- select count(*) from 제품; ---> 3
- select count(*) from 생산; ---> 6
- SELECT * FROM 제품 CROSS JOIN 생산;
- 제품 테이블과 생산 테이블을 조인하게 되면, 3*6 = 18 행이 나옴.
📍 72번 ?
- 고객 A LEFT OUTER JOIN 단말기 B
- ON (A.고객번호 IN (11000, 12000) AND A.단말기ID = B.단말기ID)
- LEFT OUTER JOIN 이므로, 고객 테이블이 기준이 되어 데이터를 모두 출력하되, ON절에 기술한고객번호 11000, 12000 에 대해서는 조인하고, 나머지 단말기와 OS 정보를 NULL 로 출력.
- ❗❗ A LEFT OUTER JOIN B 이면 일단 A테이블의 모든 데이터는 다 나와야함.
📍 73번 ?
- FULL OUTER JOIN
- RIGHT OUTER JOIN UNION ALL LEFT OUTER JOIN
- 서브쿼리에 EXISTS 나 NOT EXISTS 가 들어갈 때, 굳이 컬럼 값을 활용할 필요가 없으면 임의의 숫자나 문자들을 넣어 SELECT 문을 할 수 있다.
📍 77번 ?
- (+) 로 OUTER JOIN 을 대신할 수 있음.
- (+) 가 들어가 있으면 ON 조건절로 같이 들어가줘야함.
- (+) 가 없는 쪽이 기준 테이블이 됨.
📍 79번 ?
- SQL Server ::: EXCEPT --> 차집합
- ORACLE ::: MINUS
- A, B 는 PK
- SELECT A, B FROM TAB1
- EXCEPT
- SELECT A, B FROM TAB2;
- --> TAB1에만 있는 데이터를 출력하는 쿼리임.
- A EXCEPT B
- A 와 B 를 먼저 구해보고, 기준을 A 테이블로 놓고, B와 겹치는 것을 뺌.
- EXCEPT 는 차집합이라서,
- NOT IN , NOT EXISTS 로 대체 해서 처리 가능함.
- 중복된 행은 하나의 행으로 만듦.
- ② SELECT TAB1 A, TAB1.B FROM TAB1
- WHERE TAB1.A NOT IN (SELECT TAB2.A FROM TAB2)
- AND TAB1.B NOT IN (SELECT TAB2.B FROM TAB2);
- ④ SELECT TAB1 A, TAB1.B FROM TAB1
- WHERE NOT EXISTS (SELECT 'X' FROM TAB2 WHERE TAB1.A = TAB2.A AND TAB1.B = TAB2.B);
- 2번은 NOT IN 을 사용했지만, PK컬럼 A,B 에 대해 각각 NOT IN 연산을 수행해서 틀리게 됨.
- +) 2023.03.12 추가.
- 2번의 NOT IN 은 SQL-SERVER에서는 작동하지 않음.
- not in 이 없나봄.
📍 80번 ?
- ( https://www.youtube.com/watch?v=P0NYkj7Ckuc )
📍 82번 ?
- ORDER BY 1, 2
- == ORDER BY select에있는첫번째 컬럼 ASC, select에있는두번째 컬럼 DESC
- 1 = ASC
- 2 = DESC
- SELECT ENAME AAA, JOB BBB FROM EMP ORDER BY 1, 2;
- ENAME 에 대해서 오름차순 정렬
- JOB 에 대해서 내림차순 정렬
- 컬럼 별칭은 가장 첫번째에 나온 것을 기준으로 가져가는 것 같음.
📍 83번 ?
- +) 2023.03.12 추가.
📍 일반 집합 연산자를 SQL과 비교 ?
- UNION 연산
- UNION 기능
- INTERSECTION 연산
- INTERSECT 기능
- DIFFERENCE 연산
- SQL Server ::: EXCEPT 기능
- ORACLE ::: MINUS 기능
- PRODUCT 연산
- CROSS JOIN 기능 (카티시안 곱(Cartesian Product))
📍 계층형 쿼리 START WITH ~ CONNECT BY PRIOR~ ORDER BY SIBLINGS BY~ (87번) ?
- START WITH C2 IS NULL
- 1 NULL A
- CONNECT BY PRIOR C1 = C2
- (PRIOR)이 전에 있었던 C1 의 값이 C2 와 같은 것
- 전에 있었던 C1의 값 ---> 1
- 1 = C2 인 것
- 2 1 B 와 3 1 C
- ORDER SIBLINGS BY C3 DESC
- 같은 레벨에 있을 때는 C3 로 내림차순 하라.
- --> 3 1 C
- --> 2 1 B
- 그렇게 되면 쿼리의 결과는
- 1 NULL A
- 3 1 C
- 2 1 B
- 4 2 D
- 순방향전개 ( PRIOR 자식 = 부모 )
- 부모 노드로부터 자식 노드 방향으로 전개하는 것.
- 역방향전개 ( PRIOR 부모 = 자식 )
- 자식 노드로부터 부모 노드 방향으로 전개하는 것.
- 루트 노드의 LEVEL 의 값은 " 1 "
- 오라클의 계층형 질의문에서 WHERE 절은 모든 전개를 진행한 이후 필터 조건으로서 조건을 만족하는 데이터만을 추출하는데 활용됨.
- 계층형 쿼리에서 PRIOR 키워드는 SELECT, WHERE, CONNECT BY 절에서 사용가능.
- +) 2023.03.12 추가.
- 계층형 쿼리에서 START WITH 에 해당 되는 행은 WHERE절의 조건에 관계없이 무조건 SELECT 됨.
+) 2023.03.12 추가.
📍 계층형 질의문 ? (Q.90)
- 1️⃣ SQL SERVER에서의 계층형 질의문은 CTE(Common Table Expression) 를 재귀 호출함으로써 계층 구조를 전개한다.
- 실제로 CTE라는 키워드가 코드(쿼리문) 안에 들어가는 것은 아니지만.
- ❗️❗️ SQL SERVER에는 START WITH, CONNECT BY PRIOR. 가 없음 ❗️❗️
- ➡️ WITH구문으로 재귀 호출함으로써. 계층 구조를 만듦.
- 2️⃣ SQL SERVER 에서의 계층형 질의문은 앵커 멤버를 실행하여 기본 결과 지합을 만들고 이후 재귀 멤버를 지속적으로 실행한다.
- 3️⃣ 오라클의 계층형 질의문에서 WHERE절은 모든 전개를 진행한 이후 필터 조건으로서 조건을 만족하는 데이터만을 추출하는데 활용된다.
- ➡️ 순서 :: FROM - START WITH, CONNECT BY - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
- 4️⃣ ❌ 오라클의 계층형 질의문에서 PRIOR 키워드는 CONNECT BY 절에만 사용할 수 있으며 'PROR 자식 = 부모' 형태로 사용하면 순방향 전개로 수행된다. ❌
- ➡️ PRIOR 키워드는 SELECT, WHERE, CONNECT BY 절에서 사용 가능.
728x90
'나를 기록하기 > [자격증] SQLD' 카테고리의 다른 글
[SQLD] 2과목 2장 - SQL 활용(Q.105 ~ 111) (0) | 2022.05.27 |
---|---|
[SQLD] 2과목 2장 - SQL 활용(Q.92~127) (0) | 2022.05.24 |
[SQLD] 2과목 1장 - SQL 기본(Q.52~63) (0) | 2022.05.21 |
[SQLD] 2과목 1장 - SQL 기본(Q.36~51) (0) | 2022.05.21 |
[SQLD] 2과목 1장 - SQL 기본(Q.22~35) (0) | 2022.05.17 |