SQL 중급 - 복습 5
CREATE TABLE DEPT3 (DEPTNO NUMBER(10), DNAME VARCHAR2(14) CONSTRAINT DEPT3_DNAME_UN UNIQUE, LOC VARCHAR2(10))
UNIQUE : 중복된 데이터가 있어서는 안 되는 컬럼에 사용. PRIMARY KEY와는 다르게 NULL값을 입력할 수 있다.
CREATE TABLE DEPT5 (DEPTNO NUMBER(10) ,DNAME VARCHAR2(14) ,LOC VARCHAR2(10) CONSTRAINT DEPT5_LOC_NN NOT NULL)
NOT NULL : 테이블의 특정 컬럼에 NULL 값 입력을 허용하지 않음.
CREATE TABLE EMP6 ( EMPNO NUMBER(10) , ENAME VARCHAR2(20) , SAL NUMBER(10) CONSTRAINT EMP6_SAL_CK CHECK (SAL BETWEEN 0 AND 6000))
CHECK : 특정 컬럼에 특정 조건의 데이터만 입력되거나 수정되도록 제한을 거는 제약
WITH JOB_SUMSAL AS (SELECT JOB , SUM(SAL) as 토탈 FROM emp GROUP BY job) SELECT job , 토탈 FROM job_sumsal WHERE 토탈 > (SELECT AVG(토탈) FROM job_sumsal)
WITH : 검색 시간이 오래 걸리는 SQL이 하나의 SQL 내에서 반복되어 사용될 때 성능을 높이기 위한 방법으로 사용한다.
WITH job_sumsal AS (SELECT job , SUM(sal) 토탈 FROM emp GROUP BY job) , deptno_sumsal as (SELECT deptno , SUM(sal) 토탈 FROM emp GROUP BY deptno HAVING SUM(sal) > (SELECT AVG(토탈) + 3000 FROM job_sumsal) ) SELECT deptno , 토탈 FROM deptno_sumsal
SUBQUERY FACTORING : WITH 절의 쿼리의 결과를 임시 테이블로 생성하는 것을 지칭한다.
WITH LOOP_TABLE as (SELECT level as NUM FROM dual CONNECT BY level <= 9) SELECT '2' || 'X' || NUM || '=' || 2 * NUM as "2단" FROM LOOP_TABLE
CONNECT BY LEVEL : 임의의 갯수만큼 행을 리턴하고 싶을 때 사용한다.WITH LOOP_TABLE as (SELECT level as NUM FROM dual CONNECT BY level <= 9), GUGU_TABLE as (SELECT level + 1 as GUGU FROM dual CONNECT BY level <= 8) SELECT TO_CHAR(A.NUM) || 'X' || TO_CHAR(B.GUGU) || '=' || TO_CHAR(B.GUGU * A.NUM) as 구구단 FROM LOOP_TABLE A, GUGU_TABLE B
WITH절과 계층형 질의문을 이용하면 이중 루프(LOOP)문을 SQL로 구현할 수 있다.
WITH LOOP_TABLE as (SELECT LEVEL as NUM FROM dual CONNECT BY LEVEL <= 8) SELECT LPAD('★', num, '★') as STAR FROM LOOP_TABLE
LPAD를 이용하여 NUM에서 출력되는 숫자만큼 별을 채워 넣어 출력한다. LPAD의 두번째 인자의 숫자만큼 자릿수를 잡고 첫번째 인자 값이 별을 먼저 출력하고 나머지 자리에 별을 채워 넣는다.
Author And Source
이 문제에 관하여(SQL 중급 - 복습 5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gugu_dragon/SQL-중급-복습-5저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)