問合せの基本はSELECT文
ここまででも、使用例で何度も使ってきましたが、問合せの実行にはSELECT文を用います。単純な問合せのSELECT文は、SELECT句とFROM句から構成されます。書式 SELECT <列名1>,<列名2>,・・・ FROM <表名>;
SELECT句は、SELECTキーワードと列名から構成され、FROM句はFROMキーワードと表名から構成されています。 SELECT句の列名は、どの列のデータを取り出すかを指定するものです。複数の列を取り出す場合には、列と列の区切りに「,」(カンマ)を使います。 FROM句の表名は、データが格納されている表をしてしています。複数の表を指定することも可能です。FROM句の指定についてはこちらを参照してください。 
【SQLの基礎知識⑭】 表の指定(FROM句)と結合
SQLにおける表の指定と結合について解説します。具体的なSQL文を使って、まずはFROM句の記述について解説し、そのあとで複数の表の結合について解説します。いちれべ.comは、オラクル、MS-SQL、MS-Access で使用可能か一目でわかるサイトです。
すべての列の読み出し
問合せで、表のすべての列を読み出すこともできます。すべての列を取り出すときには、すべての列名をSELECT句に記述しても良いのですが、列名が増えると大変になります。このようなときには、「*」(アスタリスク)を使います。書式 SELECT * FROM <表名> ;
SELECT句に「*」を指定すると、FROM句で指定した表に定義されているすべての列が返されます。行の出力順序はRDBMS製品により異なりますが、表の内部での順序で返すものが多いようです。
ここでは、「学生名簿」表があるとして、この表のすべての列のデータを出力してみます。
SQL文 SELECT * FROM 学生名簿;
実行結果
学生番号 | 名前 | 入学年度 | 性別 |
1 | 山田太郎 | 1998 | 男性 |
2 | 佐藤花子 | 1998 | 女性 |
3 | 鈴木美穂 | 1999 | 女性 |
4 | 斉藤隆 | 2000 | 男性 |
ここでは、この「学生名簿」表を使って解説をしていきます。
特定の列の読み出し
表への問合せにおいて、常にすべての列が必要な訳ではありません。表の中から必要な列だけを取り出したいこともあります。そのようなときには、表から特定の列だけを問合せをするようなSQL文をつくります。 SELECT句の列名の指定に、取り出したい列名だけを記述します。複数の列を取り出したい場合には、指定した列と列の間を「,」(カンマ)で区切ってください。 「学生名簿」表から、「学生番号」列と「名前」列だけを取り出す場合には、次のように指定します。SQL文 SELECT 学生番号, 名前 FROM 学生名簿;
実行結果
このように指定した2列だけが、出力されます。学生番号 | 名前 |
1 | 山田太郎 |
2 | 佐藤花子 |
3 | 鈴木美穂 |
4 | 斉藤隆 |
出力する列の順序の指定
問合せでは、列の出力順序を指定することもできます。SELECT句で出力したい値に列名を指定するのです。このとき、指定したあ列と列の間を「,」(カンマ)で区切るのは、先ほどの特定の列の問合せと同じです。 先ほどの「学生名簿」表の列の出力を、「入学年度」列、「名前」列、「学生番号」列、「性別」列の順番に出力するには、次のように入力します。SQL文 SELECT 入学年度, 名前, 学生番号, 性別 FROM 学生名簿;
実行結果
列が指定した順番に変更されて出力されています。このように、列は目的に応じて順序を指定して読み出すことができます。入学年度 | 名前 | 学生番号 | 性別 |
1998 | 山田太郎 | 1 | 男性 |
1998 | 佐藤花子 | 2 | 女性 |
1999 | 鈴木美穂 | 3 | 女性 |
2000 | 斉藤隆 | 4 | 男性 |
重複行をまとめる
問合せにおいて、ある列の値を取得するときに重複するデータが存在する場合があります。通常のSELECT文では、重複するしないにかかわらずすべての値を出力しますが、場合によっては値が異なるデータだけを出力したいこともあります。このようなときにはDISTINCTキーワードを使います。書式 SELECT DISTINCT<列名> FROM <表名>;
例えば、学生の入学年度が何種類あるかを知りたいといったことがあります。まず通常のSELECT文で「入学年度」列を出力してみます。
SQL文 SELECT 入学年度 FROM 学生名簿;
実行結果
入学年度 |
1998 |
1998 |
1999 |
2000 |
結果に「1998」が2つあることがわかります。入学年度にいくつの種類があるかを知りたいのですから、この重複は不要です。そこで、DISTINCTキーワードを使って、次のように入力してみます。
SQL文 SELECT DISTINCT 入学年度 FROM 学生名簿;
実行結果
入学年度 |
1998 |
1999 |
2000 |
重複した行がまとめられ、入学年度の種類がいくつあるかがひと目でわかります。
逆に、必ず重複したデータも表示させたい場合にはどうすれば良いでしょうか?この場合には、ALLキーワードを用います。ただし、SQLは何も記述しない場合には、ALLが指定されているものとして処理を行っているので、ALLを指定する必要はありません。この場合、ALLは暗黙的に指定されているといいます。
結果の列名に別名を使う
問合せの出力結果の列に対して、別の列名を指定することができます。これを別名と呼びます。 SELECT文の問合せで、単にデータを読み出すだけなら、別名はあまり使う必要がありませんが、問合せの結果に対して演算を行う場合には、有用な機能になります。RDBMS製品によって異なりますが、演算を行うSQL文では、演算を行った結果の列名には、何も表示されないか演算の数式が表示されてしまいます。そのため、演算を行った結果に対してわかりやすい別名を付けることで、理解がしやすくなります。書式 ORACLE MS-SQL <列名> 別名 MSAccess <列名> AS 別名
書式から見てわかるように、列または列を含んだ演算の後ろに空白を入れてから別名を指定するか、ASキーワードを用いて別名を指定します。ここでは、空白を入れて指定するよにしていますが、MSAccessの場合には、必ずASキーワードを使う必要があるので注意してください。
表:販売リスト
商品コード | 商品名 | 単価 |
1 | ドローン | 7600 |
2 | カメラ | 1200 |
3 | スマホ | 11000 |
4 | タブレット | 8900 |
例えば商品を販売する場合には、単価に「1.1」をかけたものとなり、各製品の原価は「0.72」をかけたものになるとします。この結果を乗算で求めるときに、それぞれに「販売単価」と「原価」という別名を指定するいは、次のように記述します。
SQL文 SELECT 商品名,単価,単価*1.1 販売価格,単価*0.72 原価 FROM 販売リスト;
実行結果
商品名 | 単価 | 販売価格 | 原価 |
ドローン | 7600 | 8360 | 5472 |
カメラ | 1200 | 1320 | 864 |
スマホ | 11000 | 12100 | 7920 |
タブレット | 8900 | 9790 | 6408 |
関連リンク
次の章へ進む

【SQLの基礎知識⑪】 条件(WHERE句)を付けた問合せ
この章では条件を付けた問合せ(WHERE句)の基本を習得できます。論理演算子を使った複合条件での問合せについても、具体的なSQL文とその実行結果を確認できます。いちれべ.comは、オラクル、MS-SQL、MS-Access で使用可能か一目でわかるサイトです。
目次

【SQLの基礎知識】基本ルールや基礎の基礎をマスターしよう
こちらの記事を読み進めることで、SQLの基礎が充分に身に付きます。これからSQLを身に着けたい初心者・入門者の方に最適です。データベース製品ごとに表現方法が異なることがありますので、ある程度SQLのスキルがある方も利用できるサイトです。