나를 기록하기/[자격증] SQLD

[SQLD] 2과목 2장 - SQL 활용(Q.65~91)

배고파요 2022. 5. 22. 20:11
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에 있는 조건에 맞는 데이터들만 거르고 나서 조인을 함.
  • 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 에 있는 테이블들을 먼저 붙이고, 
                조건절의 것을 맞춤.

 

 

 

 


📍  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 )

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