これからOracle Database(SQL)を勉強する人向けにテーブルの作成から、データ操作をわかりやすくまとめてみました。Web上(環境構築不要)で学習できるので、よかったら利用してみてください!
学習環境は Oracle Live SQL
Web上でSQLが実行できる環境、Oracle Live SQL を利用して学習を進めます。
SQL用語 テーブル・カラム・レコード・フィールド
SQLを勉強する上で覚えるべき用語、いったんここだけは押さえておきましょう!
- テーブル:データの一覧を保存しておくための「表」
- カラム:テーブルのそれぞれの項目にあたる「列」
- レコード:1件分のデータにあたる「行」
- フィールド:レコードの中にある「項目」
上記のテーブルは家計簿テーブルで、5つのカラムがあり、データは5レコード、1レコードあたり5つのフィールドで構成されています。
テーブルを作成しよう
まずは、学習に必要なテーブルの作成を行います。
SQLの4大命令って?
SQLの4大命令とは、基本的な命令文のことで下記4種類しかありません。
- INSERT(CREATE) … データの追加
- SELECT(REED) … データの取得
- UPDATE … データの更新
- DELETE … データの削除
この4つの基本的な命令分をCRUDと呼ぶこともあります。
上記の記事に基本的な書き方は簡単にまとめているのですが、詳しい書き方は下記の記事を確認してください!
INSERT文
作成したテーブルに対してデータを追加するINSERT文ですが、1行データを追加する場合、複数行データを追加する場合について下記記事で説明しました。
SELECT文
テーブルからデータを取得するSELECT文ですが、WHERE句を使うなどデータを細かく絞って取得することができます。下記の記事では、下記のよく使う演算子も含めて説明しています。
- 比較演算子(=, <, >, <=, >=, <>)
- IS NULL / IS NOT NULL 演算子
- LIKE 演算子
- BETWEEN 演算子
- IN / NOT IN 演算子
- 論理演算子(AND 演算子/ OR 演算子)
UPDATE文
データを更新する場合は、UPDATE文を使います。
DELETE文
データを削除する場合は、DELETE文を使います。
検索結果の加工しよう
命令 | 記述方法 | 対象行の絞り込み |
SELECT | 列名…FROM テーブル名 | WHERE 条件式 |
UPDATE | テーブル名 SET 列名 = 値 … | WHERE 条件式 |
DELETE | FROM テーブル名 | WHERE 条件式 |
INSERT | INTO テーブル名 (列名…) VALUES (値…) |
ここまでは、SQLの基本的な操作を学んできました。次はテーブルからデータを取得した際の検索結果を加工していきたいと思います。
DISTINCT – 重複行を除外する
重複行を除外してデータを取得するにはDISTINCTを使用します。
ORDER BY – 結果を並び替える
指定した列の値を基準として検索結果(データ)を並び替え取得するには、ORDER BY 句を使用します。
データを一定の規則に従って並べることをソートと言います。
日付 | 費目 | メモ | 入金額 | 出勤額 |
2024/03/25 | 住居費 | 3月分 | 0 | 55000 |
2024/03/20 | 通信費 | スマホ代 | 0 | 3300 |
2024/03/17 | 交通費 | バス代 | 0 | 500 |
2024/03/14 | 食費 | 夜食(とんかつ濱かつ) | 0 | 2000 |
日付を降順でソート
OFFSET ~ FETCH – 行数を限定しデータを取得
ORDER BY句 と一緒に使われるのが OFFSET ~ FETCH句です。ORDER BY で並び替えた結果の一部だけを取得する場合に OFFSET ~ FETCH を使います。
集合演算子を使ってみよう
これまで、1つのテーブルのデータを扱ってきました。ここからは複数のテーブルから集合演算子を使ってデータをまとめて取得したいと思います。
UNION | MINUS | INTERSECT |
和集合 2つの検索結果を 足し合わせたもの | 差集合 最初の検索結果から 次の検索結果と重複する 部分を取り除いたもの | 積集合 2つの検索結果で 重複するもの |
集合演算子が使える条件は、テーブルの列数とデータ型が一致していることです。
この条件に当てはまっていないと下記のようなエラーが起こります。
-- 列数が違う
ORA-01789: query block has incorrect number of result columns
-- データ型が違う
ORA-01790: expression must have same datatype as corresponding expression
UNION – 和集合を求める
2つのSELECT文からそれぞれの検索結果を足し合わせた結果(和集合)を返してくれる、UNION と UNION ALL について説明しています。
MINUS – 差集合を求める
2つのSELECT文のデータの差分を取得することができるMINUSについて説明しています。
INTERSECT – 積集合を求める
2つのSELECT文で重複しているデータを取得することができるINTERSECTについて説明しています。
関数を使いこなそう!
ここまで勉強してきたわけですが、なんとなくデータの扱い方がわかってきましたよね?
次はSQL文で使う関数について説明していきます。
下記のサイトはOracle Database(SQL)リファレンスで関数がまとめられています。
この中でよく使うと思う関数をピックアップして、サンプルコードと一緒に説明していきます!
関数を試す時は DUAL表 を使用します。
文字列関数
最初は文字列を扱う関数から確認してみましょう!
下記の記事では
- 文字列の結合
- 空白削除
- 置換
- 全半角変換
- 英字の大小変換
- 文字埋め
- 文字の長さ取得
- 文字列の切り取り
- 文字列検索
ができる関数の説明をしています。
数値関数
次は数値関数について説明します。
下記記事では
- 四捨五入
- 切り上げ
- 切り捨て
ができる関数の説明をしています。
日付関数
次は日付関数はについて説明します。
下記記事では
- システム日付の取得
- 日付の書式指定(フォーマット)
- 日付の編集
- 日付の取得
ができる関数などを説明しています。
集約関数
次は集約関数について説明します。
下記記事ではデータの
- 件数
- 合計値
- 平均値
- 中央値
- 最大値
- 最小値
が取得できる関数を説明しています。
複数のテーブルからデータを取得しよう!
複数のテーブルからデータを取得するには、INNER JOIN もしくは OUTER JOIN を使います。開発現場に入ってみると… JOIN JOIN JOIN !! JOINはよく使うので覚えておきましょう。
CASE式を使ってみよう!
SQLで条件分岐をするにはCASE式を使用します。
まとめ
今回、Oracle Live SQL を使ってSQLを実行していきましたが、現場ではSQLを実行するために