『やさしくわかるSQL』各書店にて好評発売中! オラクルが好き!
SQL言語文例集100
Top やさしくわかるSQL RDBMS入門 チューニング SQL相談室 Pro*COBOL入門 COBOL相談室 サブルーチン

OracleRDBMSに特化した『やさしくわかるSQL
各書店にて好評発売中!

(2004/04/28) 文例集を追加し100例になりました。 

(2004/02/23) SQL言語について基礎から覚えたいが時間がない方のために、目的別にSQL命令の文例集を作っていこうと思います。(とりあえず50例です)

問合せの基本
複雑な問合せ

== 表の結合 ==
トランザクション処理

== 追加 ==
雑知識
データベース管理

== オブジェクトの作成/変更/削除 ==


戻る



表の全列、全行を検索したい
  文法
  SELECT *
    
FROM
{表名};
  例
 SELECT * FROM emp;


表の一列のみを検索したい
  文法
  SELECT {列名}
    FROM {表名};
  例
 SELECT ename FROM emp;


表の指定した列のみ検索したい
  文法
  SELECT {列名1} [, {列名n} ... ]
    FROM {表名};
  例
 SELECT empno, ename, job FROM emp;


同じ値を省いて検索したい
  文法
  SELECT DISTINCT {列名}
    FROM {表名};
  例
 SELECT DISTINCT job FROM emp;


列名を変更したい
  文法
  SELECT {列名} {別名}
    FROM {表名};
      または
  SELECT {列名} "{別名}"
    FROM {表名};
  例
 SELECT ename 従業員名 FROM emp; 
      または
 SELECT ename "従業員名" FROM emp;


特定の行を検索したい
  文法
  SELECT {列名}
    FROM {表名}
    WHERE {条件式};
  ※{条件式} = {列,値,式} {比較演算子} {列,値,式}
  例
 SELECT * FROM emp WHERE empno = 123;


複数の条件を指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {条件式1} AND {条件式2};
      または
  SELECT {列名} ...
    FROM {表名}
    WHERE {条件式1} OR {条件式2};
  例
 SELECT * FROM emp WHERE deptno = 30 AND job = 'SALESMAN';


範囲指定の条件を指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {列名} BETWEEN {下限値} AND {上限値};
  例
 SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000;


複数の候補の中からいずれかと一致する条件を指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {列名} IN ( {値1}, {値n}, ... );
  例
 SELECT * FROM emp WHERE empno IN ( 7566, 7900 );
    または
 SELECT * FROM emp WHERE job IN ( 'SALESMAN', 'CLERK' );


前方一致の条件を指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {文字型の列名} LIKE '{文字列}%';
  例
 SELECT * FROM emp WHERE ename LIKE 'S%';


あいまい検索の条件を指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {文字型の列名} LIKE '%{文字列}%';
  例
 SELECT * FROM emp WHERE ename LIKE'%O%';


後方一致の条件を指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {VARCHAR2型の列名} LIKE '%{文字列}';
  例
 SELECT * FROM emp WHERE ename LIKE '%S';


NULL値の列を検索したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {列名} IS NULL;
  例
 SELECT * FROM emp WHERE comm IS NULL;


NULL値以外の列を検索したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {列名} IS NOT NULL;
  例
 SELECT * FROM emp WHERE comm IS NOT NULL;


列を計算して検索したい
  文法
  SELECT {計算式}
    FROM {表名}
   [ WHERE {条件式} ];
  ※{計算式} = {列,値,式} {算術演算子} {列,値,式}
  例
 SELECT empno, ename, sal, comm, sal+comm;


ヌルを0として計算したい
  関数
  NVL( {列名}, {ヌルの場合の代替値} )
  例
 SELECT empno, ename, sal, comm, sal+NVL( comm );


並び替えをしたい
  文法
  SELECT {列名}...
    FROM {表名}
   [ WHERE {条件式} ]
    ORDER BY {並び替える列名} [ASC];
  例
 SELECT * FROM emp ORDER BY empno; 
      または
 SELECT * FROM emp ORDER BY empno ASC;


大きい順に並び替えたい
  文法
  SELECT {列名} ...
    FROM {表名}
   [ WHERE {条件式} ]
    ORDER BY {並び替える列名} DESC;
  例
 SELECT * FROM emp ORDER BY empno DESC;


複数の並び替えを指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
   [ WHERE {条件式} ]
    ORDER BY {並び替える列名1} { [ASC] | DESC },
             {並び替える列名n} { [ASC] | DESC }...;
  例
 SELECT * FROM emp ORDER BY deptno, sal DESC;   (部署順給与の多い順)


計算式を並び替えたい
  文法
  SELECT {列名}
    FROM {表名}
   [ WHERE {条件式} ]
    ORDER BY {計算式} [ASC | DESC]; 
      または
  SELECT {計算式}
    FROM {表名}
   [ WHERE {条件式} ]
    ORDER BY {列番号} [ASC | DESC];
  例
 SELECT * FROM emp ORDER BY sal+NVL(comm,0); 
      または
 SELECT empno, ename, sal, comm, sal+NVL(comm,0) FROM emp ORDER BY 5;


現在の日付を取得したい
  関数
  SYSDATE                  (初期値は'YYYY-MM-DD'形式です)
  TO_CHAR( SYSDATE, 'YYYY/MM/DD' )
                       ↑ 書式を変更する場合
  TO_NUMBER( TO_CHAR( SYSDATE, 'YYYYMMDD' )) 
                       ↑ 数値8桁にて取得
  例
 SELECT sysdate FROM dual; 
      または
 SELECT TO_CHAR( sysdate, 'YYYY/MM/DD' ) FROM dual; 
      または
 SELECT TO_NUMBER( TO_CHAR( sysdate, 'YYYYMMDD' )) FROM dual;


現在の時刻を取得したい
  関数
  TO_CHAR( SYSDATE, 'HH24:MI:SS' ) ← 24時間表記の文字8桁
  TO_CHAR( SYSDATE, 'HH:MI:SS' )   ← 12時間表記の文字8桁
  例
 SELECT TO_CHAR( sysdate, 'HH24:MI:SS' ) FROM dual;


曜日が知りたい
  関数
  TO_CHAR( {日付型の列名}, 'D' )  ← 1:日, 2:月, 3:火の順
  TO_CHAR( {日付型の列名}, 'DY' ) ← 漢字一文字
  例
 SELECT TO_NUMBER( TO_CHAR( sysdate, 'D' )) FROM dual;
      または
 SELECT TO_CHAR( sysdate, 'DY' ) FROM dual;


日付の差より日数が知りたい
 計算式
  {日付型1} - {日付型2} → {日数}
  例
 SELECT sysdate - hiredate FROM emp;
      または
 SELECT TRUNC( sysdate - hiredate ) FROM emp;   (整数化:切り捨て)


ある日数後の日付が知りたい
 計算式
  {日付型} + {日数} → {日付} 
      または
  {日付型} - {日数} → {日付}
  例
 SELECT hiredate+30 FROM emp;


文字を連結したい
 計算式
  {文字型の列名 | '文字列'} || {文字型の列名 | '文字列'}
  例
 SELECT ename || job FROM emp; 
      または
 SELECT ename || '様' FROM emp;


四捨五入したい
  関数
  ROUND( {列名または計算式} )
  例
 SELECT ROUND( sysdate - hiredate ) FROM emp;


切捨てしたい
  関数
  TRUNC( {列名または計算式} )
  例
 SELECT TRUNC( sysdate - hiredate ) FROM emp;


切り上げしたい
  関数
  TRUNC( {列名または計算式} + 0.9 )
  例
 SELECT TRUNC( sysdate - hiredate + 0.9 ) FROM emp;


文字列の一部分を切り出したい
  関数
  SUBSTR( {文字列}, {先頭位置}, {文字数} )
 
                 ↑ {先頭位置}, {文字数}の単位は文字
  SUBSTRB(
{文字列}, {先頭位置}, {文字数} )
 
                 ↑ {先頭位置}, {文字数}の単位はバイト
  例
 SELECT ename, SUBSTR( ename, 1, 5 ) FROM emp;


文字列の文字数を求めたい
  関数
  LENGTH( {文字列} )  ← 戻り値の単位は文字数
  LENGTHB(
{文字列} ) ← 戻り値の単位はバイト
  例
 SELECT ename, LENGTH( ename ) FROM emp;


文字列を検索したい
  関数
  INSTR( {文字列}, {検索キーワード} )  ← 戻り値の単位は文字数
  INSTRB(
{文字列}, {検索キーワード} ) ← 戻り値の単位はバイト
  例
 SELECT ename, INSTR( ename, 'S' ) FROM emp;


左右のスペースを削除したい
  関数
  LTRIM( {文字列} )  ← 左スペースの削除
  RTRIM(
{文字列} )  ← 右スペースの削除
  例
 SELECT TO_CHAR( sal, '9,990' ), LTRIM( TO_CHAR( sal, '9,990' )) FROM emp;


大文字または小文字に統一したい
  関数
  UPPER( {文字列} )   ← 大文字化
  LOWER(
{文字列} )  ← 小文字化 
  例
 SELECT ename, LOWER( ename ) FROM emp;


ある日付の月末が知りたい
  関数
  LAST_DAY( {日付型の列名} )
  例
 SELECT ename, hiredate, LASTDAY( hiredate ) FROM emp;


日付の差より月数が知りたい
  関数
  MONTHS_BETWEEN( {日付型の列名1}, {日付型の列名2} )
  例
 SELECT ename, sysdate, hiredate, MONTHS_BETWEEN( sysdate, hiredate )
   FROM emp; 
      または
 SELECT ename, sysdate, hiredate,
     TRUNC( MONTHS_BETWEEN( sysdate, hiredate ))
   FROM emp;


ある月数後の日付が知りたい
  関数
  ADD_MONTHS( {日付型の列名}, {月数} )
  例
 SELECT ename, hiredate, ADD_MONTHS( hiredate, 3 ) FROM emp; 
      または
 SELECT sysdate, ADD_MONTHS( sysdate, 1 ) FROM dual;


日付を文字列に編集したい
  関数
  TO_CHAR( {日付型}, '{書式}' )
 == 書式文字 ==
 YYYY : 年 4文字
 YY :   年 2文字
 MM :   月 2文字
 DD :   日 2文字
 HH :   時 2文字 (12時間表記)
 HH24 : 時 2文字 (24時間表記)
 MI :   分 2文字
 SS :   秒 2文字
  例
 SELECT TO_CHAR( sysdate, 'YY-MM-DD HH24:MI:SS' ) FROM dual;


数値を文字列に編集したい
  関数
  TO_CHAR( {数値型}, '{書式}' )
 == 書式文字 ==
 9 :  0はスペース(ゼロサプレス)
 0 :  数字1文字
 , :   カンマ
 . :   小数点(ピリオド)
  例
 SELECT sal, TO_CHAR( sal, '99,990.0' ) FROM emp;


日付文字列を日付型に変換したい
  関数
  TO_DATE( {文字型}, '{書式}' )
 == 書式文字 ==
 YYYY : 年 4文字
 YY :   年 2文字
 RR :   年 2文字 (1900年代自動変換対応)
 MM :   月 2文字
 DD :   日 2文字
 HH :   時 2文字 (12時間表記)
 HH24 : 時 2文字 (24時間表記)
 MI :   分 2文字
 SS :   秒 2文字
  例
 SELECT TO_DATE( '641120', 'RRMMDD' ) FROM dual;


IF文のような関数を使いたい
  関数
  DECODE( {式}, {評価値}, {=の時返す値}, {≠の時返す値} )
  例
 SELECT comm, NVL( comm ), DECODE( comm, NULL, 0, comm ) FROM emp;


データ件数が知りたい
  関数
  COUNT( * )
  例
 SELECT COUNT(*) FROM emp;


NULL値でないデータ件数が知りたい
  関数
  COUNT( {対象となる列名} )
  例
 SELECT COUNT( comm ) FROM emp;


異なる値の件数が知りたい(カーディナリティ値)
  関数
  COUNT( DISTINCT {対象となる列名} )
  例
 SELECT COUNT( DISTINCT deptno ) FROM emp;


グループ毎に集計したい
  文法
  SELECT {グループ化した列名またはグループ関数}
    FROM
{表名}
   
[ WHERE {条件} ]
    GROUP BY
{グループ化する列};
  例
 SELECT job, COUNT(*) FROM emp GROUP BY job;


グループ関数の値を条件にしたい
  文法
  SELECT {グループ化した列名またはグループ関数}
    FROM
{表名}
   
[ WHERE {一般条件} ]
    GROUP BY
{グループ化する列}
    HAVING
{グループ関数が入った条件}
;
  例
 SELECT job, COUNT(*) FROM emp GROUP BY job HAVING COUNT(*) >= 3;


順序より新しい番号を取得したい
  文法
  {順序名}.NEXTVAL
  例
 SELECT seq.NEXTVAL FROM dual;


現在の順序番号が知りたい
  文法
  {順序名}.CURRVAL
  例
 SELECT seq.CURRVAL FROM dual;


複数の表を二重ループにして検索したい(単純結合)
  文法
  SELECT {表名}.{列名} ...
    FROM {表名1}, {表名n} ...;
  例
 SELECT emp.*, dept.* FROM emp, dept;


複数の表を結合して検索したい(等価結合)
  文法
  SELECT {表名}.{列名} ...
    FROM {子表}, {親表} ...
    WHERE {等価条件} [ AND {条件式} ... ]; 
  ※{子表}:データ等メインの表 
  ※{親表}:マスタ等参照される表 
  ※{等価条件} : {子表}.{外部キー}= {親表}.{主キー}
  例
 SELECT emp.*, dept.* FROM emp, dept WHERE emp.deptno = dept.deptno;


キーを条件とせず複数の表を結合して検索したい(非等価結合)
  文法
  SELECT {表名}.{列名} ...
    FROM {表名1}, {表名n} ...
    WHERE {条件式} ... ; 
  ※{条件式}:どのような条件でも良い。
  例
 SELECT emp.*, salgrade.* FROM emp, salgrade
   WHERE sal BETWEEN hisal AND lowsal;


マスター等行がなくても表を結合して検索したい(外部結合)
  文法
  SELECT {表名}.{列名} ...
    FROM {表名1}, {表名n} ...
    WHERE {表名}.{列名}= {表名}.{列名}(+) [ AND {条件式} ... ]; 
      または 
  SELECT {表名}.{列名} ...
    FROM {表名1}, {表名n} ...
    WHERE {表名}.{列名}(+) = {表名}.{列名} [ AND {条件式} ... ];
  例
 SELECT emp.*, dept.* FROM emp, dept WHERE emp.deptno = dept.deptno(+);   
      (dept表に登録されてなくても良い)


同じ表を結合したい(再帰結合)
  文法
  SELECT {別名}.{表名} ...
    FROM {表名} {別名1}, {表名} {別名n} ...
    WHERE {別名}.{列名}= {別名}.{列名}(+);
  例
 SELECT A.*, B.* FROM emp A, emp B WHERE A.mgr = B.empno(+);


行データを加算したい(表の足し算) - 同じ行を1行とする
  文法
  SELECT {列名} ...
    FROM {表名1}
    WHERE {条件1}
  UNION
  SELECT {列名} ...
    FROM {表名2}
    WHERE {条件2}
 [ ORDER BY {列名} ... ];
  例
 SELECT empno, ename FROM emp WHERE job = 'CLERK'
 UNION
 SELECT empno, ename FROM emp WHERE mgr = 7698;


行データを加算したい(表の足し算) - 同じ行を別々にする
  文法
  SELECT {列名} ...
    FROM {表名1}
    WHERE {条件1}
  UNION ALL
  SELECT {列名} ...
    FROM {表名2}
    WHERE {条件2}
 [ ORDER BY {列名} ... ];
  例
 SELECT empno, ename FROM emp WHERE job = 'CLERK'
 UNION ALL
 SELECT empno, ename FROM emp WHERE mgr = 7698;


行データを減算したい(表の引き算)
  文法
  SELECT {列名} ...
    FROM {表名1}
    WHERE {条件1}
  MINUS
  SELECT {列名} ...
    FROM {表名2}
    WHERE {条件2}
 [ ORDER BY {列名} ... ];
  例
 SELECT empno, ename FROM emp WHERE deptno = 30
 MINUS
 SELECT empno, ename FROM emp WHERE job = 'SALESMAN';


他の表を参照しないと判らない条件を指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {列名} = (
      SELECT {列名}
        FROM {表名}
        WHERE {条件}
    );
  例
 SELECT * FROM emp WHERE deptno =
  ( SELECT deptno FROM dept WHERE dname = 'SALES' );


複数行を返す副問合せを条件に指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE {列名} IN (
      SELECT {列名}
        FROM {表名}
        WHERE {条件}
    );
  例
 SELECT * FROM dept WHERE deptno IN
  ( SELECT deptno FROM emp WHERE job = 'MANAGER' );


複数列の副問合せを指定したい
  文法
  SELECT {列名} ...
    FROM {表名}
    WHERE ( {列名}, {列名} ... ) = (
      SELECT {列名}, {列名} ...
        FROM {表名}
        WHERE {条件}
    );
  例
 SELECT * FROM emp WHERE ( job, sal ) =
  ( SELECT job, sal FROM emp WHERE ename = 'WARD' );


FROM句に副問合せを指定したい
  文法
  SELECT {列名} ...
    FROM (
      SELECT *
        FROM {表名}
        WHERE {条件}
    ) {別名}
    WHERE {条件};
  例
 SELECT A.* FROM ( SELECT * FROM emp WHERE deptno = 30 ) A
  WHERE job = 'MANAGER';


行(データを追加したい)
  文法
  INSERT INTO {表名}
    VALUES ( {列1の値}, [ {列2の値}, ... ] );
  例
 INSERT INTO emp VALUES ( 12345, 'HIRO', 'PART', 7566, sysdate, 500, 0, 20 );


指定した列のみに行を追加したい
  文法
  INSERT INTO {表名} ( {列名1}, [ {列名2}, ... ] )
    VALUES ( {列1の値}, [ {列2の値}, ... ] );
  例
 INSERT INTO emp ( empno, ename, job, mgr, hiredate, sal, deptno )
   VALUES ( 12345, 'HIRO', 'PART', 7566, sysdate, 500, 20 );


表から表へデータを追加したい(同じレイアウト)
  文法
  INSERT INTO {追加する表名}
    SELECT *
      FROM {複写元の表名};
  例
 INSERT INTO uriage SELECT * FROM daily_uri;


表から表へデータを追加したい(異なるレイアウト)
  文法
  INSERT INTO {追加する表名}
    SELECT {複写元表の列名にて追加する表のレイアウトに合せて列挙}
      FROM {複写元の表名};
  例
 INSERT INTO syohin
   SELECT DISTINCT sycd, synm FROM uriage; 
      (過去の売上データより商品マスタを作成する場合)


大量のデータをINSERTするとエラーが発生する(ロールバックセグメントの切り替え)
  文法
@ COMMIT;またはROLLBACK;
A SET TRANSACTION USE ROLLBACK SEGMENT
                               {大きいロールバックセグメント名};

B SQL-DML文
C COMMIT;
  例
 COMMIT;
 SET TRANSACTION USE ROLLBACK SEGMENT big_rbs;
 INSERT INTO aaa SELECT * FROM backup_aaa;
 COMMIT;


大量のデータをINSERTするので制約を一時的に無効にしたい
  文法
  ALTER TABLE {表名} DISABLE CONSTRAINT {制約名};
  例
 ALTER TABLE emp DISABLE CONSTRAINT pk_emp;


無効にした制約を有効したい
  文法
@ ALTER TABLE {表名} ENABLE NOVALIDATE CONSTRAINT {制約名};
A ALTER TABLE {表名} ENABLE CONSTRAINT {制約名};
  例
 ALTER TABLE emp ENABLE NOVALIDATE CONSTRAINT pk_emp;
 ALTER TABLE emp ENABLE CONSTRAINT pk_emp;


制約を有効にする際エラーになる行を求めたい
  文法
@ @utlexcept.sql               ← except_table 表を作成する
A ALTER TABLE {表名} ENABLE CONSTRAINT {制約名}
                          EXCEPTIONS INTO except_table;
  例
 ALTER TABLE emp ENABLE CONSTRAINT pk_emp EXCEPTIONS INTO except_table;


特定行の特定列の値を変更したい
  文法
  UPDATE {表名} SET {列名} = {値または式}
    WHERE {条件式};
  例
 UPDATE emp SET sal = 1000 WHERE empno = 7369; 
      または
 UPDATE emp SET comm = 0 WHERE comm IS NULL;


複数の列を同時に変更したい
  文法
  UPDATE {表名} SET {列名1} = {値1または式1}, [ {列名2} = {値2または式2} ... ]
    WHERE {条件式};
  例
 UPDATE emp SET sal = 1300, comm = 600 WHERE empno = 7521;


すべての行の値を変更したい(初期値の代入)
  文法
  UPDATE {表名} SET {列名} = {値または式};
  例
 UPDATE emp SET sal = sal * 1.1;


特定の行を削除したい
  文法
  DELETE FROM {表名}
    WHERE {条件式};
  例
 DELETE FROM emp WHERE empno = 7369;


すべての行を削除したい
  文法
  DELETE FROM {表名};
  例
 DELETE FROM emp;


すべての行を削除したい(ロールバック不可)
  文法
  TRUNCATE TABLE {表名};
  例
 TRUNCATE TABLE emp;


そっくりな行の片方を削除したい
  文法
@ SELECT rowid, {表名}.* FROM {表名};
A DELETE FROM {表名} WHERE rowid = '{rowid値}';
  例
 DELETE FROM emp WHERE rowid = 'AAAFXDAABAAAHVaAAA';


トランザクションを確定したい
  文法
  COMMIT [WORK];
  例
 COMMIT; 
      または
 COMMIT WORK;


トランザクションを破棄したい
  文法
  ROLLBACK [WORK];
  例
 ROLLBACK; 
      または
 ROLLBACK WORK;


トランザクションの位置を記憶したい
  文法
  SAVEPOINT {名前};
  例
 SAVEPOINT sp1;


トランザクションを記憶した位置まで取り消したい
  文法
  ROLLBACK [WORK] {SAVEPOINT名};
  例
 ROLLBACK sp1;


電卓代わりに使用したい
  文法
  SELECT {計算式}
    FROM dual;
  例
 SELECT 60*60*24 FROM dual;       (一日の秒数)
 SELECT POWER( 2, 8 ) FROM dual;    (2の8乗)


SQL*Plusにてデータベースに接続したい
  文法
  CONNECT {ユーザ名}/{パスワード}@{接続文字列}
      または
  CONNECT {ユーザ名}/{パスワード}     (サーバー上にて接続する場合)
  ※{接続文字列}は、Net8 Easy Configurationにて設定します
  例
 CONNECT scott/tiger;


SQL*Plusにて表の定義が知りたい
  文法
  DESCRIBE {表名}
      または
  DESC {表名}
  例
 DESC emp;


列を追加したい
  文法
  ALTER TABLE {表名} ADD (
     {追加する列名} {データ型}
  );
  例
 ALTER TABLE emp ADD ( yomi VARCHAR2(64));


重複可能な索引を追加したい
  文法
  CREATE INDEX {索引名} ON {表名} (
    {列名}, ...
  );
  例
 CREATE INDEX ix_emp ON emp ( job );


重複可能な索引を削除したい
  文法
  DROP INDEX {索引名};
  例
 DROP INDEX ix_emp;


一意な索引を追加したい
  文法
  ALTER TABLE {表名} ADD (
    CONSTRAINT {一意索引名} UNIQUE (
      {列名}, ...
    )
  );
  例
 ALTER TABLE emp ADD ( CONSTRAINT uq_emp UNIQUE ( job ));


一意な索引を削除したい
  文法
  ALTER TABLE {表名} DROP CONSTRAINT {一意索引名};
  例
 ALTER TABLE emp DROP CONSTRAINT uq_emp;


表をコピーしたい
  文法
  CREATE TABLE {複写先の表名} AS
    SELECT *
      FROM {複写元の表名};
  例
 CREATE TABLE backup_emp AS SELECT * FROM emp;


表をレイアウトのみコピーしたい
  文法
  CREATE TABLE {複写先の表名} AS
    SELECT *
      FROM {複写元の表名}
      WHERE {成り立たない条件式};
  例
 CREATE TABLE backup_emp AS SELECT * FROM emp WHERE 1 = 2;


表の名前を変更したい
  文法
  RENAME {変更前の表名} TO {変更後の表名};
  例
 RENAME emp TO new_emp;


表を削除したい
  文法
  DROP TABLE {表名};
  例
 DROP TABLE emp;


表を強制的に削除したい
  文法
  DROP TABLE {表名} CASCADE CONSTRAINTS;
  例
 DROP TABLE emp CASCADE CONSTRAINTS;


作成したテーブル(実表)の一覧を知りたい
データディクショナリ
  user_tables
  all_tables
  dba_tables
  例
 SELECT * FROM user_tables; 
      または
 SELECT table_name, tablespace_name, num_rows, avg_row_len, chain_cnt, blocks
   FROM user_tables;


表領域の情報が知りたい
データディクショナリ
  dba_tablespaces
  例
 SELECT * FROM dba_tablespaces;


物理ファイル(データファイル)の情報が知りたい
データディクショナリ
  dba_data_files
  例
 SELECT * FROM dba_data_files;


現在データベースに接続しているユーザの情報が知りたい
データディクショナリ
  v$session
  例
 SELECT * FROM v$session; 
      または
 SELECT username, osuser, machine, program, sid, serial# FROM v$session;


RDBMSのメモリー情報が知りたい
データディクショナリ
  v$sga
  例
 SELECT * FROM v$sga;


Redoログファイルの情報が知りたい
データディクショナリ
  v$log 
      または
  v$logfile
  例
 SELECT * FROM v$log; 
      または
 SELECT * FROM v$logfile;


データディクショナリの名前が知りたい
データディクショナリ
  dictionary 
      または
  dict
  例
 SELECT table_name
   FROM dict
   WHERE table_name LIKE '%' || UPPER( '&keyword' ) || '%';


バックアップする物理ファイル名が知りたい
  文法
  SELECT file_name FROM dba_data_files UNION
  SELECT name FROM v$controlfile UNION
  SELECT member FROM v$logfile
;

※初期パラメータファイルもバックアップしておきましょう。
  例
  SELECT file_name FROM dba_data_files UNION
  SELECT name FROM v$controlfile UNION
  SELECT member FROM v$logfile;



  文法
;
  例
;


気軽に質問して下さい。お問い合わせは、buchi@t3.rim.or.jpまでお願いします。


戻る

Last update (C) 2004 HiroLaboratory. All rights reserved.