データベースからデータを読み出すことを問合せといいます。また、問合せのことをクエリや照会と呼ぶこともあります。問合せの実行にはSELECT文を用います。問合せはSQLの中で最も基本的な機能です。
問合せの基本はSELECT文
ここまででも、使用例で何度も使ってきましたが、問合せの実行にはSELECT文を用います。単純な問合せのSELECT文は、SELECT句とFROM句から構成されます。
SELECT句は、SELECTキーワードと列名から構成され、FROM句はFROMキーワードと表名から構成されています。
SELECT句の列名は、どの列のデータを取り出すかを指定するものです。複数の列を取り出す場合には、列と列の区切りに「,」(カンマ)を使います。
FROM句の表名は、データが格納されている表をしてしています。複数の表を指定することも可能です。FROM句の指定についてはこちらを参照してください。
すべての列の読み出し
問合せで、表のすべての列を読み出すこともできます。すべての列を取り出すときには、すべての列名をSELECT句に記述しても良いのですが、列名が増えると大変になります。このようなときには、「*」(アスタリスク)を使います。
SELECT * FROM 学生名簿;
実行結果
学生番号 | 名前 | 入学年度 | 性別 |
1 | 山田太郎 | 1998 | 男性 |
2 | 佐藤花子 | 1998 | 女性 |
3 | 鈴木美穂 | 1999 | 女性 |
4 | 斉藤隆 | 2000 | 男性 |
特定の列の読み出し
表への問合せにおいて、常にすべての列が必要な訳ではありません。表の中から必要な列だけを取り出したいこともあります。そのようなときには、表から特定の列だけを問合せをするようなSQL文をつくります。
SELECT句の列名の指定に、取り出したい列名だけを記述します。複数の列を取り出したい場合には、指定した列と列の間を「,」(カンマ)で区切ってください。
「学生名簿」表から、「学生番号」列と「名前」列だけを取り出す場合には、次のように指定します。
SELECT 学生番号, 名前 FROM 学生名簿;
実行結果
学生番号 | 名前 |
1 | 山田太郎 |
2 | 佐藤花子 |
3 | 鈴木美穂 |
4 | 斉藤隆 |
このように指定した2列だけが、出力されます。
出力する列の順序の指定
問合せでは、列の出力順序を指定することもできます。SELECT句で出力したい値に列名を指定するのです。このとき、指定したあ列と列の間を「,」(カンマ)で区切るのは、先ほどの特定の列の問合せと同じです。
先ほどの「学生名簿」表の列の出力を、「入学年度」列、「名前」列、「学生番号」列、「性別」列の順番に出力するには、次のように入力します。
SELECT 入学年度, 名前, 学生番号, 性別 FROM 学生名簿;
実行結果
入学年度 | 名前 | 学生番号 | 性別 |
1998 | 山田太郎 | 1 | 男性 |
1998 | 佐藤花子 | 2 | 女性 |
1999 | 鈴木美穂 | 3 | 女性 |
2000 | 斉藤隆 | 4 | 男性 |
列が指定した順番に変更されて出力されています。このように、列は目的に応じて順序を指定して読み出すことができます。
重複行をまとめる
問合せにおいて、ある列の値を取得するときに重複するデータが存在する場合があります。通常のSELECT文では、重複するしないにかかわらずすべての値を出力しますが、場合によっては値が異なるデータだけを出力したいこともあります。このようなときにはDISTINCTキーワードを使います。
SELECT 入学年度 FROM 学生名簿;
実行結果
入学年度 |
1998 |
1998 |
1999 |
2000 |
SELECT DISTINCT 入学年度 FROM 学生名簿;
実行結果
入学年度 |
1998 |
1999 |
2000 |
結果の列名に別名を使う
問合せの出力結果の列に対して、別の列名を指定することができます。これを別名と呼びます。
SELECT文の問合せで、単にデータを読み出すだけなら、別名はあまり使う必要がありませんが、問合せの結果に対して演算を行う場合には、有用な機能になります。RDBMS製品によって異なりますが、演算を行うSQL文では、演算を行った結果の列名には、何も表示されないか演算の数式が表示されてしまいます。そのため、演算を行った結果に対してわかりやすい別名を付けることで、理解がしやすくなります。
ORACLE MS-SQL <列名> 別名
MSAccess <列名> AS 別名
商品コード | 商品名 | 単価 |
1 | ドローン | 7600 |
2 | カメラ | 1200 |
3 | スマホ | 11000 |
4 | タブレット | 8900 |
SELECT 商品名,単価,単価*1.1 販売価格,単価*0.72 原価 FROM 販売リスト;
実行結果
商品名 | 単価 | 販売価格 | 原価 |
ドローン | 7600 | 8360 | 5472 |
カメラ | 1200 | 1320 | 864 |
スマホ | 11000 | 12100 | 7920 |
タブレット | 8900 | 9790 | 6408 |