SQLD
-
단일행 서브쿼리(Single Row SubQuery), 다중행 서브쿼리(Multi Row SubQuery), 다중 칼럼 서브쿼리(Multi Column SubQuery), 연관 서브쿼리(Correlated Subquery)SQLD/SQL 기본과 활용 2020. 8. 27. 21:29
# 서브쿼리가 좋을지 조인이 좋을지는 옵티마이저가 판단하여 실행하므로, 서브쿼리로 인한 성능저하는 걱정하지 않아도 된다. # 하지만, 서브쿼리로 테이블 접근횟수가 늘어나는 것은 지양해야한다. # 서브쿼리는 괄호로 감싸서 기술한다. 1. 단일행 서브쿼리 - 리턴값이 1개 이하인 서브쿼리 - 단일행 비교연산자와 사용 ex) =, , SQL> SELECT PNAME, POSITION FROM PLAYER WHERE HEIGHT SELECT T_NAME FROM TEAM WHERE TEAM_ID IN (SELECT TEAM_ID FROM PLAYER WHERE PNAME = '이천수'); # 조인이 아니다. 단순 연산일뿐 # 실행결과 (서브쿼리의 리턴행은 2개이고 그 두개 행중에 속한다면 출력) T_NAME -..
-
OUTER JOIN 심화 (ANSI/ISO SQL 표준방식의 OUTER JOIN)SQLD/SQL 기본과 활용 2020. 8. 27. 19:51
참고1 ) (+)로 조인시, 불명확하게 보일 수도 있고, DMBS 마다 문법이 다르며, (+)가 누락된 조인 및 검색 조건 존재시 INNER JOIN으로 수행, FULL OUTER JOIN 미지원 등 불편함이 있다. 참고2 ) 그리하여, ANSI/ISO SQL 표준 방식의 OUTER JOIN 문법을 사용하면 높은 호환성을 가질 수 있다. 본문은 ANSI/ISO SQL 표준 방식을 사용할 것이다. (FROM절에서 정의한다.) 수행에 사용한 데이터 1. LEFT OUTER JOIN - 조인 수행시 좌측 테이블이 기준이 되며 먼저 읽는다. 우측 테이블에서 조인 대상 데이터를 읽어온다. - 즉, 우측 테이블에서 조인 조건을 만족하는 값이 없으면, NULL 값을 반환한다. - LEFT JOIN 으로 OUTER 키..
-
CROSS JOINSQLD/SQL 기본과 활용 2020. 8. 27. 19:06
1. CROSS JOIN - 일반 집합 연산자의 PRODUCT 개념으로 테이블 간 조인 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 출력한다. - 두개의 테이블에 대한 CROSS PRODUCT의 결과는 M*N 건의 데이터 조합이 발생한다. ex) (EMP 6건 x DEPT 4건 = 총 24건의 데이터 출력) - WHERE 절에서 조인 조건을 추가할 경우 INNER JOIN과 같은 결과를 얻는다. (사용 의미가 없다) - 좌측 테이블 기준으로 곱연산을 한다. (좌측 테이블 데이터 기준으로 출력) - 보통 튜닝과 리포트 작성, 데이터 웨어하우스의 차원(Dimension)을 fact칼럼과 조인하기전에 모든 차원의 cross product를 먼저 구할때 유용하게 사용된다. SQL> SELECT A.EN..
-
다중 테이블 조인(ON 조건절, WHERE 절)SQLD/SQL 기본과 활용 2020. 8. 27. 18:48
# EMP 테이블에는 ENAME, DEPTNO, CNAME DEPT 테이블에는 DEPTNO, DNAME, CNAME COMP 테이블에는 CNAME, CDIAL, CLOC 컬럼만이 있다고 가정한다. # ON 조건절 다중 테이블 조인 SQL> SELECT A.ENAME, A.DEPTNO, B.DNAME, C.CNAME, C.CDIAL FROM EMP A JOIN DEPT B ON B.DEPTNO = A.DEPTNO JOIN COMP C ON C.CNAME = B.CNAME; # WHERE 절 다중 테이블 조인 SQL> SELECT A.ENAME, A.DEPTNO, B.DNAME, C.CNAME, C.CDIAL FROM EMP A, DEPT B, COMP C WHERE B.DEPTNO = A.DEPTNO AN..
-
표준 조인(INNER JOIN, NATURAL JOIN,FROM 조건절, USING 조건절, ON 조건절)SQLD/SQL 기본과 활용 2020. 8. 27. 18:25
1. INNER JOIN (FROM 조건절) - 조인 조건을 만족하는 행들만 반환 - 공통된 컬럼은 각 테이블별로 두번씩 출력 - SELECT 절에 * 사용시 테이블 순서대로 칼럼 출력 2. NATURAL JOIN (FROM 조건절) - 두 테이블 간에 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN - 공통된 컬럼은 ALIAS나 접두사를 붙일수 없음. ex) DEPTNO가 A,B 모두 공통적으로 가지고 있는 칼럼이라면 SELECT 절에서 A.DEPTNO 불가 - 공통된 컬럼은 하나만 출력 - SELECT 절에 * 사용시 공통된 컬럼이 제일 먼저 출력 (첫번째 칼럼으로 출력) - SQL Server 에서 지원하지 않음. (Oracle은 지원) 3. USING 조건절 - USING 조건절은 원하는..
-
SQL JOIN(EQUI JOIN, NON-EQUI JOIN, OUTER JOIN)SQLD/SQL 기본과 활용 2020. 8. 24. 16:04
# JOIN의 기준이 되는 테이블은 JOIN 조건을 기술할때 나열되는 두 테이블중 뒤에 위치하는 테이블이다 SQL> SELECT A.PLAYER_NAME, A.TEAM_ID B.TEAM_NAME FROM PLAYER A, TEAM B WHERE B.TEAM_ID = A.TEAM_ID; # A.TEAM_ID를 기준으로 B테이블과 비교하며 조인 # 실행결과 PLAYER_NAME TEAM_ID TEAM_NAME ----------------------------------------------- 고종수 K07 포항 문창수 K06 대구 이청용 K01 서울 1. EQUI JOIN - 보통 'PK-FK' 관계로 이루어져, 조인조건이 '='로 성립하는 조인 (조인 칼럼이 1:1 맵핑이 가능한 경우) SQL> SELE..
-
SQL) GROUP BY 절, HAVING 절, ORDER BY절, SELECT 문장 실행 순서SQLD/SQL 기본과 활용 2020. 8. 20. 17:13
# 실행 순서 : FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY (옵티마이저가 SYNTAX, SEMANTIC 에러를 점검하는 논리적 순서) (물리적 순서는 실행계획에 의해 정해짐) 1. GROUP BY절 # GROUP BY 절은 FROM, WHERE절 뒤에 위치하며, 데이터들을 소그룹에 대한 항목별로 통계 정보를 얻을 때 추가로 사용된다. /* SELECT [DISTINCT] COL1 [ALIAS] FROM TAB1 [WHERE condition1] [GROUP BY exp1] [HAVING condition2] [ORDER BY exp2 [ASC | DESC]]; */ # 집계함수는 WHERE 절에 올 수 없다 # 실행순서 : FROM -> WH..
-
SQL) 집계함수SQLD/SQL 기본과 활용 2020. 8. 20. 17:02
# 집계함수는 하나의 결과를 리턴 COUNT(*) NULL 값을 포함한 행의 수 출력 (PK 때문에 전체칼럼이 NULL인 행은 존재 할 수 없으므로) COUNT(exp1) 표현식중 NULL 값을 제외한 행의 수 출력 SUM([DISTINCT | ALL] exp1) 표현식의 NULL 값을 제외한 합계 출력 AVG([DISTINCT | ALL] exp1) 표현식의 NULL 값을 제외한 평균 출력 MAX([DISTINCT | ALL] exp1) 표현식의 최댓값 출력 (문자, 날짜 데이터 타입도 사용가능) MIN([DISTINCT | ALL] exp1) 표현식의 최소값을 출력 (문자, 날짜 데이터 타입도 사용가능) STDDEV([DISTINCT | ALL] exp1) 표현식의 표준 편차 출력 VARIANCE/V..