2009年06月28日

SQL豆知識【22】


浜松4チ-ムの
晶博です。

第22回目のSQLの豆知識としまして

今回から、複数のテーブルを使用したデータの問い合わせの説明を

数回に分けて行っていきたいと思います。

複数のテーブルを使用する事による決まり事が色々とありますので

その都度説明して行いたいと思います。

複数のテーブルを使用するには、

FROM句に複数のテーブルを、『,』(カンマ)で区切って指定します。

ちなみに、複数の列名を取得する時場合も、

『,』(カンマ)で区切って指定しますよね。

書式としましては以下の様になります。

SELECT <列名1>,<列名2>… FROM <テーブル名1>,<テーブル名2>…


図1の様な『商品マスタ』・『売上データ』のデータが存在していたとします。

商品マスタ



売上データ

図1

ここで注意しなければならない事があります。

列名『商品ID』は『商品マスタ』・『売上データ』両方に存在します。

この様に、複数のテーブルに同じ名前の同じ名前の列名が存在し、

その列名を取得する場合は、どちらのテーブルから取得するか

指定する必要があります。

書式としましては以下の様になります。

SELECT <テーブル名1>.<列名1>,<テーブル名2>.<列名2>…
 FROM <テーブル名1>,<テーブル名2>…



テーブル名を別名として使用する事も出来ます。

テーブル名が長かったり、分かりづらいときに

FROM句でテーブルに別名を指定すと、

その別名を列の選択の指定や、

WHERE句での指定に使用する事が出来ます。

書式としましては以下の様になります。

SELECT <別名1>.<列名1>,<別名2>.<列名2>…
 FROM <テーブル名1> <別名1>,<テーブル名2> <別名2>…



次回から、『自然結合(内部結合・外部結合)』

『交差結合』の説明を何回かに分けて行います。


Blog Ranking
ブログランキングに参加しています。

---------------------------------------------------------------------------------------------------------------
   ■ 弊社の事をお知りになりたい方
   ■ 弊社へ入社希望の方(転職希望の方)
   ■ その他、ご相談やご連絡を取りたい方は
     


画面上部の「オ-ナ-へメッセ-ジ」よりご連絡を下さい。

  


Posted by JOB CAFE at 10:59Comments(0)SQL

2009年06月21日

SQL豆知識【21】


浜松4チ-ムの
晶博です。

第21回目のSQLの豆知識としまして

前回、列の値を一纏めにし集計を行う時は、GROUP BY句を使用して

行う方法を説明しましたが、

今回も重複するデータを取り除いて

異なる結果だけを出力する方法の説明を行いたいと思います。

この様に、重複するデータを取り除く場合には、DISTINCT句を使用します。

書式としましては以下の様になります。

SELECT DISTINCT <列名1>,<列名2>… FROM <テーブル名>


では、実際に行ってみたいと思います。

図1の様な『売上データ』のデータが存在していたとします。



図1

① 『売上データ』の『商品ID』の

  重複しているデータを取り除いてみたいと思います。

SELECT DISTINCT 商品ID FROM 売上データ
 ORDER BY 商品ID


図2の様に『商品ID』の重複しているデータを取り除いて、

昇順で表示されているのが分かります。



図2

② 『売上データ』の『商品ID』・『担当者ID』の

  重複しているデータを取り除いてみたいと思います。

SELECT DISTINCT 商品ID, 担当者ID FROM 売上データ
 ORDER BY 商品ID, 担当者ID


図3の様に『商品ID』・『担当者ID』の重複しているデータを取り除いて、

『商品ID』・『担当者ID』の順で昇順で表示されているのが分かります。



図3

必ず必要な事ですので

是非、何かの機会に試してみて下さい。

次回は、『表の結合』についての説明を何回かに分けて行います。


Blog Ranking
ブログランキングに参加しています。

---------------------------------------------------------------------------------------------------------------
   ■ 弊社の事をお知りになりたい方
   ■ 弊社へ入社希望の方(転職希望の方)
   ■ その他、ご相談やご連絡を取りたい方は
     


画面上部の「オ-ナ-へメッセ-ジ」よりご連絡を下さい。

  


Posted by JOB CAFE at 16:15Comments(0)SQL

2009年06月17日

EXCEL豆知識【23】


浜松4チ-ムの
晶博です。

第23回目のEXCELの豆知識としまして

複数の文字列を結合する関数『&』について説明します。

複数の文字列を結合して、別の文字列を表示したい場合があります。

その場合に簡単に行う方法としまして

『&』を使用すると簡単に結合することが出来ます。

【&】とは、

文字列1 & 文字列2…

となります。



図1

図1の様に

部名とグループ名の間に空白を1文字分入れてにC列に表示を行っています。

注意点としまして、文字列を指定そる場合は、

『”』(ダブルクォーテーション)で囲む必要があります。

間違えない様に注意してください。

何かの機会に使用してみてください。


Blog Ranking
ブログランキングに参加しています。

---------------------------------------------------------------------------------------------------------------
   ■ 弊社の事をお知りになりたい方
   ■ 弊社へ入社希望の方
   ■ その他、ご相談やご連絡を取りたい方は
     


画面上部の「オ-ナ-へメッセ-ジ」よりご連絡を下さい。

  


Posted by JOB CAFE at 18:00Comments(0)EXCEL

2009年06月15日

SQL豆知識【20】


浜松4チ-ムの
晶博です。

第20回目のSQLの豆知識としまして

基本となる問い合わせのSELECT文の実行を行った結果、

基準となる列の値でグループを作って集計したい場合があります。

SQLでは、この様に列の値を一纏めにし集計を行う時は、GROUP BY句を使用します。

書式としましては以下の様になります。

GROUP BY <列名1>,<列名2>…


SELECT文にての書式としましては以下の様になります。

SELECT <列名1>,<集計関数>… FROM <テーブル名>

 GROUP BY <列名1>…



では、実際に行ってみたいと思います。

図1の様な『商品マスタ』のデータが存在していたとします。



図1

① 『商品マスタ』の『グループ名』をグループ単位で集計してみたいと思います。

SELECT グループ名 FROM 商品マスタ
 GROUP BY グループ名
 ORDER BY グループ名


図2の様に『グループ名』が集計され、昇順で表示されているのが分かります。



図2

ここで『GROUP BY』句を使用する上での注意点があります。

『GROUP BY』句を使用した場合、

『SELECT』句キーワードの後ろに指定出来るものとしまして

『GROUP BY』句で指定した列名もしくは、

『COUNT・MAX・MIN』等の集計関数しか指定できません。

『COUNT・MAX・MIN』等の集計関数に関しては

次回以降に、詳細の説明を行います。

では、実際にエラーの再現を行いたいと思います。

② ①と同様のSQL文に列名『商品名』を追加したSQL文を実行してみます。

SELECT グループ名, 商品名 FROM 商品マスタ
 GROUP BY グループ名
 ORDER BY グループ名


図3の様にエラーとなったのが分かります。

十分に注意してください。



図3

次に、『GROUP BY』句を指定し、

条件指定を追加する場合は、HAVING句を使用します。

書式としましては以下の様になります。

GROUP BY <列名1>,<列名2>…

HAVING <検索条件>


③ 『商品マスタ』の『グループ名』をグループ単位で集計し、

  COUNT関数を使用して集計した件数を

  『件数』という列名に修飾して取得してみたいと思います。

  ちなみに『COUNT』関数は、対象となる件数を集計する為の関数です。

SELECT グループ名, COUNT(*) 件数 FROM 商品マスタ
 GROUP BY グループ名
 ORDER BY グループ名


図4の様に『グループ名』が集計され、

更に、集計された『グループ名』単位の件数が昇順で表示されているのが分かります。



図4

④ ③にて取得した結果に対して3件以上のデータを取得するという

  条件を付けて再度取得してみたいと思います。

SELECT グループ名, COUNT(*) 件数 FROM 商品マスタ
 GROUP BY グループ名
  HAVING COUNT(*) >= 3
 ORDER BY グループ名


図5の様に『グループ名』が集計され、

更に、集計された『グループ名』単位の件数が3件以上のデータが

表示されているのが分かります。



図5

ここで『HAVING』句を使用する上での注意点があります。

SELECT文を条件付きで指定する場合、『WHERE』句を指定しますが

『GROUP BY』句を指定した場合は、『WHERE』句の指定は出来ません。

理由としまして、

1)『WHERE』句の条件判断が、『GROUP BY』句が

  実装されるよりも先に行われる為、

  『GROUP BY』句にて纏められた集計結果の評価が行われない。

2)『WHERE』句の条件判断が、『行』に対して評価されるものであって

  集計結果に対しては評価することが出来ません。

では、実際にエラーの再現を行いたいと思います。

⑤ ④と同様のSQL文に『HAVING』句を『WHERE』句に

  変更してSQL文を実行してみます。

SELECT グループ名, COUNT(*) 件数 FROM 商品マスタ
   WHERE COUNT(*) >= 3
 GROUP BY グループ名
 ORDER BY グループ名


図6の様にエラーとなったのが分かります。

十分に注意してください。



図6

必ず必要な事ですので

是非、何かの機会に試してみて下さい。

次回は、『出力結果をグループごとに集計する方法2』についての説明を行います。


Blog Ranking
ブログランキングに参加しています。

---------------------------------------------------------------------------------------------------------------
   ■ 弊社の事をお知りになりたい方
   ■ 弊社へ入社希望の方(転職希望の方)
   ■ その他、ご相談やご連絡を取りたい方は
     


画面上部の「オ-ナ-へメッセ-ジ」よりご連絡を下さい。

  


Posted by JOB CAFE at 07:00Comments(0)SQL

2009年06月12日

COBOLの基礎知識【17】


浜松1チ-ムの
雅宏です。

COBOLの基礎知識の第17回は、”データ項目(項類、字類)”の説明です。

【データ項目(項類、字類)】

COBOL言語で扱うデータ項目は、「項類」と「字類」に分類することができます。
「項類」には、数字項目、数字編集項目、英字項目、英数字項目、英数字編集項目、日本語項目、
日本語編集項目の7つがあります。
「字類」には、数字、英字、英数字、日本語の4つがあります。

「集団項目」の場合、項類はなし、字類は無条件に英数字です。
「基本項目」の場合、PICTURE文字列によって項類が決定し、その項類が実行時に扱うことができる
値によって、4つの字類のいずれかに属します。
基本項目の定義は以下のように行います。
レベル番号 データ項目名 PIC PICTURE文字列 USAGE句 VALUE句


データ構造と字類、項類の関係は以下の通りです。
データ構造字類項類
集団項目英数字なし
基本項目数字数字項目
英字英字項目
英数字英数字項目
英数字編集項目
数字編集項目
日本語日本語項目
日本語編集項目


第16回で取り上げたサンプルプログラム(SAMPLE05)を参照してください。
001100行目には、05 SHOHIN-CODE. と定義されています。
SHOHIN-CODE は集団項目ですので、項類はなし、字類は英数字です。

また、001200行目には、10 SHOHIN-CD-1 PIC X(04). と定義されています。
SHOHIN-CD-1 は基本項目で、PICTURE文字列は X(04) となっています。
X は英数字を示しますので、項類は英数字項目、字類は英数字となります。

なお、項類とPICTURE句に指定できる文字、USAGE句の組合せは以下の通りです。
項類PICTURE句に指定できる文字USAGE句備考
数字項目9、P、S、VDISPLAY数字1桁=1バイト(外部10進形式)
PACKED-DECIMAL数字2桁=1バイト(内部10進形式)
BINARY2進形式
COMP
COMPUTATIONAL
数字編集項目B、/、P、V、Z、0(ゼロ)、9、,(カンマ)、.(ピリオド)、*、+、-、CR、DB、¥DISPLAY1文字=1バイト
英字項目ADISPLAY英字1文字=1バイト
英数字項目A、X、9DISPLAY英数字1文字=1バイト
英数字編集項目A、X、9、B、0(ゼロ)、/DISPLAY1文字=1バイト
日本語項目NNATIONAL1文字=2バイト
日本語編集項目N、BNATIONAL1文字=2バイト


次回は、PICTURE句 について説明したいと思います。

Blog Ranking
ブログランキングに参加しています。

---------------------------------------------------------------------------------------------------------------
   ■ 弊社の事をお知りになりたい方
   ■ 弊社へ入社希望の方
   ■ その他、ご相談やご連絡を取りたい方は


画面上部の「オ-ナ-へメッセ-ジ」よりご連絡を下さい。

  


Posted by JOB CAFE at 21:30Comments(0)COBOL

2009年06月07日

SQL豆知識【19】


浜松4チ-ムの
晶博です。

第19回目のSQLの豆知識としまして

基本となる問い合わせのSELECT文の実行を行った結果、

複数行の結果を取得した場合、主キー順に表示されます。

しかし、場合によっては基準となる列を単位に並べ替えて表示したい場合があります。

この様に、行を並べ替えて表示する事をソート(Sort)といいます。

今回は、この並べ替えの説明を行いたいと思います。

SQLでは、この並べ替えを行う時は、ORDER BY句を使用します。

書式としましては以下の様になります。

ORDER BY <列名1>,<列名2>…


ソートには並べ替えの方法としまして以下の様な方法があります。

 ① ASC :昇順(小さいものから順に並べる方法)

 ② DESC:降順(大きいものから順に並べる方法)

上記2つのキーワードを使用する書式としましては以下の様になります。

ORDER BY <列名1> [ASC|DESC],<列名2> [ASC|DESC]…

昇順に指定する場合は、『ASC』キーワードの省略は可能です。

その為、列名の後ろに指定がなければ『ASC』と判断されます。

降順に指定したければ、列名の後ろに『DESC』キーワードを指定する必要があります。

複数の列への指定、『ASC』・『DESC』キーワードの混合の指定も可能です。

複数の列が指定された場合は、指定した列の順番に優先順位が決定していきます。

先頭にした列名が優先順位が最も高くなります。

では、実際に行ってみたいと思います。

図1の様な『商品マスタ』のデータが存在していたとします。



図1

① 『商品マスタ』の『商品名』を昇順に並べ替えてみたいと思います。

SELECT * FROM 商品マスタ
 ORDER BY 商品名

図2の様に『商品名』が小さいものから順に並べ替えられ表示されたのが分かります。



図2

② 『商品マスタ』の『仕入単価』を降順に並べ替えてみたいと思います。

SELECT * FROM 商品マスタ
 ORDER BY 仕入単価 DESC


図3の様に『仕入単価』が大きいものから順に並べ替えられ表示されたのが分かります。



図3

③ 『商品マスタ』の『グループ名』を昇順に

  『仕入単価』を降順に並べ替えてみたいと思います。

SELECT * FROM 商品マスタ
 ORDER BY グループ名, 仕入単価 DESC


図4の様に『グループ名』が小さいものから順に

『仕入単価』が大きいものから順に並べ替えられ表示されたのが分かります。



図4

必ず必要な事ですので

是非、何かの機会に試してみて下さい。

次回は、『出力結果をグループごとに集計する方法』についての説明を行います。


Blog Ranking
ブログランキングに参加しています。

---------------------------------------------------------------------------------------------------------------
   ■ 弊社の事をお知りになりたい方
   ■ 弊社へ入社希望の方(転職希望の方)
   ■ その他、ご相談やご連絡を取りたい方は
     


画面上部の「オ-ナ-へメッセ-ジ」よりご連絡を下さい。

  


Posted by JOB CAFE at 18:04Comments(0)SQL

2009年06月03日

EXCEL豆知識【22】


浜松4チ-ムの
晶博です。

第22回目のEXCELの豆知識としまして

以前に小計行を無視した集計関数

『SUBTOTAL関数』について説明しました。

ちなみにおさらいとして簡単に説明します。

【SUBTOTAL関数】とは、

SUBTOTAL(集計方法,参照1,参照2)

となります。



図1

『SUBTOTAL関数』の規則の中に

『SUBTOTAL関数』同士の加算を行わないという規則が有るからです。

つまり、総計(C2:C13)の範囲の中にある

日計(C5・C9・C13)の値は加算されないのです。

今回は、『SUBTOTAL関数』と同様の働きをする関数としまして

『SUMIF関数』について説明します。

【SUMIF関数】とは、

SUMIF(検索条件対象範囲,検索条件,合計範囲)

となります。



図2

図2の様に

検索条件対象範囲(A20:B31)

の中にある『日計』と表示されている行以外の

金額の集計を合計範囲(C20:C31)で行います。

どちらも同じ結果を取得する事が出来ます。

私個人的には、条件に指定等に煩わしい指定がない事、

検索条件が複数発生した時に対応が利かなくなり

汎用性を考えると

『SUBTOTAL関数』の方がお勧めです。

どちらを使うかは皆さんのお好みで

何かの機会に使用してみてください。


Blog Ranking
ブログランキングに参加しています。

---------------------------------------------------------------------------------------------------------------
   ■ 弊社の事をお知りになりたい方
   ■ 弊社へ入社希望の方
   ■ その他、ご相談やご連絡を取りたい方は
     


画面上部の「オ-ナ-へメッセ-ジ」よりご連絡を下さい。

  


Posted by JOB CAFE at 07:00Comments(0)EXCEL

2009年06月01日

SQL豆知識【18】


浜松4チ-ムの
晶博です。

第18回目のSQLの豆知識としまして

以前に基本となる問い合わせのSELECT文の説明は行いましたが、

再度、関連書式の説明を行いたいと思います。

SELECT句を使用した書式は以下の様になります。

SELECT <列名1>,<列名2>… FROM <テーブル名>


SELECT句は、SELECTキーワードと列名から構成され

FROM句は、FROMキーワードとテーブル名から構成されます。

SELECT句の列名は、どの列のデータを取り出すか指定します。

複数の列を取り出す場合は、列と列の区切りに『,』(カンマ)を使用します。

FROM句のテーブル名は、データが格納されているテーブルを指定します。

複数のテーブルを指定する事も可能です。

テーブルの全ての列を取得する場合は、全ての列名を指定しても構いませんが、

『*』(アスタリスク)を使用すると同じ結果を取得する事が可能になります。

書式としましては以下の様になります。

SELECT * FROM <テーブル名>


次に条件を付けた検索としましてWHERE句を使用します。

WHERE句を含んだ問い合わせの書式は以下の様になります。

SELECT <列名1>,<列名2>… FROM <テーブル名>

 WHERE <検索条件>


WHERE句の後ろには、検索条件を指定します。

検索条件には、条件を現わす式を記述し、

その条件に合致した行が問い合わせの結果として出力されます。

式には演算子を使用します。

必ず必要な事ですので

是非、何かの機会に試してみて下さい。

次回は、『データ問い合わせ結果の並べ替え』についての説明を行います。


Blog Ranking
ブログランキングに参加しています。

---------------------------------------------------------------------------------------------------------------
   ■ 弊社の事をお知りになりたい方
   ■ 弊社へ入社希望の方(転職希望の方)
   ■ その他、ご相談やご連絡を取りたい方は
     


画面上部の「オ-ナ-へメッセ-ジ」よりご連絡を下さい。

  


Posted by JOB CAFE at 07:00Comments(0)SQL
プロフィール
JOB CAFE
JOB CAFE
株式会社 ネクサス
                  
本社 :静岡県浜松市中区大工町311-15
            
     TEL:053-451-0830           
     FAX:053-451-0832
オーナーへメッセージ
QRコード
QRCODE
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人