HOME > SELECT編
SELECT(検索)
SELECT文はテーブルからデータを検索する最も基本的なSQLコマンドです。
しかし一見簡単そうですが、大変奥深いコマンドでもあります。(*^_^*)
SELECT
- SELECT構文
-
SELECT <カラム名>[, <カラム名>...] FROM <テーブル名・ビュー名>[, <テーブル名・ビュー名>...] WHERE <条件> GROUP BY [<カラム名> or <集合関数>] HAVING <グルーピングに対する条件> ORDER BY <カラム名> [ASC or DESC] [NULLS FIRST, NULLS LAST] [, ...] ;
予約語 | 説明 |
---|---|
SELECT | 抽出するカラム名を記述する (関数を記述する事もできます) |
FROM | データを取得するテーブルやビューを指定する |
WHERE | データ抽出条件を記述する |
GROUP BY | グルーピング項目を指定する (グルーピングとは、指定したカラムが全く同じデータであれば、1行にまとめてしまうことです。) |
HAVING | グルーピングした項目に対するデータ抽出条件を記述する |
ORDER BY |
抽出順を指定する ASC:昇順(デフォルト) DESC:降順 ※NULLS FIRST, NULLS LAST指定によりnull値をソート順の前に表示するか後に表示するかの指定ができる。 例:ORDER BY col1 DESC NULLS FIRST (col1列を降順でソート。null値は最初に表示する) |
条件の演算子には、ORやANDなど以外にも以下のようなものが使用できます。
構文 | 説明 |
---|---|
BETWEEN カラム 下限 AND 上限 | 下限から上限に値があればTRUE |
IN(文字or数字 [, ...]) | 羅列した文字or数字どれかに一致すればTRUE (書式)<カラム名> IN('01', '02', '03) |
ANY(文字or数字 [, ...]) | 羅列した文字or数字どれかに一致すればTRUE 通常は比較演算子(<、>、>=、<=)で使用する |
LIKE '[%]部分一致文字列[%]' | 部分一致検索で使用する (「%」には何がきてもOKという意味) |
EXISTS(サブクエリ) | 存在するかどうか |
- SELECT例文1
- --(例1)idが100~200のデータをnameの昇順で検索する SELECT id, namae, tel, address FROM user_master WHERE id BETWEEN 100 AND 200 ORDER BY namae ;
- SELECT例文2
- --(例2)idが100か120か140のデータを検索する SELECT id, namae, tel, address FROM user_master WHERE id IN(100,120,140) ;
- SELECT例文3
- --(例3)nameに「藤」という文字が含まれているデータを検索する SELECT id, namae, tel, address FROM user_master WHERE name LIKE '%藤%' ; --(佐藤、伊藤、藤田、藤村 等の名前が検索結果となります。)
サブクエリ(副問い合わせ)
別の検索結果に対して、検索をすることも出来ます。
これを「副問い合わせ」や「サブクエリ」などと呼びます。
- 副問い合わせを使ってSELECTする
-
SELECT <カラム名>, ... FROM (SELECT <カラム名>, ... FROM <テーブル名>);
- サブクエリ例文
- SELECT B.category_name FROM (SELECT category_cd FROM syohin_mst GROUP BY category_cd) A ,name_mst B WHERE A.category_cd = B.category_cd ;
排他ロック検索
文の最後に「FOR UPDATE」を指定すると、その検索に排他ロックをかけることができます。
排他ロックをかけると他のユーザから、今検索したデータを更新することができなくなります。
(この時、待ち状態となります)
また、「FOR UPDATE NOWAIT」を指定すると、他のユーザが対象データにアクセス時、待ち状態にはならず即時に排他エラーを返すようになります。
使用時にはデッドロックにならないように十分注意する必要があります。
排他ロックを解除するにはCOMMITまたはROLLBACKを使用します。
- 排他ロックをかけて検索する
-
SELECT <カラム名>, ... FROM <テーブル名> FOR UPDATE [NOWAIT];
- FOR UPDATE例文
- SELECT account FROM zan_mst FOR UPDATE;
※これを実行すると、自分がCOMMITまたはROLLBACKを発行するまで、他のユーザは zan_mstテーブルにアクセスすると待ち状態となります。
- FOR UPDATE NOWAIT例文
- SELECT account FROM zan_mst FOR UPDATE NOWAIT;
※これを実行すると、自分がCOMMITまたはROLLBACKを発行するまで、他のユーザは zan_mstテーブルにアクセスすると排他エラーとなります。