목록SQLD (65)
최보름달
뷰(view) 테이블은 실제로 데이터를 가지고 있는 반면, 뷰(view)는 실제 데이터를 가지고 있지 않다. 뷰는 단지 뷰 정의 (view definition)만을 가지고 있다. 질의에서 뷰가 사용되면 뷰 정의를 참조해서 DBMS 내부적으로 질의를 재작성 하여 질의를 수행한다. 뷰는 실제 데이터를 가지고 있지 않지만 테이블이 수행하는 역할을 수행하기 때문에 가상 테이블(virtual table)이라고도 한다. 뷰의 장점 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다. 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다. 보안성 : 직원의 급여정보와 같이 숨기고 싶은 정보가 존재한다면 뷰를 생성할 때 해당 컬럼을 빼고 생성해서 감출 수 ..

서브 쿼리 서브 쿼리란 하나의 sql 문 안에 포함되어 있는 또 다른 sql 문을 말한다. 서브쿼리는 알려지지 않은 기준을 이용한 검색을 위해 사용한다. 서브쿼리는 메인쿼리의 컬럼을 모두 사용할 수 있지만, 메인쿼리는 서브쿼리의 컬럼을 사용할 수 없다. 질의 결과에 서브쿼리 컬럼을 표시해야 한다면 조인 방식으로 변환하거나 함수, 스칼라 서브쿼리 등을 사용해야 한다. 서브쿼리 이용시 주의사항 서브쿼리를 괄호로 감싸서 사용한다. 서브쿼리는 단일행(single row) 또는 복수행(multiple row)비교 연산자와 함께 사용 가능하다. 단일행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하여야 하고 복수행 비교 연산자는 서브쿼리의 결과 건수와 상관 없다. 서브쿼리에서는 ORDER BY 를 사용하지 못한다..

셀프 조인이란, 동일 데이블 사이의 조인을 말한다. FROM 절에 동일 테이블이 두 번 이상 나타난다. 같은 테이블끼리 조인하는 것이므로 별칭(ALIAS)을 꼭 사용해야 한다. 예시 SELECT A.EMPNO 사원번호, A.ENAME 사원명, B.ENAME 관리자명 FROM EMP A, EMP B WHERE A.MGR = B.EMPNO 사원이라는 테이블에는 사원과 관리자가 모두 하나의 사원 개념으로 동일시하여 같이 입력되어 있다. 이것을 이용해서 "자신과 상위, 차상위 관리자를 같은 줄에 표시하라"는 문제를 셀프 조인을 이용해서 풀 수 있다. SELECT E1.ENAME 사원, E1.MGR 관리자, E2.MGR 차상위_관리자 FROM EMP E1, EMP E2 WHERE E1.MGR = E2.EMPNO ..

계층형 질의 (Hierarchical Query) 계층형 데이터를 조회할 때 사용하는 쿼리. 계층형 데이터란, 동일 테이블에 상위와 하위 데이터가 포함된 데이터를 의미한다. 예를 들면, 사원-관리자 테이블인 경우. 오라클 계층형 질의 SELECT ... FROM 테이블 WHERE condition AND condition... START WITH condition CONNECT BY [NOCYCLE] condition AND condition... [ORDER SIBLINGS BY column, column, ...] START WHIT 절은 계층 구조 전개의 시작 위치를 저장하는 구문이다. 루트를 지정한다. (액세스) CONNECT BY 절은 다음에 전개될 자식 데이터를 지정하는 구문이다. 자식 데이터..

JOIN을 이용하지 않고 연관된 데이터를 조회하는 방법이 있다. 집합 엽산자(Set Operator)를 사용하는 것이다. 집합 연산자는 여러 개의 질의 결과를 나열해서 결합하는 방식이다. 서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합칠 때 사용할 수 있다. 집합 연산자를 사용하려면 SELECT 절의 컬럼 수가 동일하고 데이터 타입이 호환 가능해야 한다. 집합 연산자 종류 UNION : 합집합. 모든 중복된 행을 하나로 합친다. UNION ALL : 합집합이지만, 중복된 행도 그대로 결과로 표시된다. INTERSECT : 교집합. EXCEPT : 차집합. (MINUS를 사용하기도 한다) 집합 연산자의 SQL문 형태 SELECT 컬럼명1, 컬럼명2, ... FROM 테이블1 집합..

OUTER JOIN INNER(내부) JOIN 과 대비해서 OUTER(외부) JOIN 이라고 불린다. JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용할 수 있다. LEFT OUTER JOIN 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중에 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어온다. 우측 테이블에 값이 없다면 NULL로 표시한다. LEFT JOIN 으로 OUTER 키워드를 생략해서 사용할 수 있다. STADIUM에 등록된 운동장 중 홈팀이 없는 경기장도 있다. 홈팀이 없는 경기장도 확인할 수 있게 출력하는 예시 SELECT S.NAME, S.STADIUM_ID, SEAT_COUNT, HOMETEAM_ID, TEAM_NAME FROM STADIUM S LEFT OUTER JOI..
CROSS JOIN 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 찾을 수 있다. 양쪽 테이블 집합의 M * N 건의 데이터 조합이 발생한다. SELECT ENAME, DNAME FROM EMP CROSS JOIN DEPT ORDER BY ENAME ; CROSS JOIN은 WHERE 절에서 JOIN 조건을 추가할 수 있다. 하지만 INNER JOIN과 같은 결과가 나오게 된다(..) SELECT ENAME, DNAME FROM EMP CROSS JOIN DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO ; 정상적인 데이터 모델이라면 CROSS JOIN이 필요한 경우는 많지 않다. kdata 한국데이터진흥원에서 출간한 SQL 전문가 가이드 2013 Edition을..
USING 조건절 FROM절의 USING 조건절을 이용하면 같은 이름을 가진 컬럼들 중에서 원하는 컬럼에 대해서만 EQUI JOIN을 할 수 있다. sql server에서는 지원하지 않는다. SELECT * FROM DEPT JOIN DEPT_TEMP USING (DEPTNO) ; USING 조건절에서도 테이블 이름이나 ALIAS, 접두사를 붙일 수 없다. ON 조건절 컬럼명이 다르더라도 JOIN 조건을 사용할 수 있다. SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO) ; -- 괄호는 없어도 됨. (옵셔널) WHERE 절과 혼용해서 사용할 수도 있다. SELECT E.EMPNO, E.ENAM..
INNER JOIN INNER JOIN은 OUTER(외부) JOIN과 대비해서 내부JOIN 이라고 하며 JOIN 조건에서 동일한 값이 있는 행만 반환한다. INNER JOIN 표시는 WHERE 절에서 사용하던 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 이나 ON을 필수적으로 같이 써야한다. SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO; -- INNER 는 JOIN의 디폴트 옵션이라서 생략할 수 있다. SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO; NATUR..
ANSI/ISO SQL에서 표시하는 FROM절의 JOIN 형태는 다음과 같다. INNER JOIN NATURAL JOIN USING 조건절 ON 조건절 CROSS JOIN OUTER JOIN ANSI/ISO SQL에서 규정한 JOIN문법은 WHERE절을 사용하던 기존 조인 방식과 차이가 있다. 표준은 FROM 절에서 명시적으로 조인을 명시하는 방식이다 INNER JOIN WHERE 절에서부터 사용하던 JOININNER JOIN의 디폴트 옵션이다. JOIN 조건에서 동일한 값이 있는 행만 방환한다. 디폴트 옵션이라 생략 가능하지만 CROSS JOIN, OUTER JOIN 과는 같이 사용할 수 없다. NATURAL JOIN INNER JOIN의 하위 개념으로 두 테이블 같 동일한 이름을 같은 모든 컬럼에 대..