この教材で使った SQL の書き方、SQL Developer の操作、用語をまとめています。書き方を忘れたときに引いてください。
C.1 SQL 早見表
ユーザー・テーブル・シーケンス(DDL・DCL)
| したいこと | 書き方 | 章 |
|---|---|---|
| ユーザーを作る | CREATE USER dbapp IDENTIFIED BY dbapp; |
第2章 |
| 権限を与える | GRANT ALL PRIVILEGES TO dbapp; |
第2章 |
| シーケンスを作る | CREATE SEQUENCE SEQ_EMP NOCACHE; |
第3章 |
| テーブルを作る | CREATE TABLE テーブル名 ( 列名 データ型 制約, … ); |
第3章 |
| 主キー(列制約) | EMP_ID NUMBER(6) CONSTRAINT PK_EMPLOYEE PRIMARY KEY |
第3章 |
| 外部キー(列制約) | DEPT_ID NUMBER(4) NOT NULL CONSTRAINT FK_EMPLOYEE_DEPARTMENT REFERENCES DEPARTMENT (DEPT_ID) |
第3章 |
| CHECK 制約(列制約) | GENDER NUMBER(1) NOT NULL CONSTRAINT CK_EMPLOYEE_GENDER CHECK (GENDER IN (1, 2)) |
第3章 |
| 表制約で書く |
CONSTRAINT PK_EMPLOYEE PRIMARY KEY (EMP_ID)CONSTRAINT FK_… FOREIGN KEY (DEPT_ID) REFERENCES DEPARTMENT (DEPT_ID)CONSTRAINT CK_… CHECK (GENDER IN (1, 2))
|
第3章 |
| テーブルを消す |
DROP TABLE EMPLOYEE;(参照している側から先に) |
第3章 |
| シーケンスを消す | DROP SEQUENCE SEQ_EMP; |
第3章 |
データ型
| データ型 | 意味 | 値の書き方 |
|---|---|---|
NUMBER(n) |
最大 n 桁の整数 | 26 |
VARCHAR2(n CHAR) |
最大 n 文字の文字列 | '東京都' |
DATE |
日付(時刻も持つ) | DATE '2000-06-22' |
登録・変更・削除・確定(DML・TCL)
| したいこと | 書き方 | 章 |
|---|---|---|
| 1行を登録する | INSERT INTO テーブル名 (列名, …) VALUES (値, …); |
第4章 |
| シーケンスの次の番号 | SEQ_EMP.NEXTVAL |
第4章 |
| 変更する | UPDATE テーブル名 SET 列名 = 値, … WHERE 条件; |
第7章 |
| 削除する | DELETE FROM テーブル名 WHERE 条件; |
第7章 |
| 確定する | COMMIT; |
第4章 |
| 取り消す | ROLLBACK; |
第4章 |
取り出す(SELECT)
書き方(句はこの順番で書く)
SELECT [DISTINCT] 列名 [AS 別名], 集計関数, ...
FROM テーブル1 別名1
[INNER | LEFT OUTER] JOIN テーブル2 別名2 ON 結合の条件
WHERE 行の条件
GROUP BY 列名, ...
HAVING グループの条件
ORDER BY 列名 [ASC | DESC], ...;
[ ] の中は省略できる部分、| はどちらかを選ぶ部分です(SQL には書きません)。
| したいこと | 書き方 | 章 |
|---|---|---|
| すべての列 | SELECT * FROM EMPLOYEE; |
第5章 |
| 列を選ぶ | SELECT NAME, AGE FROM EMPLOYEE; |
第5章 |
| 並べ替える |
ORDER BY AGE(昇順)、ORDER BY AGE DESC(降順)、ORDER BY DEPT_ID, AGE DESC
|
第5章 |
| 別名を付ける | SELECT NAME AS 氏名 |
第5章 |
| 重複をなくす | SELECT DISTINCT ADDRESS FROM EMPLOYEE; |
第5章 |
| 計算する | SELECT AGE + 1 AS NEXT_AGE |
第5章 |
| 条件で絞る |
WHERE DEPT_ID = 2、WHERE AGE >= 30、WHERE NAME = '雷禅 海皇'
|
第6章 |
| 比較演算子 |
=・<>・>・>=・<・<=
|
第6章 |
| 条件を組み合わせる |
WHERE DEPT_ID = 2 AND (ADDRESS = '東京都' OR ADDRESS = '大阪府')、NOT
|
第6章 |
| 範囲 | WHERE AGE BETWEEN 25 AND 30 |
第6章 |
| 候補のどれか |
WHERE ADDRESS IN ('東京都', '京都府')、NOT IN
|
第6章 |
| あいまい検索 |
WHERE NAME LIKE '田%'(%:0文字以上、_:1文字)、NOT LIKE
|
第6章 |
| NULL を調べる |
WHERE 列名 IS NULL、IS NOT NULL
|
第6章 |
| 行を数える・集計する |
COUNT(*)・COUNT(列名)・SUM・AVG・MAX・MIN
|
第9章 |
| グループごとに集計する | SELECT DEPT_ID, COUNT(*) FROM EMPLOYEE GROUP BY DEPT_ID |
第9章 |
| 集計結果で絞る | GROUP BY DEPT_ID HAVING COUNT(*) >= 4 |
第9章 |
| 内部結合 | FROM EMPLOYEE e INNER JOIN DEPARTMENT d ON e.DEPT_ID = d.DEPT_ID |
第10章 |
| 左外部結合 | FROM DEPARTMENT d LEFT OUTER JOIN EMPLOYEE e ON d.DEPT_ID = e.DEPT_ID |
第10章 |
| 3つ以上のテーブルの結合 |
FROM EMPLOYEE e INNER JOIN DEPARTMENT d ON e.DEPT_ID = d.DEPT_ID INNER JOIN JOB j ON e.JOB_ID = j.JOB_ID(JOB は例) |
第10章 |
関数
| 関数 | 意味 | 例 → 結果 |
|---|---|---|
|| |
文字列をつなげる |
NAME || 'さん' → 雷禅 海皇さん |
LENGTH(文字列) |
文字数 |
LENGTH('雷禅 海皇') → 5 |
SUBSTR(文字列, 開始, 文字数) |
一部を取り出す(開始は 1 から) |
SUBSTR('雷禅 海皇', 1, 2) → 雷禅 |
REPLACE(文字列, 探す, 置き換える) |
置き換える |
REPLACE('雷禅 海皇', ' ', '') → 雷禅海皇 |
UPPER(文字列)・LOWER(文字列)
|
英字を大文字・小文字にする |
UPPER('oracle') → ORACLE |
ROUND(数, 桁) |
四捨五入 |
ROUND(28.65, 1) → 28.7 |
TRUNC(数, 桁) |
切り捨て |
TRUNC(28.65, 1) → 28.6 |
MOD(数1, 数2) |
割った余り |
MOD(10, 3) → 1 |
SYSDATE |
現在の日時 |
SYSDATE + 7 → 7日後 |
TO_CHAR(日付, '書式') |
日付を文字列にする |
TO_CHAR(BIRTH_DATE, 'YYYY/MM/DD') → 2000/06/22 |
TO_DATE('文字列', '書式') |
文字列を日付にする | TO_DATE('2000/06/22', 'YYYY/MM/DD') |
MONTHS_BETWEEN(日付1, 日付2) |
2つの日付の間の月数 |
TRUNC(MONTHS_BETWEEN(SYSDATE, BIRTH_DATE) / 12) → 年齢 |
NVL(値, 代わりの値) |
NULL のとき代わりの値にする | NVL(e.NAME, '(社員なし)') |
日付の書式の記号:YYYY(年4桁)・MM(月)・DD(日)・HH24(時)・MI(分)・SS(秒)・"文字"(そのまま入れる文字)。
C.2 SQL Developer 操作早見表
接続とワークシート
| したいこと | 操作 | 章 |
|---|---|---|
| 接続を作る | 「接続」パネルの緑の「+」→ 入力 → 「テスト」→「保存」→「接続」 | 第2章 |
| 接続する | 「接続」パネルで接続名をダブルクリック | 第3章 |
| ワークシートを開く | 接続名を右クリック → 「SQLワークシートを開く」(または Alt + F10) | 第3章 |
| 接続を切断する | 接続名を右クリック → 「切断」 | — |
| 接続の設定を直す | 接続名を右クリック → 「プロパティ」 | 第2章 |
| どの接続のワークシートか確かめる | ワークシートのタブの名前と右上の接続名を見る | 第2章 |
| SQL をファイルに保存する・開く | ファイル → 保存(Ctrl + S)/ファイル → 開く。開いたワークシートは右上で接続を選ぶ | 第4章 |
SQL の実行
| したいこと | 操作 | 章 |
|---|---|---|
| 1つの SQL を実行する(文の実行) | SQL の中にカーソルを置いて Ctrl + Enter、または緑の三角ボタン。SELECT の結果は「問合せ結果」に表で表示 | 第2章 |
| すべての SQL を実行する(スクリプトの実行) | F5、または「紙と緑の三角」のボタン。結果は「スクリプト出力」に文字で表示 | 第2章 |
| SQL の入力を補完する | 途中まで打って Ctrl + Space を押し、候補を ↓ ↑ で選んで Enter | 第2章 |
| 選んだ範囲だけ実行する | 範囲を選択して Ctrl + Enter または F5 | 第7章 |
| コミットする |
COMMIT; を実行、または「コミット」ボタン(F11) |
第4章 |
| ロールバックする |
ROLLBACK; を実行、または「ロールバック」ボタン(F12) |
第4章 |
| ワークシートの内容を消す | Ctrl + A で全選択して Delete、または「消去」ボタン(Ctrl + D) | — |
| スクリプト出力を消す | 「スクリプト出力」タブの「消去」ボタン(消しゴムの印) | — |
| テーブル・列・制約を見る | 「接続」パネルで接続を展開 → 「表」→ テーブル名をダブルクリック → 「列」「制約」「データ」タブ | 第3章 |
| 最新の状態に更新する | 「表」などを右クリック → 「リフレッシュ」 | 第3章 |
| SQL を図で組み立てる | ワークシート下の「クエリー・ビルダー」タブ | 第10章 |
SQL Developer を使いやすくする設定
設定はメニューの ツール → プリファレンス で開きます。「開発環境の準備」で設定したものに加えて、次の設定も便利です。
| 設定 | 場所 | 効果 |
|---|---|---|
| 行番号の表示 | コード・エディタ → 行の左余白 → 「行番号の表示」にチェック | ワークシートに行番号が表示され、エラーの「コマンドの N 行目」と照らし合わせやすくなる |
| フォントを大きくする | コード・エディタ → フォント | ワークシートの文字の大きさを変えられる |
C.3 用語集
| 用語 | 意味 | 章 |
|---|---|---|
| データベース | 決まった形で保存したデータの集まり。DBMS を含めた仕組み全体を指すこともある | 第1章 |
| DBMS | データベース管理システム。データを管理し、SQL の指示を処理するソフトウェア。Oracle Database など | 第1章 |
| リレーショナルデータベース(RDB) | データを表(テーブル)の形で持つデータベース | 第1章 |
| テーブル(表) | 同じ種類のデータを集めた表。列の定義を持ち、行が増えていく | 第1章 |
| 行(レコード) | テーブルの1件分のデータ | 第1章 |
| 列(カラム) | テーブルの項目。名前とデータ型を持つ | 第1章 |
| 主キー(プライマリキー) | 1行を特定する列。同じ値は入れられず、空も許されない。PRIMARY KEY
|
第1章・第3章 |
| 外部キー | 別のテーブルの主キーを参照する列。参照先に存在する値しか入れられない。REFERENCES
|
第1章・第3章 |
| 正規化 | 同じ情報の繰り返しをなくすように、テーブルを分けること | 第1章 |
| ER 図 | テーブルと、テーブル同士のつながり(主キーと外部キー)を表した図 | 第1章 |
| SQL | DBMS に指示を出すための言葉。1つの指示が SQL 文 | 第1章 |
| DDL・DML・TCL・DCL | SQL 文の分類。定義(CREATE・DROP)、操作(INSERT・SELECT・UPDATE・DELETE)、トランザクション制御(COMMIT・ROLLBACK)、制御(GRANT)。現場では、テーブルを作る CREATE TABLE 文そのものを「DDL」と呼ぶことが多い |
第1章 |
| CRUD | 登録・取り出し・変更・削除の4つの操作。C(Create)が INSERT、R(Read)が SELECT、U(Update)が UPDATE、D(Delete)が DELETE | 第1章 |
| Oracle Database XE | Oracle Database の無償版(Express Edition) | 「開発環境の準備」 |
| CDB・PDB | CDB はデータベース全体の入れ物、PDB はその中の独立したデータベース。この教材では PDB の XEPDB1(mac では FREEPDB1)を使う | 「開発環境の準備」 |
| サービス(Windows) | 画面を持たずに裏側で動き続けるプログラム。Oracle はサービスとして動く | 「開発環境の準備」 |
| SQL Developer | Oracle Database に接続して SQL を実行し、結果を表で確認するツール | 「開発環境の準備」 |
| 接続 | SQL Developer からデータベースにつなぐための設定。接続名・ユーザー名・パスワード・サービス名を持つ | 第2章 |
| ワークシート | SQL Developer で SQL を入力して実行する画面。接続ごとに開く | 第2章 |
| ユーザー | データベースに接続するためのアカウント。CREATE USER で作る |
第2章 |
| スキーマ | ユーザーが所有するテーブルなどを入れる領域。名前はユーザー名と同じ | 第2章 |
| 権限 | ユーザーが何をできるかを決めるもの。GRANT で与える |
第2章 |
| DUAL | Oracle に最初からある1行1列の表。テーブルを使わずに値や関数を試すときに使う | 第2章・第8章 |
| データ型 | 列に入れる値の種類。NUMBER・VARCHAR2・DATE
|
第3章 |
| 制約 | 列に入れられる値の決まり。NOT NULL・主キー・外部キー・CHECK。反するとエラーになる |
第3章 |
| 列制約・表制約 | 制約の書き方。列の定義の後ろに書くのが列制約、まとめて書くのが表制約 | 第3章 |
| NULL | 値が入っていない状態。0 や空文字とは違う。IS NULL で調べる |
第3章・第6章 |
| シーケンス | 重ならない番号を順に払い出す部品。NEXTVAL で次の番号を取り出す。SQL Developer では「順序」 |
第3章 |
| COMMIT・ROLLBACK | 変更を確定する・取り消す。確定前の変更は、ほかの接続からは見えない | 第4章 |
| トランザクション | 前回の COMMIT から次の COMMIT(または ROLLBACK)までの、ひとまとまりの変更 | 第4章 |
| ORA- エラー | Oracle のエラーメッセージ。ORA- と5桁の番号で始まる |
第4章・付録B |
| 句 | SELECT 文を構成する部分。FROM 句・WHERE 句など。書く順番が決まっている |
第6章・第9章 |
| 別名(エイリアス) | 列やテーブルに付ける仮の名前。列は AS を付けて、テーブルは付けずに書く |
第5章・第10章 |
| 比較演算子 | 値を比べる記号。=・<>・>・>=・<・<=
|
第6章 |
| 関数 | 値を受け取って加工した値を返す部品。関数名(引数)
|
第8章 |
| 集計・集計関数 | 複数の行をまとめて1つの値にすること。COUNT・SUM・AVG・MAX・MIN
|
第9章 |
| GROUP BY・HAVING | 行をグループに分けて集計する句と、集計結果でグループを絞り込む句 | 第9章・第9章 |
| 結合(JOIN) | 2つのテーブルを共通の列の値でつなげて1つの表として取り出すこと | 第10章 |
| 内部結合・外部結合 | 両方に相手がいる行だけを残すのが内部結合(INNER JOIN)、片方の全行を残すのが外部結合(LEFT OUTER JOIN) |
第10章 |