SELECT文はOracleデータベースを操作する上で最も基本的かつ重要なSQL文です。この文を使用することで、テーブルから必要な情報を抽出したり、条件を指定してデータを絞り込むことができます。本記事では、SELECT文の構文、基本例、応用例に加え、ベストプラクティスや注意点も詳しく解説します。
リンク
リンク
リンク
SELECT文の基本構文
以下がSELECT文の基本的な構文です。
SELECT カラム名1, カラム名2, ...
FROM テーブル名
WHERE 条件
ORDER BY カラム名 [ASC|DESC];
各キーワードの詳細
- SELECT:取得したいカラムを指定します。
*
を使用するとすべてのカラムを取得可能ですが、必要最小限のカラムを指定することを推奨します。 - FROM:データを抽出する元となるテーブルを指定します。
- WHERE:条件を設定することでデータを絞り込みます。効率的なクエリにはインデックスを考慮した条件設定が重要です。
- ORDER BY:結果を指定したカラムで並び替えます。デフォルトは昇順(ASC)です。
- DISTINCT:重複を排除したデータを取得します。
SELECT文の基本使用例
以下に、SELECT文を使用した具体的な例を示します。
1. テーブルの全データを取得
「EMP」テーブルの全てのデータを取得します。ただし、実際の運用では*
を避け、必要なカラムを明示することが推奨されます。
SELECT *
FROM EMP;
2. 必要なカラムのみを取得
「ENAME」と「JOB」カラムのみを取得します。特定のカラムを明示することで、パフォーマンスが向上します。
SELECT ENAME, JOB
FROM EMP;
3. WHERE句を使用したデータの絞り込み
部門番号が「10」の社員を取得します。条件に適したインデックスが存在する場合、クエリ性能が向上します。
SELECT ENAME, JOB, DEPTNO
FROM EMP
WHERE DEPTNO = 10;
4. ORDER BY句を使用した並び替え
部門番号順(昇順)で社員データを並び替えます。
SELECT ENAME, JOB, DEPTNO
FROM EMP
ORDER BY DEPTNO ASC;
5. DISTINCTを使用した重複の排除
部門番号(DEPTNO)の重複を排除して取得します。
SELECT DISTINCT DEPTNO
FROM EMP;
6. 別名(ALIAS)を使用したカラム名の変更
カラム名を分かりやすく変更して表示します。
SELECT ENAME AS “社員名”, JOB AS “職種”
FROM EMP;
SELECT文の応用例
1. 集計関数を使用したデータの要約
「EMP」テーブルの社員数を取得します。
SELECT COUNT(*) AS “社員数”
FROM EMP;
2. GROUP BY句を使用したグループ化
部門ごとの平均給与を計算します。
SELECT DEPTNO, AVG(SAL) AS “平均給与”
FROM EMP
GROUP BY DEPTNO;
3. HAVING句を使用したグループ化条件の設定
平均給与が3000以上の部門を取得します。
SELECT DEPTNO, AVG(SAL) AS “平均給与”
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL) >= 3000;
4. サブクエリを使用した条件の設定
最高給与の社員を取得します。
SELECT ENAME, SAL
FROM EMP
WHERE SAL = (SELECT MAX(SAL) FROM EMP);
5. JOINを使用した複数テーブルの結合
「EMP」テーブルと「DEPT」テーブルを結合して、部門名を取得します。
SELECT E.ENAME, E.JOB, D.DNAME
FROM EMP E
JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
ベストプラクティスと注意点
- カラムの明示
SELECT *
を避け、必要なカラムのみを指定することで、クエリの効率を向上させます。
- インデックスの活用
- WHERE句やJOIN条件でインデックスが使用されるように設計すると、性能が向上します。
- 実行計画の確認
EXPLAIN PLAN
を使用してクエリの実行計画を確認し、最適化を行いましょう。
- 適切な権限設定
- SELECT文を使用するユーザーには必要最小限の権限を付与することで、セキュリティを確保します。
まとめ
SELECT文は、データベース操作の基本でありながら、さまざまな応用が可能な強力なツールです。本記事では基本構文から応用例、そしてベストプラクティスまでを詳しく解説しました。実践を通じてこれらの技術を習得し、データベース操作スキルを向上させましょう。さらなる学びの一歩として、複雑なクエリの構築やパフォーマンスチューニングにも挑戦してみてください。
[参考]
Oracle Database SQL言語リファレンス 19c
コメント