Gmailですべてのメールを表示させます。
検索ボックスに
-in:spam -in:trash -is:sent -in:drafts -in:inbox
スパムにはいってるもの、送信済みや下書き等に入ってるものも全て表示されます。
こんにちは、四ツ屋です。
今日は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ロックヒント(ダーティーリードがしたい) | 開発備忘録&ふと思ったこと
半角が含まれてるかどうかの比較なら、バイト数で全角と半角の比較をすればかんたんに出来ますが、もう一種、比較の場合について。
SELECT *
FROM [TableName] WITH(NOLOCK)
WHERE ([FieldName] LIKE '%[ア-ン]%' COLLATE Japanese_BIN)
これでもイケちゃうというやつです。
SQLServerでは通常、全角と半角の区別を付けてくれないのですが、CALLATE句を利用することによって、照合順序を変更することができます。
詳細はこの辺を参考にどうぞ。↓
print DATALENGTH('アイウエオ')
print DATALENGTH('アイウエオ')
↓実行結果
10
5
SQLServerは全角と半角の区別がつかない的なアレコレがあった気がするのですが、上記関数でさくっと解決しました。
こんにちは。暑くて外に出る気がしない四ツ屋です。
今日はSQLServerのデータ構造の基本をさらっとお伝えしますね。
夏なのでさらっと……
1.データベース
2.テーブル
3.カラム(列)
4.レコード(行)
5.フィールド
これだけ覚えておけばとりあえずは大丈夫です。
■データベース構造の中身について
1.データベースについて
アプリケーションソフトのデータを格納する「箱」のようなものです。
システムの構造によって、データベースの構造は変わります。
例えば、アプリケーションとデータベースは1:1には限りません。
たとえば、会社内で同一の商品マスタを複数の部署が参照し、その部署ごとに出荷管理システムが存在する場合、1つのアプリケーションで複数のデータベースを参照することもありますね。
複数のテーブルの集まりが「データベース」です。
2.テーブルについて
では、データベースの中身「テーブル」についてです。
データベースがエクセルファイル本体だとすると、テーブルとは表、ワークシートのようなものです。
テーブルはそれぞれ、格納する内容によって名前をつけ、その中身が分かるようになっています。
ひとつのテーブルに何でもかんでも入れればいいというわけではないので、データの種別ごとにテーブルが分けられるように設計されるのが通常です。
3.カラム(列)
テーブルの構造は設計・開発時に決められ、後から変更する場合には注意が必要です。
アプリケーションでデータの登録・更新をするなどの場合に、データベース側だけ変更がかかっていると、エラーになることがあるためです。
そのため、データベースのカラムを追加・削除したり、変更したりする場合には、アプリケーションの利用を止めることがあります。
カラムとは、テーブルの「列」のことです。
分かりやすく「住所録」で例えると、名前、住所、電話番号など、どの情報を格納するか、が決められています。
また、カラムごとに、どのようなデータの形式かを格納するかも決めます。
この形式のことを「データ型」といいます。
たとえばエクセルではセルごとにフォーマットを「文字列」や「数値」「日付」などを設定することができますが、SQLServerではカラムごとに決めています。
エクセルのようにセルごとにデータ型を変えることはできません。
4.レコード(行)
レコードとは、テーブルの「行」のことです。
テーブルという「表」において、カラムが列、レコードが行ですね。この概念が非常に重要です。
レコードは、アプリケーションの操作や、クエリによって新規登録、更新、削除を行うことができ、その場合、カラムとは異なり、追加・変更をする場合にも特にデータベースの構造が変わる訳ではありません。
(図)カラムとレコード、テーブルの説明図です。
5.フィールド
フィールドとは、上記の図でいうところの各セルを指します。
例えばデータベース上で一つのフィールドの値を特定するには、どのレコードのどのカラムか、ということがわかれば特定ができます。
フィールドに入る値は、カラムで設定した書式に基づいた値を格納しています。
■正規化とは?
先程、テーブルの説明で「何でもかんでも入れればいいというわけではない」と書きました。
例えば、サイトで会員登録したユーザー情報と、その会員のサイトでの購入履歴は同じテーブルに格納することは基本しません。
まったく用途が異なるものだからです。
そういった場合は、ユーザーのIDだけを、購入履歴側のテーブルに格納することによって、どのユーザーがいつ、何を購入しているのかが分かるようになります。
どこまで同じテーブルに入れ、どれを異なるテーブルに格納するかは、アプリケーションの設計によりますが、要は、効率よくデータベースを管理するか?ということにあります。
正規化は詳しくやるとものすごくめんどうくさいので、もっと教えろよ四ツ屋!という方は、こういうサイトをご覧頂くといいかなと思います。
こんばんは。四ツ屋です。 毎日あつくてへばりそうです。
本日は手始めに、SQLServerについて少し話をしたいと思います。
まずは概要から、ざくっと説明していこうと思います。
■SQLServerとは?
SQLとか、サーバーとか。システムに触っているとよく見かける単語かと思います。
SQLServerとは、Microsoftから出ている、データベースの管理システムを指します。
同様のものは、OracleやMySQL、Postgreなどがありますね。
こちらで紹介をしていくのはMicrosoft SQL Serverとします。
データベース(以下、DB)というのは、平たくいえばデータ(情報)を入れる箱のことです。
実態はmdfファイルという、ファイルの中にデータが収められています。
この中身にデータを入れたり、データを取り出したり、更新したりするのです。
■何を入れておくの?
基本的には、結構何でも入っちゃいます。
文字、数値、日付なんかが一番よく使われますね。
補足ですが、データベースにはそれぞれ「データ型」(かた、と読みます)が決まっていて、どこにどんな型のデータを入れるかは、データベースの構造を決めるときに、管理者が設計します。
例えば、エクセルも各セルごとに、書式を「文字列」や「数値」「金額」などに設定すると、¥マークがついたりしますよね。データベースでは、それが列ごとに決められていると思えば、想像がつくでしょうか。
■実際、どんな風に使われるの?
アプリケーションから、入力したデータや計算されたデータを、データベースに格納します。
最も基本的な構文はこの4つだけです。
SELECT(抽出)
INSERT(新規登録)
UPDATE(更新)
DELETE(削除)
意外と少ないと思われそうですが、こんなものだったりします。
あとは、データが入っているテーブルをあれこれいじったりする構文もありますが、基本のデータやりとりはこれだけ覚えておけば間違いないです。
■管理用のアプリケーションについて
データベースの作成や、中身のデータを見るには、じゃあどうしたらいいの?
という話になりますよね。大丈夫です。Microsoftさんですから、ぬかりないですね。
Microsoft SQLServer Management Studio (ばばーん!)
というソフトがあります。
大事なことなので赤くしました。(笑)
SQLServerもアプリケーションですが、こちらはデータベースを管理するアプリケーションです。
アプリケーションとのやりとり以外は、ManagementStudioで、ほとんどのことができてしまいます。
次回は、環境の構築方法をお話しします!