SELECT文の基本
SELECT文の基本的な構文要素
データベースは、多くの情報(データ)を効率的に管理し、必要な時に簡単に取り出せるようにするシステムです。
データベースの中で最も重要な操作の一つが「SELECT文」です。
これは、データベースから特定の情報を「選択」して取得するためのSQL(Structured Query Language)コマンドです。
本記事では、オラクルデータベースを使ったSELECT文の基本的な使い方を詳しく説明します。
本記事で紹介する表の作成方法(サンプルスキーマのインストール)と、SELECT文で出力した情報を見やすく整形する方法については以下の記事をご覧ください。
SELECT文は、データベースのテーブルから必要なデータを取得するためのSQLコマンドです。
データベース内にはテーブルと呼ばれるデータの集まりがあり、これには行(レコード)と列(カラム)が含まれます。テーブルの中から特定の列や行を取り出したい時にSELECT文を使用します。
まず、表をselectするときの基本的なコマンドは以下です。
select <列名>,<列名>,… from <表名> ;
SQL> select empno,ename,job from emp;
EMPNO ENAME JOB
ーーーーー ーーーーーーーーーーー ーーーーーーーーーーー
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7566 JONES MANAGER
7654 MARTIN SALESMAN
7698 BLAKE MANAGER
7782 CLARK MANAGER
7839 KING PRESIDENT
7844 TURNER SALESMAN
7900 JAMES CLERK
7902 FORD ANALYST
EMPNO ENAME JOB
ーーーーー ーーーーーーーーーーー ーーーーーーーーーーー
7934 MILLER CLERK
12行が選択されました。
SQL>
また、列名を “*” とすることで、表に構成されているすべての列を出力することができます。
select * from <表名> ;
SQL> select * from salgrade;
GRADE LOSAL HISAL
ーーーーーー ーーーーー ーーーーーー
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
SQL>
WHERE句でデータを絞り込む
テーブル内のすべてのデータが必要なわけではなく、特定の条件を満たすデータだけを取得したい場合、WHERE句を使用します。WHERE句では、取得するデータに対する条件を指定します。
select <列名>,<列名>,… from <表名>
where <条件> ;
インストールしたSCOTTサンプルスキーマの以下EMP表を使用していきます。
SQL> select empno,ename,job from emp;
EMPNO ENAME JOB
ーーーー ーーーーーーーーーー ーーーーーーーーーーー
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7566 JONES MANAGER
7654 MARTIN SALESMAN
7698 BLAKE MANAGER
7782 CLARK MANAGER
7839 KING PRESIDENT
7844 TURNER SALESMAN
7900 JAMES CLERK
7902 FORD ANALYST
7934 MILLER CLERK
12行が選択されました。
SQL>
where句を使用して、EMPNOが”7698″の行の情報を絞り込んで出力します。
この場合は、 “where empno=7698” のように指定します。
SQL> select empno,ename,job from emp
2 where empno=7698;
EMPNO ENAME JOB
ーーーー ーーーーーーーーーー ーーーーーーーーーーー
7698 BLAKE MANAGER
SQL>
また、 where ename=’JONES’ のように文字列を指定して絞り込むことも可能です。
文字列を指定する場合は、 「’(シングルコーテーション)」で囲みます。
SQL> select empno,ename,job from emp
2 where ename=’JONES’;
EMPNO ENAME JOB
ーーーー ーーーーーーーーーー ーーーーーーーーーーー
7566 JONES MANAGER
SQL>
SQL文は大文字、小文字に関わらず実行可能ですが、 where 句に文字列を指定する場合は大文字、小文字が識別されます。
以下のように表に大文字が格納されている場合は、文字列も大文字にしないと意図した結果を得ることができないため注意が必要です。
SQL> select empno,ename,job from emp
2 where ename=‘JONES’;
EMPNO ENAME JOB
ーーーー ーーーーーーーーーー ーーーーーーーーーーー
7566 JONES MANAGER
SQL> select empno,ename,job from emp
2 where ename=‘jones’;
レコードが選択されませんでした。 ※小文字で指定した場合は結果が得られない。
SQL>
「=」以外の比較演算子を使用することも可能です。
以下が良く使用される比較演算子です。
・= : 等しい
・!= : 等しくない
・> : より大きい
・< : より小さい
・>= : 以上
・<= : 以下
上記の比較演算子を使用して、empnoが7900より大きい行に絞るということも可能です。
この場合は、 where empno>7900 のように指定します。
SQL> select empno,ename,job from emp
2 where empno>7900;
EMPNO ENAME JOB
ーーーー ーーーーーーーーーー ーーーーーーーーーーー
7902 FORD ANALYST
7934 MILLER CLERK
SQL>
AND や OR を使用して複数の条件を使ってデータを絞り込むこともできます。
・AND : すべての条件が満たされる場合のみデータを取得
・OR : いずれかの条件が満たされる場合にデータを取得
例えば JOB が SALESMAN で、 empno が 7600 より小さい行に絞るという場合は、 where job=’SALESMAN’ and empno<7600 のように指定します。
SQL> select empno,ename,job from emp
2 where job=’SALESMAN’ and empno<7600;
EMPNO ENAME JOB
ーーーー ーーーーーーーーーー ーーーーーーーーーーー
7499 ALLEN SALESMAN
7521 WARD SALESMAN
SQL>
[参考]
SQL言語リファレンス – where_clause
order by でデータを並べ替える
取得したデータを特定の順序で並べ替えたい場合、ORDER BY句を使用します。
デフォルトでは昇順(小さい順)で並べ替えますが、降順(大きい順)に並べ替えることも可能です。
・ASC : 昇順(小さい順)※デフォルト
・DESC : 降順(大きい順)
並べ替えを行う場合は以下のような構文を使用します。
order by <列名> [ asc | desc ]
例えばempnoを降順で並べ替える場合は、 order by empno desc のように指定します。
SQL> select empno,ename,job from emp
2 where empno > 7800
3 order by empno desc;
EMPNO ENAME JOB
ーーーー ーーーーーーーーーー ーーーーーーーーーーー
7934 MILLER CLERK
7902 FORD ANALYST
7900 JAMES CLERK
7844 TURNER SALESMAN
7839 KING PRESIDENT
SQL>
※empnoが降順(大きい順)で並べ替えられている。
[参考]
SQL言語リファレンス – order_by_clause
まとめ
SELECT文は、データベースから情報を取得するための最も基本的なSQLコマンドです。しかし、その柔軟性と応用範囲の広さから、非常に強力なツールでもあります。この記事では、SELECT文の基本的な使い方から、WHERE句、ORDER BY句を説明しました。オラクルデータベースを操作する際は、これらを駆使して、効率的にデータを取り出しましょう。
コメント