【初級編⑥】SQLのSELECT文の基本的な構文

【初級編⑥】SQLのSELECT文の基本的な構文

公開日 : 2013年12月22日 / 更新日 : 2017年12月29日

 
 

初級編

 
 

 
 

 
 

SQLを学ぶ上で一番重要と言っても過言ではないのが「SELECT文」です。どのデータベースにもSELECT文は存在し、書き方もよく似ているので、基本的な書き方をマスターしていれば違うデータベースで開発をする際にもすぐに慣れてくるでしょう。

今回は、SELECT文の基本的な構文を丁寧に解説したいと思います。

目次 [非表示]

1

SELECT * FROM Table_Syain

最も簡単なSELECT

<実行結果>


SELECT文の構文はこんな感じです。

1

SELECT 列名1, 列名2, ・・・ FROM テーブル名 WHERE 条件

SELECT文の構文

まず、SELECTからFROMまでの間(ここを「SELECT句」と言います)に取得したい列名を書きます。複数ある場合はカンマで区切ります。そして、FROMからWHEREまでの間(ここを「FROM句」と言います)に対象のテーブル名を書きます。条件を指定する場合はWHEREの後ろ(ここを「WHERE句」と言います)に条件を書きます。(WHERE句は後述します)また、それぞれの単語の間は半角スペースを入れます。

最も簡単な方法では、列名のところに「*」を指定しましたが、「*」はワイルドカード(全て)になりますので、この一文字で「全ての列を取得する」ことを表しています。


また、列名の指定と「*」は自由に組み合わせることも可能です。


さらに、列は取得したいものだけ記述すればよく、SELECT句に記述した順番通りに取得されます。


列名の指定

SELECT句に記述する列は、テーブルに存在する列である必要はありません。自分で勝手に列を作ることも可能です。


表示される結果の見出しを自分で指定する(変更する)こともできます。その場合は、AS を使用します。

1

SELECT 列名 AS 表示する列名 FROM テーブル名


AS の後ろに書いた文字は、あくまでSELECTされた結果の表示列名(見出し)になります。[社員番号]の部分は、[Table_Syain]テーブルから取得する列を指定(社員番号)しています。

昇順/降順の並び替え ~ ORDER BY

SELECTした結果を並び替えるには「ORDER BY」句を使用します。ORDER BYの使い方は次のとおりです。

1

SELECT 列名 FROM テーブル名 WHERE 条件 ORDER
BY キー列1 [ASCまたはDESC] ,キー列2 [ASCまたはDESC] , ・・・


WHERE句の後ろから、ORDER BY と続けて、並び替えに指定したいキーとなる列を指定し、続けて[ASC][DESC]と書きます。[ASC]の場合は昇順、[DESC]の場合は降順に並べ替えられます。2つ以上のキーで並べ替えたい場合は、カンマで区切って同じように指定します。また、[ASC][DESC]を省略した場合は自動的に[ASC]が指定されます。


これをエクセルでやった場合、このようになります。


上位N件の取得
TOP

SELECTした結果の中から、上位N件を取得したい場合、「TOP」を使用します。直感で分かると思いますが、TOP 1 と指定すると先頭の1件だけ取得されます。

TOPを使用した構文は次のとおりです。

1

SELECT
TOP N * FROM テーブル名


SELECTした結果に対して、先頭から[N]で指定した件数だけを取得します。「TOP N」はあくまで先頭から件分という意味でしか無いので、列名の指定(画像では*)は必ず必要です。

また、先頭から件というのは、3.のORDER BY で並び替えた結果に対してなので注意が必要です。


四則演算 ~ + * /

SELECT文の中で、加算や減算などの四則演算が行えます。普通に「+」や「」を書けばOKです。


文字列連結 ~ +

文字列を連結(繋ぎ合わせる)場合は、「+」を使用します。加算と同じですので、間違えないように気をつけましょう。

1

SELECT 文字列1 + 文字列2 FROM テーブル名


数字の文字列連結

文字列連結で気をつけないといけないのは数字です。文字列連結の際に使用する「+」は、加算の意味も兼ねていますので、数値なのか数字なのかは明確に取り扱わないと痛い目に遭います。

基本的に数値か数字かは、SQL Server が自動的に判断します。シングルクォート「’」で囲まれている場合は文字列で、そうじゃない場合は数値型の値と判断されるのですが、混在している場合「’」で囲んでいても数値と見なされることもあります。


 
 


重複データ取り除き ~ DISTINCT

テーブル内に重複するデータがある場合「DISTINCT」を使用すれば重複を取り除けます。

1

SELECT
DISTINCT * FROM テーブル名


 
 

 
 

 
 

 
 

 
 

条件指定による絞り込み ~ WHERE

SELECTで取得するデータに条件を指定して絞り込む場合、WHERE句を使用します。WHERE句もSQLを使用する上で非常に重要です。

WHERE句は、書き方が非常に多いので一つずつ順番に説明していきます。

基本的な条件指定

最も基本的な条件の指定方法は、「ある値と一致するデータのみ抽出」するやり方です。WHERE句には「列 = 値」の形で記述します。

1

SELECT * FROM テーブル名 WHERE 列 = 値


比較演算子

「ある値と一致する」もそうですが、列の値を何かと比較して条件に合うデータのみ抽出する場合は、比較演算子を使います。使用できる演算子は次のとおりです。

種類

意味

a = b

aとbが等しい

a < b

aはbより小さい

a > b

aはbより大きい

a <= b

aはb以下(b含む)

a >= b

aはb以上(b含む)

a <> b

aとbは等しくない

<比較演算子の種類>

給料が25万円以上の人だけを抽出するには次のように条件を指定します。

1

SELECT * FROM Table_Syain WHERE 給料 >= 250000


逆に、給料が25万円未満の人だけを抽出するには次のように条件を指定します。

1

2

SELECT * FROM Table_Syain WHERE 給料

< 250000


次は、給料が25万円ではない人を抽出してみます。

1

2

SELECT * FROM Table_Syain WHERE 給料

   <> 250000


複数の条件を組み合わせる場合

「性別が男で、かつ給料が25万円以上」や「性別が女、または給料が40万円以上」のように、条件を複数している場合は論理演算子を使います。

種類

意味

a AND b

aかつbの場合

a OR b

aまたはbの場合

論理演算子

「性別が男で、かつ給料が25万円以上」は次のように条件を指定します。

1

SELECT * FROM Table_Syain WHERE 性別 = ‘男’ AND 給料 >= 250000


「性別が女、または給料が40万円以上」は次のように条件を指定します。

1

SELECT * FROM Table_Syain WHERE 性別 = ‘女’ OR 給料 >= 400000


a = b」と「a AND b」を混同しない

a = b」と「a AND b」は似ているように見えますが、全く意味が違うのではっきりと違いを理解しましょう。

a = b」は値を比較する条件式であり、abが等しいか、そうでないか、ということを表しています。abが等しいという条件に合致する場合、結果は「真である」と言います。反対に条件に合致しない場合、結果は「偽である」と言います。真偽を確かめるの真偽ですね。

これと比べて「a AND b」は、条件式aと条件式bがどちらも「真」の場合、「a AND b」は「真」になりますが、abのどちらかでも(両方でも)「偽」の場合、「a AND b」は「偽」になります。文章で説明すると難しいので図にしてみました。


 
 


BETWEEN

数値や日付をFromToで範囲指定する場合は「BETWEEN」を使用します。FromToは、a以上b以下という意味になり、「WHERE BETWEEN a AND b」と記述します。「WHERE >= a AND

<=b 」と同じ結果になります。

年齢が25才以上35歳以下のデータを抽出するには次のように記述します。

1

SELECT * FROM Table_Syain WHERE 年齢 BETWEEN 25 AND 35


もちろん、次のように書いても同じ結果です。


IN

ある列が、複数の値の中からどれか一つに該当するかどうか、という条件を指定する場合は、「IN」を使います。

例えば、社員番号が「00001」か「00002」か「00003」のどれかに該当するデータを抽出するには、次のように記述します。

1

SELECT * FROM Table_Syain WHERE 社員番号 IN (‘00001’, ‘00002’, ‘00003’)


これは次のように書いても同じ結果になりますが、「IN」を使った方が簡単なことが分かります。

1

SELECT * FROM Table_Syain WHERE 社員番号 = ‘00001’ OR 社員番号 = ‘00002’ OR 社員番号 = ‘00003’


IS NULL

NULLを含むデータがある場合、NULLを検索条件で指定する場合は「IS NULL」を使用します。「= NULL」ではないので注意が必要です。また、NULLとブランクは全く違うのでその点も注意が必要です。


上のようなテーブルがある場合、Address列を条件指定して、一行目を抽出するには次のように記述します。

1

SELECT * FROM Table_NULL WHERE Address = ”


では、AddressNULLのデータを抽出してみましょう。まずは「= NULL」を指定した場合

1

SELECT * FROM Table_NULL WHERE Address = NULL


Address IS NULL」とした場合、NULLのデータだけが抽出されていることが分かります。ブランクのデータは抽出されていません。

1

SELECT * FROM Table_NULL WHERE Address IS
NULL


NULLではないデータ」を抽出するには、「Address IS NOT NULL」とします。

1

SELECT * FROM Table_NULL WHERE Address IS
NOT
NULL


LIKE

文字列であいまい検索する場合は、「LIKE」を使います。ワイルドカード検索なんて言い方もしますが、「%」は0文字以上の任意の文字列を表し、「_」は任意の1文字を表すことができます。これを組み合わせることで、「長谷川から始まる」などの前方一致検索や、「一夫で終わる」などの後方一致検索も可能です。

社員テーブルで「山田で始まる」社員を検索するには次のように記述します。

1

SELECT * FROM Table_Syain WHERE 社員名


完全なあいまい検索をする場合は、検索対象の文字を「%」で囲みます。例えば「%山田%」とすると、山田の前には何かしらの文字があっても無くてもいいし、山田の後ろにも何かしらの文字があっても無くてもいい、ということになり、文字列中のどこかに「山田」という文字が出現すrばOKということになります。

1

SELECT * FROM Table_Syain WHERE 名前 LIKE ‘%山田%’


 
 

貼り付け元 <https://kaya-soft.com/sqlserver2008-toranomaki/beginner/beginner/basic_select/>

 
 

  • Pocket
  • LINEで送る
  • このエントリーをはてなブックマークに追加

powered by Free WordPress Theme Principle

Copyright © ディズニー好きなコンビニ経営者ブログ All Rights Reserved.

Menu

HOME

TOP

テキストのコピーはできません。