プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【SQL Server(連載)】SELECT文 (レコードの抽出 WHERE) -4-

www.pon-x.jp

前回は、SELECT文においてカラムの制御を勉強しました。
今回は、行(レコード)を制御したいと思います。

ちなみにリレーショナルデータベースにおいて列(カラム)はデータの属性(種類)でありこれを定義したテーブルについて、行(レコード)を増やしていくという構造です。
この際、レコードの数をデータ量と呼んだりもします。

さてさて、ではやっていきましょう。

レコードを制御するためのWHERE句

PersonTypeカラムは以下のデータが存在します。

  1. IN
  2. EM
  3. SP
  4. SC
  5. VC
  6. GC

このうち、PersonTypeがEMのレコードだけを抽出したいと思います。
SQLは以下の通り。

SELECT * 
FROM Person.Person
WHERE PersonType='EM'

以下のような結果となり、データ数が273になったとおもいます。
f:id:hanabusa-snow:20201120102319p:plain

複数条件をつけるときは、論理演算で考える。

論理演算とは、AND、OR、NOT等で条件を複合的に考えるものです。
上記条件に加えて、TitleがNULLであるという条件を加えます。
NULLであるという条件は、[カラム名] IS NULL で指定します。
ちなみにNULLでないという指定は、[カラム名] IS NOT NULL で指定します。

SQLは以下の通り

SELECT * 
FROM Person.Person
WHERE PersonType='EM' AND Title IS NULL

以下のような結果となり、データ数が267になったとおもいます。
f:id:hanabusa-snow:20201120102746p:plain
AND条件(論理積)は、条件を厳しくしていくものなので、増やせば増やすほどデータ数が減っていくイメージをもつとよいでしょう。

では、次にOR条件を確認します。
PersonTypeがEMである、もしくはTitleがNULLであるレコードを抽出します。
上記のSQLのANDをORに変えるだけですね。

SELECT * 
FROM Person.Person
WHERE PersonType='EM' OR Title IS NULL

以下のような結果となり、データ数が18969になったとおもいます。
f:id:hanabusa-snow:20201120103054p:plain

OR条件(論理和)は、いずれかの条件を満たしているレコードを抽出するため条件が緩くなり、増やせば増やすほどデータが増えていくイメージをもつとよいでしょう。

IN句

PersonTypeカラムは以下のとおりでしたね。

  1. IN
  2. EM
  3. SP
  4. SC
  5. VC
  6. GC

ちなみに、このなかから、EMとSPとVCとGCのいずれかのレコードを抽出するといったとき、OR条件で結ぶのはコードを書くのが大変ですよね。
その時役に立つのが、IN句です。
以下のように書くことができます。

SELECT * 
FROM Person.Person
WHERE PersonType IN ('EM','SP','VC','GC')

結果は以下の通り
f:id:hanabusa-snow:20201120104105p:plain
結構よく使うので覚えておいた方がよいでしょう。

重複削除

そもそも、PersonTypeに存在するデータが6種類だってなんでわかったの??と思いませんでしたか??
こんなとき、カラム内のデータの重複を削除してくれる便利な「DISTINCT」というのがあります。

SELECT DISTINCT PersonType
FROM Person.Person

結果は以下の通り
f:id:hanabusa-snow:20201120104121p:plain

これで、存在するデータの種類を把握することができます。







以上、次回も引き続きSELECTです。

【Python(告知)】無料オンライン講座のお知らせ

Python初学者のための講座やります!!

東京創業ステーションからセミナー依頼をいただきました。

  1. プログラミングをはじめてみたいがどのようにはじめればよいかわからない。
  2. Pythonを触ってみたいけど、導入をどうすればわかならい。 etc...

そんな方、ぜひご参加いただければ幸いです。 以下のサイト内の、「申し込みはこちら」と案内しているリンクから東京創業ステーションの申込に遷移してください。(2段階リンクですみません)

【SQL Server(連載)】SELECT文 (カラムの選択) -3-

www.pon-x.jp

前回のつづき

今回からいよいよSQLを書いていきます。

まずはSQLを書く準備

SSMSを立ち上げましょう。
立ち上がったら、「新しいクエリ」をクリックしてください。
f:id:hanabusa-snow:20201119085330p:plain

そのあと、以下の図のようにプルダウンから「AdventureWorks2019」を選択してください。
f:id:hanabusa-snow:20201119085333p:plain

これで、「AdventureWorks2019」に対してSQLを実行できるようになります。

SELECT文

SELECT文は以下のように書きます。

SELECT [列名]
FROM  [テーブル名]

リレーショナルデータベースは、列にデータの種類を定義していき、行にデータを追加していくという形式のデータベースです。
今回行っていくのは、最も基本的な列の制御になります。

さてさて、SQLに戻りますが列名をアスタリスクに変えると、列をすべて指定できます。

SELECT *
FROM  [テーブル名]

では、ためしに以下のように記述してみましょう。

SELECT * 
FROM Person.Person

実行はヘッダの「実行ボタン」か、Windowsなら「F5」ボタンを押すとできます。
以下のように出力されます。
f:id:hanabusa-snow:20201119085821p:plain

次に、列を限定してみましょう。
以下のように列を複数選択するときは、カンマ区切りで指定する必要があります。

SELECT [列名],[列名],[列名]
FROM  [テーブル名]

それでは、試してみます。
以下のとおり記述して実行して下さい。

SELECT 
    FirstName,
    MiddleName,
    LastName 
FROM 
    Person.Person

以下のように抽出できたと思います。 f:id:hanabusa-snow:20201119090224p:plain

いかがでしょうか。
ちなみに列名のことをカラムといいますので、これからは「カラム」で統一したいと思います。

カラムを結合する。

カラムの文字列を結合したいということがたまにあります。
この際は、「+」で結合することができます。
実際に試してみましょう。

SELECT 
    FirstName,
    MiddleName,
    LastName,
    FirstName +' ' + MiddleName + ' ' + LastName
FROM 
    Person.Person

4列目を結合してあげています。
なお、間に空文字も入れていますね。
このように、カラムには固定文字も結合することができます。
以下のような結果が確認できますでしょうか。

f:id:hanabusa-snow:20201119090651p:plain
結合ができていますね。
ここであることに気づきます。

実は、結合ができていない行があるのです。(行のことはレコードと呼ぶので以下、レコードと呼びます。)
実は、NULLがあるデータは結合ができないのです。
つまり、MiddleNameはない人がいたのでNULLになっている場合があり、結合できなかったのです。

NULLとは!?

NULLとは、簡単に言うとデータが存在しないことを言います。
ちなみに、空文字とは違います。空文字は「空文字というデータ」が存在するのです。
つまり、文字列があるかないかではなく、データ自体が存在するか否かをかんがえていて、この際存在しないのがNULLです。
上記の結合できなかった例を見ると、データがあるものとないものでは結合できないという現象が起きていたことになります。

では、NULLがあるデータを処理して結合したい場合はどうすればよいかを考えます。
これは、簡単でNULLを空文字に変えてしまえばいいのです。
いろいろやり方はあるのですが、ここではSQLServerに用意されている便利な関数、ISNULL関数を使ってみます。
ISNULL関数は、以下のように使います。

ISNULL([カラム名], [カラムがNULLであった時置換したい文字列])

ですので、さきほどの結合したかったSQLは以下のように書き換えればよいのです。

SELECT 
    FirstName,
    MiddleName,
    LastName,
    FirstName +' ' + ISNULL(MiddleName,'') + ' ' + LastName
FROM 
    Person.Person

以下のようにMiddeleNameがNULLであっても無事に結合できましたね。

f:id:hanabusa-snow:20201119091544p:plain

以上、今回は簡単なSELECT文をやりました。
次回も引き続きSELECT文です。

【SQL Server(連載)】練習用のデータセットを準備しよう -2-

www.pon-x.jp

前回の続き

今回からSQLの練習と行きたかったのですが、SQLはデータがないとなにもできないので、今回はデータベースを貯ちょっと作っていきたいと思います。

ありものを拾ってくる。

データベースを一から作る練習は今後やるとして、まずは簡単な練習をするために、「AdventureWorks」というデータベースバックアップを使って、リストアしてみたいと思います。

以下より取得してください。
docs.microsoft.com

「AdventureWorks2019」を取得してください。

f:id:hanabusa-snow:20201118102005p:plain

SSMSからデータベースをリストアする。

リストアとは、簡単に言うとバックアップデータを復元することです。
今回のAdventureWorksはバックアップデータなので、これを復元させます。

  1. 「データベース」を右クリックして、「データベースを復元」を選択する。
    f:id:hanabusa-snow:20201118102009p:plain

  2. 「デバイス」を選択して、「...」をクリックする。
    f:id:hanabusa-snow:20201118102016p:plain


  3. 「追加」を選択する。
    f:id:hanabusa-snow:20201118102019p:plain


  4. 「AdventureWorks.bak」を選択する。
    f:id:hanabusa-snow:20201118102031p:plain


  5. 「復元プラン」に追加されていることを確認したら「OK」を押す。
    f:id:hanabusa-snow:20201118102035p:plain







リストアが完了したら確認してみよう。

  1. オブジェクトエクスプローラーに「AdventureWorks2019」が追加される。
    f:id:hanabusa-snow:20201118102039p:plain


  2. 「+」ボタンでドリルダウンしていき、テーブルがたくさんあることを確認する。
    f:id:hanabusa-snow:20201118102043p:plain


  3. 適当なテーブルを右クリックして「上位1000行の選択」をクリックする。
    f:id:hanabusa-snow:20201118102046p:plain


  4. SQLが自動的に生成され、データも抽出できていることを確認する。
    f:id:hanabusa-snow:20201118102049p:plain






以上、次回は本当にSQLを書いていきます。

【SQL Server(連載)】環境構築 データベースとSSMSをインストールしよう!! -1-

今回からSQL Serverの連載を始まます。
環境を構築して、SQLをハンドリングすることが目的!!
リレーショナルデータベースがいかに便利であるかということが、技術力をつけたうえで実感できることを目的としていきます。

SQL Serverには5つのエディションがあり、「Enterprise」、「Standard」、「Web」、「Developer」、「Express」に分かれます。
学習利用としての無料利用は、Expressがおすすめです。

では、インストールしていきましょう。

ダウンロード

SQL ServerをDLします。以下のサイトより行ってください。
本日時点でのバージョンはSQLserver2019です。
www.microsoft.com

以下のとおり、「Express」をダウンロードする。 f:id:hanabusa-snow:20201117093503p:plain

インストール

ダウンロードしたexeファイルを展開すると、以下の表示がされる。
学習用であれば「基本(B)」で問題ない。

f:id:hanabusa-snow:20201117093511p:plain

表示のままに「次へ」、「インストール」を押して言って問題ない。 f:id:hanabusa-snow:20201117093514p:plain

SSMS(SQL Server Management Studio)をインストール

上記のSQLServerのインストールが終わったら、SSMSのダウンロードページへのリンクボタンが表示される。
f:id:hanabusa-snow:20201117093518p:plain

以下が表示されたらDLリンクからインストーラーをダウンロードして、インストールしましょう。 f:id:hanabusa-snow:20201117093507p:plain

SSMSからデータベースに接続してみよう

SSMSを立ち上げてください。

以下のような表示が出ると思いますが、サーバー名から「参照」を開きましょう。
f:id:hanabusa-snow:20201117094912p:plain

SQLEXPRESSを選択しましょう。
f:id:hanabusa-snow:20201117094916p:plain

認証はWindows認証のままで接続しましょう。
f:id:hanabusa-snow:20201117094921p:plain

左側のオブジェクトエクスプローラーが表示されたら接続成功です。
f:id:hanabusa-snow:20201117094924p:plain









以上、ここまで。
次回からは実際にSQLを書いていこうと思います。

【Javascript】jQueryでQRコードを作る

以前にQRコードリーダーの作り方を紹介した。

www.pon-x.jp

今回は、QRコードを作る話題です。

なんとjQueryで作成できる素晴らしいライブラリが公開されているということを知り感動した!!
その名も「jquery-qrcode」!! github.com

「jquery.qrcode.min.js」をDLして、参照するだけであとは簡単に使える。
さっそく組み込んでみた。

<html>
<head>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
   <script type="text/javascript" src="jquery.qrcode.min.js"></script>
   <script>
   jQuery(function(){
       jQuery('#output').qrcode({width: 150, height: 150, text: "https://www.pon-x.jp/"});
   })
   </script>
</head>

<body>

    <div id='output'></div>                                

</body>
</html>

これは結構使えそう!!

【数学・Python】√2をシミュレーション

$\sqrt{2}$ってどうやってもとめるの!?という素朴な疑問リクエストを頂いたので、シミュレーションしてみます。

$\sqrt{2}$をシミュレーション

例えば、長さ4のメジャーから1点を選び、2より大きいか小さいかを考えます。
ただし、1点を選ぶ条件は0 ~ 2までの小数をランダムに選ぶものとし、それを2乗した値で上記の条件を比較します。

選ばれた値をAとし、もし$A^{2}$が2以下であれば、選ばれた点は$\sqrt{2}$以下ということになります。

この選ばれる点が$\sqrt{2}$以下である確率は、$\frac{\sqrt{2}}{2}$となりますから、この結果に2をかければ$\sqrt{2}$になることが想定されます。

以下、Pythonで実装

ルート2のシミュレーション