【SQL】SELECT文の書き方:サンプル多数あり
このページでは、ORACLEデータベースで、表のデータを検索して取得するSQL、SELECT文について紹介します。
SELECT文の基本構文に加えて、たくさんのサンプルを掲載していますのでぜひ参考にしてください。
SQLとは何か?どんな種類があるのか気になる方は、「【初心者向け】SQLとは?基礎から分かりやすく解説」で詳しく解説していますのでぜひ参考にしてください。
データベースのテーブル構造
データベース上では、データは表(テーブル)として登録されています。
イマージとしては、下の図のように、縦横の表のような形です。
データは横1列で、1行2行や1件2件と数えます。縦1列は、1列2列と数えます。
また、行のことをレコードと呼び、列のことをカラムと呼びます。
・サンプル:employee表
次のサンプルでは、id,name,deptという3列の表で、3件のレコードが登録されています。
id | name | dept |
001 | tanaka | sales |
002 | suzuki | product |
003 | takeda | sales |
SELECT文の基本構文
SQLでまず覚える必要があるのが、SELECT文です。
テーブルからデータを取得するSQLをSELECT文と呼び、次のような文法で記述します。
SELECT句の後ろに取得したいデータの列名を1つ以上書きます。FROM句の後ろには、データを取得するテーブル名を書きます。
SELECT 列名 FROM テーブル名 [WHERE 条件];
SELECT文のサンプル
全件のレコードを取得する方法
例えば、先ほどのemployee表から、全ての従業員のIDを取得するSQLです。
SELECT句の後ろにはIDという列の名称を、FROM句の後ろにはemployeeという表の名称を書きます。これで、全ての従業員のIDを取得することが出来ます。
SELECT id FROM employee;
複数の列の値を取得する方法
例えば、先ほどのemployee表から、全ての従業員のIDと名前を取得するSQLです。
SELECT句の後ろにはIDとNAMEという列の名称を、FROM句の後ろにはemployeeという表の名称を書きます。これで、全ての従業員のIDとNAME列を取得することが出来ます。
SELECT id,name FROM employee;
全ての列の値を取得する方法
全ての列の値を取得したいときは、SELECTの後ろに*(アスタリスク)を指定することで、全ての列の値を取得します。
SELECT * FROM employee;
条件に一致するレコードを取得する方法
例えば、先ほどのemployee表から、salesに所属する、従業員のIDを取得するSQLです。
FROM句のemployee表の後ろに、WHERE句を追加して、条件を付け加えます。
ここでは、dept列の値が’sales’に一致する行を取得したいので、「dept = ‘sales’」という形で、比較演算子を使って、条件を追加しています。
SELECT id FROM employee WHERE dept = 'sales';
比較演算子は、=の他にも、次のようなものがあります。
=:等しい
>:大きい
<:小さい
>=:以上
<=:以下
<>:等しくない
!=:等しくない
さらに、ANDやOR、NOTやLIKEを組み合わせることが出来ます。
複数の条件に一致するレコードを取得する方法
例えば、先ほどのemployee表から、salesに所属する、従業員のIDが001のレコードを取得するSQLです。
WHERE句の条件をANDでつなぎ、2つの条件を同時に満たすレコードだけを取得することができます。
SELECT id FROM employee WHERE dept = 'sales' AND id = '001';
次のSQLのように、ORを使うと、どちらか一方でも条件に一致すれば、レコードを取得します。
SELECT id FROM employee WHERE dept = 'sales' OR id = '001';
あいまい検索する方法
例えば、先ほどのemployee表で、NAMEに”ki”を含む従業員のIDとNAMEを取得する場合のSQLです。
WHERE句の条件に、LIKE演算子を用いて、「name like ‘%ki%’」と書くことで、NAME列にkiを含むレコードだけを取得します。
SELECT id,name FROM employee WHERE name like '%ki%';
前方一致検索する方法
例えば、先ほどのemployee表で、NAMEが”ta”で始まる従業員のIDとNAMEを取得する場合のSQLです。
次のSQLのように「name like ‘ta%’」とすることで、NAME列の頭がtaから始まっているレコードだけを取得することが出来ます。
SELECT id,name FROM employee WHERE name like 'ta%';
この他にもLIKE演算子とワイルドカードを使うことで、さまざまな検索が実行可能です。
LIKE演算子については、さらに詳しく「【SQL】LIKEの使い方:サンプル多数あり」で解説していますのでぜひ参考にしてください。
CASE式を使って条件分岐する方法
CASE式を使うことで、条件ごとに取得する結果を変えることが出来ます。
次のSQLでは、dept列の値が’sales’の場合にはA001を、’product’の場合にはB001を、それ以外の場合にはNULLを返します。
SELECT
CASE dept
WHEN 'sales' THEN 'A001'
WHEN 'product' THEN 'B001'
ELSE NULL
END
FROM
employee
;
CASE式の条件には、式を書くことが出来ます。
次のSQLでは、WHENの条件に式を書いています。結果は前のSQLと同じになります。
SELECT
CASE
WHEN dept = 'sales' THEN 'A001'
WHEN dept = 'product' THEN 'B001'
ELSE NULL
END
FROM
employee
;
COUNTでレコード件数を集計する
レコードの件数はCOUNT関数を使うことで取得できます。
次のサンプルでは、employee表の全てのレコード件数を取得しています。
SELECT count(*) FROM employee;
WHERE句で条件を指定すれば、条件に一致するレコードの件数を取得できます。
次のSQLでは、dept列の値が’sales’のレコードの件数を取得しています。
SELECT count(*) FROM employee WHERE dept = 'sales';
まとめ
SELECT文ではデータベース上のテーブルから、データを取得することが出来ます。
SELECT文の他にも、INSERT文やUPDATE文、DELETE文といったSQLがあり、データの追加や更新、削除を行うことが出来ます。
具体的な書き方や使い方については、↓で詳しく解説していますのでぜひ参考にしてください。
・データの追加:【SQL】INSERT文の書き方:サンプル多数あり
・データの更新:【SQL】UPDATE文の書き方:サンプル多数あり
・データの削除:【SQL】DELETE文の書き方:サンプル多数あり