よつやTips

元IT技術者がおくる情シス超入門:VB.NET / SQLServer

【SQL】超初心者向け!抽出(SELECT)基本の構文

こんにちは、四ツ屋です。

今日はSQLServerに格納したデータを抽出する基本的な方法について紹介したいと思います。

 

概要編ではSQLServerのデータのやり取りは、
SELECT(抽出)
INSERT(新規登録)
UPDATE(更新登録)
DELETE(削除)
この4つとお伝えしましたが、そのうちの「SELECT」について、紹介していきます。

 

■データ抽出「SELECT」の基本構文
SELECT [フィールド名]
FROM [テーブル名]

実はこれだけなのです。かんたんですね。
かんたんすぎて笑えますが、本当にこんなものです。
あとは必要なオプションを付け足していくだけです。

 

1.抽出したい条件を指定する。
SELECT [フィールド名]
FROM [テーブル名]
WHERE [条件式]

条件は、WHERE句で設定します。
たとえば、名簿の中から女性のみを抽出したい場合は、
SELECT *
FROM [名簿]
WHERE 性別 = 女性

こういうイメージですね。

補足ですが、SELECTのあとの「*(アスタリスク)」はFROMで指定したテーブルのすべてのカラムを表示するときに使います。

便利なのでつい使ってしまいますが、抽出した結果、全カラムが表示されるのでデータ量が多い場合にはその分抽出結果の表示に時間がかかります。

パフォーマンスを気にする場合は注意してください。


さて、WHERE句には条件式を入れればいいので、たとえば「性別 = 女性」以外にも、
「年齢>19」で、20以上のひとを絞り込むことができます。

複数の条件を指定したい場合には、ANDやORでつなげることができます。

SELECT *
FROM [名簿]
WHERE 性別 = 女性
AND 年齢 > 19

これで、20歳以上、かつ性別が女性のレコードのみを抽出することができます。
OR句を使った例であれば、

SELECT *
FROM [名簿]
WHERE 性別 = 女性
OR 年齢 BETWEEN 10 AND 20

上記の用に、性別が女性、または年齢が10歳~20歳までの人を抽出することが可能です。
比較演算子など、様々な条件で抽出ができます。

どうでもいいけど、コードを記述するならSyntaxhighlight入れたほうが見やすいですよね。勉強したら入れますw

 

2.抽出した結果の列を整理する。

SELECT [フィールド名]
FROM [テーブル名]

さきほど、「*(アスタリスク)」を使うことで全カラムを抽出できるというお話をしましたが、ここでカラムを指定する場合の方法です。

SELECT [ID], [Name], [Sex]

FROM [名簿]

このように、DBのカラム名をカンマ区切りで記述することにより、指定したカラムの結果のみが表示されます。

また、基本的にカラムの物理名は英語で記述することが多いです。

上記のクエリでいうところの、ID、Name、Sexなどですね。パッと見た時に英語になってしまいますが、結果表示の際の列名を変更したい場合は、AS句をつけることによって、表示名を変更することができます。

その場合には下記のように記述します。

SELECT [ID] AS '会員ID', [Name] AS '会員名', [Sex] AS '性別'

FROM [名簿]

上記のように記述することで、「ID」は「会員ID」、「Name」は「会員名」、「Sex」は「性別」というように、分かりやすい列名に変更することができます。

結果を列名ごとコピー(Shift + Ctrl + C)したあとにエクセル等にペーストする場合には後から列名を変更する必要がなくなりますので、ルーチン化するような作業の場合はとても便利です。

 

■データ抽出時のロックについて

ロックってなんじゃそりゃ?って方も多いかと思います。

データベースにはロックという機能があり、これが非常に面倒くさい重要だったりします。

たとえば、ロックをかけないで何でもかんでもデータの変更ができちゃうぜ!ってなってしまった場合、データがおかしなことになってしまうことがあります。

データがあるべき状態にあるかどうかを「データの整合性」というのですが、データの整合性保持のために、ロックをかける必要があります。

・更新ロック(見るのはいいけど更新・削除はNG)

・読取ロック (見るのもだめよ~)

上記の二つがあります。

読取ロックの場合には、SELECTで抽出しようとしても抽出できません。

また、WEBシステムなど、不特定多数の人がデータの更新を行う場合には特に気をつける必要があります。

その場合はWITH NOLOCKでロックをかけないようにするなどの工夫が必要です。

 

↓参考サイト

[SQL Server]SQLServerのNOLOCKロックヒント(ダーティーリードがしたい) | 開発備忘録&ふと思ったこと