SQL中級-復習5

2873 ワード

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:パフォーマンスを向上させるために、1つの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
SUBQUERYFACTORNG: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セクションと階層クエリー文を使用すると、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の2番目のパラメータの数字に従って数字の桁数を指定し、1番目のパラメータの値は先に星を出力し、残りの位置に星を埋めます.