2016年12月29日木曜日

【SQL】SQL Server Management Studio の操作方法など

SQLの基礎、SQL Server、SQL Server Management Studioについて、詳しく書いてあるサイトがありいました。

http://kaya-soft.com/sqlserver2008-toranomaki/page/2/
http://kaya-soft.com/sqlserver2008-toranomaki/

詳しく書いてあるので、ちょっと長いので、少しまとめてみました。

1、SQLServer Management Studioの使い方
SQLServerにアクセスするためには、「SQLServer Management Studio」を介してデータベースを操作します。
 (1) 起動
「スタート」メニュー → 「すべてのプログラム」 → 「SQLServer 2008」 → 「SQLServer Management Studio」を選択
(2) テーブルを開いてデータを入力
オブジェクトエクスプローラに表示しているテーブルを選択しながら右クリックし、「上位200行の編集」をクリックする。あとはセルを選択して、値を入力します。Enter/Tabで入力キーの確定処理が行われます。
(3) テーブルを参照モードで開く
「オブジェクトエクスプローラ」で当該テーブルを選択しながら右クリックし、表示されたメニューの「上位1000行の選択」をクリックします。
右上は、「クエリエディタ」と言って、SQLを記述するエリアになります。
右下にテーブルのレコードが表示されていますが、要するにクエリエディタで記述したSQLを実行した結果を下に表示していることになります。

2、SQL
Management Studio で、ログインに成功したら、画面左上の「新しいクエリ」ボタンをクリックします。
左上のドロップダウンには接続先のデータベースが表示されており、変更したいDBを選択します。
クエリエディタでクエリ入力して、下のようなのSQLを記述し、「!実行(X)」ボタンをクリックして実行する(「F5」や「Ctrl + E」 で可能)
※F5を押して実行される時に、マウスで範囲選択している場合は、その選択されている部分だけが実行される。クエリを2つ書いておいて、使い分けたい時とか、WHEREを書いている場合に、WHEREを指定しなかった場合はどういう結果かを見たいときとかに便利です。

(1) テーブルにデータを追加(INSERT文を使う)
INSERT INTO テーブル名(列名1, 列名2, ・・・)
VALUES(値1, 値2, ・・・)
⇒(例)
INSERT INTO TableA(社員番号, 名前, 年齢, 性別, 生年月日, 給料)
VALUES('00001', '木村太郎', '36', '男', '1977/05/04', 360000)

(2) データを参照する(SELECT文を使う)
SELECT *
FROM テーブル名
WHERE 絞り込む条件
⇒(例)
SELECT *
FROM TableA
WHERE 性別 = '男'

・「SELECT 列名 AS 表示する列名」で指定したAS の後ろに書いた文字は、SELECT結果の表示列名(見出し)になります
・SELECTした結果を並び替えるには「ORDER BY」句を使用します
[ASC]の場合は昇順、[DESC]の場合は降順に並べ替えられます(省略は「ASC」)。
・テーブル内に重複するデータがある場合「DISTINCT」を使用すれば重複を取り除けます
・SELECTで取得するデータに条件を指定して絞り込む場合、WHERE句を使用します
・数値や日付をFrom~Toで範囲指定する場合は「BETWEEN」を使用します
・ある列が、複数の値の中からどれか一つに該当するかどうか、という条件を指定する場合は、「IN」を使います。例えば、社員番号が「00001」か「00002」か「00003」のどれかに該当するデータを抽出するには、「WHERE 社員番号 IN ('00001', '00002', '00003'
)」と記述する(「WHERE 社員番号 = '00001' OR 社員番号 = '00002' OR 社員番号 = '00003'」と同じ意味) ・NULLを含むデータがある場合、NULLを検索条件で指定する場合は「IS NULL」を使用します(= NULL」ではない)。
・文字列であいまい検索する場合は、「LIKE」を使います。%」は0文字以上の任意の文字列を表し、_は任意の1文字を表すことができます。
 ⇒(例)
SELECT *
FROM TableA
WHERE 名前 LIKE '%鈴木%'
 
(3) 上位 N 件の取得
SELECT TOP N 列名1, 列名2, ・・・
FROM テーブル名

(4) データを更新する (UPDATE文を使う)
UPDATE テーブル名 SET
更新する列名1 = 更新する値1, 更新する列名2 = 更新する値2, ・・・
WHERE 更新するレコードを特定する為の条件
⇒(例)
UPDATE TableA SET
給料 = 300000
WHERE 社員番号 = '00001'
(5) レコードを削除する(DELETE文を使う)
DELETE FROM テーブル名
WHERE 削除するレコードを特定する為の条件
⇒(例)
DELETE FROM TableA
WHERE 社員番号 = '00002'
(6) ビュー(View)の作り方
オブジェクトエクスプローラから、「ビュー」というところを選択し、右クリックメニューから「新しいビュー」をクリックする。
「テーブルの追加」画面が開きますので、対象テーブルします。
クエリ作成対象の[TableA]を選択して「追加」ボタンをクリックすると、Management Studio 本体の方に追加されます。
あとは、ペインを使って、選択作業を行って、実行でViewを作成します。

3、関数
SELECTやWHEREで関数が使用できます。
(1) 【文字列】RIGHT ある文字列の右端から、指定した文字数分だけ取得する
  SELECT RIGHT('ABCDEF', 3) ⇒ 'DEF'
 
(2) 【文字列】LEFT ある文字列の左端から、指定した文字数分だけ取得する
    SELECT LEFT('ABCDEF', 3) ⇒ 'ABC   DEFGHI'
 
(3) 【文字列】RTRIM ある文字列の右端から空白を取り除く
    SELECT RTRIM('   ABC   DEF   ') + 'GHI' ⇒ '   ABC   DEFGHI'
 
(4) 【文字列】LTRIM ある文字列の左端から空白を取り除く
    SELECT LTRIM('   ABC   DEF   ') + 'GHI' ⇒ 'ABC   DEF   GHI'
 
(5) 【文字列】REPLACE ある文字列の中で、特定の文字列を別の文字列に置換する
    SELECT REPLACE('ABCDE', 'BCD', 'BCDBCD')⇒ 'ABCDBCDE'
 
(6) 【文字列】SUBSTRING ある文字列の中で、特定の位置から指定した文字数分だけ取得する
    SELECT SUBSTRING('ABCDE', 3, 2)⇒ 'CD'
 
(7) 【文字列】UPPER ある文字列を大文字に変換する
    SELECT UPPER('abcあいう012')⇒ 'ABCあいう012'
 
(8) 【文字列】LOWER ある文字列を小文字に変換する
    SELECT LOWER('ABCあいう012')⇒ 'abcあいう012'
 
(9) 【文字列】LEN ある文字列の文字数を取得する
    SELECT LEN('ABCあいう012') ⇒ 9 
 
(10) 【日付・時刻】GETDATE / SYSDATETIME システム日付(SQL Serverがインストールされたマシンの日付)を取得する
    (戻り値の型がGETDATEの場合はDATETIME型で、SYSDATETIMEの場合はDATETIME2型)
    SELECT GETDATE(), SYSDATETIME()⇒ 2016-01-04 15:49:32.380 2016-01-04 15:49:32.38
 
(11) 【日付・時刻】YEAR ある日付の年の部分だけ取得する
    SELECT YEAR(GETDATE())⇒ 2016
 
(12) 【日付・時刻】MONTH ある日付の月の部分だけ取得する
    SELECT MONTH(GETDATE()) ⇒ 1
 
(13) 【日付・時刻】DAY ある日付の日の部分だけ取得する
    SELECT DAY(GETDATE()) ⇒ 4
 
(14) 【日付・時刻】DATEPART ある日付の一部だけを取得する
    SELECT DATEPART(YEAR        , GETDATE())    AS
      ,DATEPART(MONTH       , GETDATE())    AS
      ,DATEPART(DAY         , GETDATE())    AS
      ,DATEPART(HOUR        , GETDATE())    AS
      ,DATEPART(MINUTE      , GETDATE())    AS
      ,DATEPART(SECOND      , GETDATE())    AS
      ,DATEPART(MILLISECOND , GETDATE())    AS ミリ秒
      ,DATEPART(NANOSECOND  , GETDATE())    AS ナノ秒
      年       月        日        時        分        秒      ミリ秒         ナノ秒
     2014      1        4        16         34       52       40    40000000
 
(15) 【日付・時刻】DATEADD 日付を加算したり減算したりする
    SELECT DATEADD(d,  1, '2014/01/01') ,DATEADD(d, -1, '2014/01/01')
     ⇒ 2014-01-02 00:00:00.000 2013-12-31 00:00:00.000
 
(16) 【日付・時刻】DATEDIFF 2つの日付の差を求める
    SELECT DATEDIFF(d, '2014/01/01', '2014/01/01')
      ,DATEDIFF(d, '2014/01/01', '2014/01/02')
      ,DATEDIFF(d, '2014/01/02', '2014/01/01')
      ⇒ 0           1           -1
 
(17) 【変換】CAST データ型を変換する
    SELECT CAST('012' AS INT) ,CAST(12 AS VARCHAR)  ⇒ 12(INT型) 12(VARCHAR型)
 
(18) 【変換】CONVERT データ型を変換する
    SELECT CONVERT(VARCHAR, GETDATE(),111) AS 'yyyy/mm/dd'
          ,CONVERT(VARCHAR, GETDATE(),112) AS 'yyyymmdd'
          ,CONVERT(VARCHAR, GETDATE(),120) AS 'yyyy-mm-dd hh:mi:ss'
          ,CONVERT(VARCHAR, GETDATE(),121) AS 'yyyy-mm-dd hh:mi:ss.mmm'

 yyyy/mm/dd    yyyymmdd     yyyy-mm-dd hh:mi:ss    yyyy-mm-dd hh:mi:ss.mmm

  2014/01/02    20140102    2014-01-02 21:21:06      2014-01-02 21:21:06.383

 
※書式(スタイル):111(年/月/日(yyyy/mm/dd)),112(年月日(yyyymmdd)),120(年-月-日 時:分:秒(yyyy-mm-dd hh:mi:ss)),121(年-月-日 時:分:秒.ミリ秒(yyyy-mm-dd hh:mi:ss.mmm))
 

(19) 【数値】ROUND 四捨五入する
  有効桁数は、正の値を指定した場合は小数点以下の桁数に、負の値を指定した場合は、小数点から左の桁数にまで丸めます。
   SELECT ROUND(123.445, 2)
      ,ROUND(123.445, -2)
      ,ROUND(153.445, -2)
 123.450  小数点以下第三位を四捨五入し、第二までを求めている
   100.000  小数点の左二桁目を四捨五入し、2の為繰り上がらず100となる
   200.000 小数点の左二桁目を四捨五入し、5の為繰り上がり200となる
 
(20) 【数値】POWER 階乗を求める
  SELECT POWER(2, 3) ⇒ 8

(21) 【数値】RAND 0から1までの範囲のランダムな数字を求める
   SELECT RAND(), RAND(), RAND()
   ⇒ 0.273604264024087 0.949061768386125  0.880059316061561

(22) 【数値】CEILING 小数点以下を切り上げる
   SELECT CEILING(1)
      ,CEILING(1.1)
      ,CEILING(1.9)
   ⇒ 1 2 2

(23) 【数値】FLOOR 小数点以下を切り捨てる
   SELECT FLOOR(1)
      ,FLOOR(1.1)
      ,FLOOR(2.1)
   ⇒ 1 1 2

(24) 【数値】SQRT 平方根を求める
   SELECT SQRT(2)   ⇒ 1.4142135623731
 

4、集計を行う
(1) SUM 合計を求める
  SELECT SUM(給料)
    FROM TableA

(2) AVG 平均を求める
  SELECT AVG(給料)
    FROM TableA
 
・集計対象がNULLを許容する列の場合は「IS NULL(NULLを指定値に置換)」をしておく
    SELECT AVG(ISNULL(給料, 0))   AS 'AVG(給料)'
      ,COUNT(ISNULL(給料, 0)) AS 'COUNT(給料)'
      FROM TableA


・GROUP BYを使用して、「性別毎の平均年齢」とかなら集計する
    SELECT 性別, AVG(年齢)
      FROM TableA
      GROUP BY 性別
 

・HAVINGを使って、「平均年齢が30才未満の性別」で絞り込みます
    SELECT 性別, AVG(年齢)
      FROM TableA
      GROUP BY 性別
       HAVING AVG(年齢) < 30

(3) MAX 最大値を求める
  SELECT MAX(給料)
    FROM TableA

(4) MIN 最小値を求める
  SELECT MIN(給料)
    FROM TableA

(5) COUNT 個数(行数)をカウントする
  SELECT COUNT(*)
    FROM TableA

2016年12月22日木曜日

【SQL Server】BCPコマンドを利用したデータベースデータのインポート/エクスポート

bcpを使ったデータベースのインポート+エキスポートについて、調べたのでまとめてみました。

1、構文
bcp ユーティリティは、ユーザーが指定した形式で、データを Microsoft® SQL Server™ 2000 とデータ ファイルとの間でコピーします。

bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
     {in | out | queryout | format} data_file
     [-m max_errors] [-f format_file] [-e err_file]
     [-F first_row] [-L last_row] [-b batch_size]
     [-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
     [-q] [-C code_page] [-t field_term] [-r row_term]
     [-i input_file] [-o output_file] [-a packet_size]
     [-S server_name[\instance_name]] [-U login_id] [-P password]
     [-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]

【引数】
database_name データベースの名前
owner                テーブルの名前
table_name        コピー先(元)のテーブルの名前
query                  結果セットを返す Transact-SQLのクエリ
                         ※クエリ全体を二重引用符で囲んでください。クエリからデータを一括コピーする場合には、queryout も指定します。

in | out | queryout | format 一括コピーする方向
 ※in は、ファイルからデータベース テーブルまたはビューにコピーします。out は、データベース テーブルまたはビューからファイルにコピーします。queryout は、クエリからデータの一括コピーを行う場合に指定します。format オプションは、指定したオプション (-n、-c、-w、-6、-N のいずれか) とテーブルまたはビューの区切り記号に基づいてフォーマット ファイルを作成します。format を使用する場合、-f オプションも指定する必要があります。
data_file          コピー先(元)のデータ ファイルのフル パス

-n                     データのネイティブ (データベース) データ型を使用して一括コピー操作を実行
-c                     文字データ型を使用して一括コピー操作を実行

-S server_name[\instance_name] 接続先の SQL Server のインスタンスを指定
-U login_id                                   SQL Server への接続に使用されるログイン ID
-P password                                  ログイン ID のパスワード

 2、説明
bcpを利用し、以下のようなことができる。
なお、コマンドプロンプトから実行することができます(batファイルを作成して、クリックして実行します)。
(1) 指定したテーブルのデータをテキストファイルに出力する。
【構文】
       bcp データベース名.所有者.テーブル名 out "出力パス" -c -S サーバ名 -U ユーザID -P パスワード
【例】
masterデータベースのtestテーブルのデータを"C:\test.txt"に全件出力する。
   bcp master..test out "C:\test.txt" -c -S SrvAsa -U asa -P aaa

(2) 指定したクエリで取得したデータをファイルに出力する。
【構文】
       bcp "SQL文" queryout "出力パス" -n -S サーバ名 -U ユーザID -P パスワード
【例】
masterデータベースのtestテーブルのデータをクエリを使って抽出して、"C:\test.bcp"に出力する。
       bcp "SELECT * from master..test where SystemDay between 20130401 and 20161130" queryout
           "C:\test.bcp" -n -S SrvAsa  -U asa -P aaa


(3) 指定したファイルのデータを指定したテーブルに取り込む。
【構文】
      bcp データベース名.所有者.テーブル名 in "入力パス" -n -S サーバ名(インスタンス名) -U ユーザID -P パスワード
【例】
テキストファイル("C:\test.bcp")のデータを指定したテーブル(masterデータベースのtestテーブル)に取り込む
        bcp master..systypes in "C:\test.bcp" -n -S SrvAsa -U asa -P aaa

実作業としては、(2),(3)を利用して、(2)と(3)の間でtruncate(テーブルから全ての行を削除)を行い、データベースの再作成を行たりします。

【参考URL】
http://blog.livedoor.jp/akf0/archives/51354837.html
https://msdn.microsoft.com/ja-jp/library/ms162802.aspx
http://dalmore.blog7.fc2.com/blog-entry-17.html
https://msdn.microsoft.com/ja-jp/library/aa174646(SQL.80).aspx

2016年12月19日月曜日

【動画で英会話(IU-Connect)】外国人に話しかける

私も英会話スクールにいって、初めて気づいたのですが、英会話で間違える事を恐れずに、積極的に話すことが大事だと思いました。

下のURLのサイト一読すると、私が思った事と同じと共感しました。
 https://iu-connect.com/ec-037/

【まとめ】
たとえ言葉がわからなくて片言だとしても、自分のボディーランゲージや口調だけでもう93%コミュニケーションができる
・「英語が聞き取れなかったどうしよう?!」に関しては、下のURLのサイト一読すると「ボディーランゲージ」がいいそうです
  https://iu-connect.com/%E8%81%9E%E3%81%8D%E5%8F%96%E3%82%8C%E3%81%AA%E3%81%8F%E3%81%A6%E3%82%82%E5%A4%A7%E4%B8%88%E5%A4%AB%EF%BC%81/


私は、あっているのか別として、
「Would you repeat that again?」、
「Sorry, I couldn't catch that. please speak slowly?」
を馬鹿の一つ覚えとして使っています。

上記のコラムを読むと、もっと丁寧な英文を紹介していました。

外人との会話は、次のコラム及び動画をみてみましょう。
https://iu-connect.com/ec-22/?utm_source=ec-066&utm_medium=Link&utm_content=ec-022&utm_campaign=Internal

【動画】
https://www.youtube.com/watch?v=mZjaxBYmAc0




タスク スケジューラの使い方

 Windowsのタスクスケジューラを利用して、毎日決まった時刻に特定フォルダをファイルサーバへバックアップなどのタスクの作成する方法の、タスクスケジューラについて、メモとしてまとめました。

1、Windows 10での、『コントロールパネル』からタスクスケジューラを起動する方法
(1) 『検索ボックス』から『コントロールパネル』を開く手順
  タスクバーに検索ボックスに、『コントロールパネル』入力すると検索結果に表示されるのでクリックする。
(2) 画面下に表示されている『スタートボタン』から『コントロールパネル』を開く手順
 画面左下に表示されているスタートボタンを右クリックして表示されるメニューから『コントロールパネル』をクリックします。

コントロールパネルから[システムとセキュリティ]-[管理ツール]をクリックし、[タスク スケジューラ]をダブルクリックして設定画面を開く。 

【参考URL】
https://xinroom.net/pc/win10-control-panel/


2、新たにタスクを作成する
 タスクスケジューラの左ペインのツリーで[タスク スケジューラ (ローカル)]フォルダを選択してから、右側の操作ペインで[基本タスクの作成]をクリックする。これでタスク作成ウィザードが起動する。
実際のタスクの作り方は、下の参考URLのサイトに詳しく書かれていますので、省略します。

【参考URL】
http://www.atmarkit.co.jp/ait/articles/1305/31/news049.html

2016年12月18日日曜日

【もう一度、英語をやり直そう】英会話日記(12/14) ~本八幡getgo英会話

早いもので、今年もあとわずか。
クラスメートの人がお休み(?)で、今日もティコ先生とのマンツーマンレッスンでした。

1、今日の講義
(1) $750,000の読み方
 seven hundred fifty thousand dollars
(2) 単語
 disualify : 失格する
  cheat : だます
  valuable : 貴重な、高価な
 jail : 刑務所 ex. you could go to jail.(あなたがそれをする事で刑務所に行く事になるかもよ
  get a point  : 理解する(understand)
(3) 文法(Grammar)
仮定法過去】 
if + past tense(過去形) ...., would regular form(現在形)
 →例) If I found $750,000, I would spend it.

仮定法現在形
if + regular form(現在形) ...., will (未来形)
 →例) if it rains, I'll stay home.

仮定法は、以下のサイトが勉強になります。
http://eigo-box.jp/grammar/subjunctive-1/

2、テスト
1) A: If you (had) three months to travel, where (would) you (go)?
    B: Oh, that's easy! I (would fly) to Europe. I've always wanted to go there.
2) A: If your doctor (told) you to get more exercise, which sport (would) you (choose)?
    B: I'm not sure, but I (would go) jogging two or three times a week.
3) A: What (would) you (do) if your teacher (gave) you an A by mistake?
    B: Of course I (would say) something right away.
4) A: (Would) you (break) into your house if you (locked) yourself out?
   B: If I (didn't have) another key, I (would ask) a neighbor for help.
5) A: If your friend (wanted) to marry someone you didn't trust, (Would) you (say) something?
    B: No, I (wouldn't say) anything. I (would mind) my own business.
6) A: What (would) you (do) if you (saw) your favorite movie star on the street?
    B: I (wouldn't be) shy! I (would ask) for a photo and an autograph.


そろそろ、TOEICもしくは、英検準1級めざす準備をしていかないといけないな。

2016年12月15日木曜日

【SQL】SQLのお勉強(2)

続きです。

5、集計とグループ化
(1) 集計関数(SUM/MAX/MIN/AVG/COUNT)
SELECT
   SUM(出金額) AS 合計出金額,
   AVG(出金額) AS 平均出金額,
   MAX(出金額) AS 最大出金額,
   MIN(出金額) AS 最小出金額
FROM 家計簿



(2) COUNT
・COUNT(*)は、NULLを含めた行数をカウントする。COUNT(列)は、指定列の値がNULLである行を無視して数える
・重複した値を除いた集計
 SELECT COUNT(DISTINCT 費目) FROM 家計簿
・SELECT文の選択列リスト部分、HAVING句で使用

(3) グループ化
【構文】
SELECT グループ化の基準列名・・・, 集計関数
  FROM テーブル名
(WHERE 絞り込み条件)
GROUP BY グループ化の基準列名・・・
【例】費目でグループ化
SELECT 費目, SUM(出金額) AS 費目の出金額の合計
  FROM 家計簿
GROUP BY 費目

(4) HAVING(絞り込み)
【構文】
SELECT グループ化の基準列名・・・, 集計関数
  FROM テーブル名
(WHERE 絞り込み条件)
GROUP BY グループ化の基準列名・・・
HAVING 集計結果に対する絞り込み条件
【例】
SELECT 費目, SUM(出金額) AS 費目の出金額の合計
  FROM 家計簿
GROUP BY 費目
HAVING SUM(出金額) > 0


【SELECT文まとめ】
SELECT 選択列リスト
   FROM テーブル名
(WHERE 条件式)
(GROUP BY グループ化列名)
(HAVING 集計結果に対する条件式)
(ORDER BY 並び替え列名)
※ORDER BY は必ず最後に記述

6、副問い合わせ
ほかのSQL文の一部分として登場するSELECT文。丸カッコでくくって記述する。
(1) 2回のSELECTが必要な場合:ネスト構造
例)最大の出費に関する費目と金額を求める
SELECT 費目,出金額 FROM 家計簿
WHERE 出金額 = ( SELECT MAX(出金額) FROM 家計簿)
 → ( SELECT MAX(出金額) FROM 家計簿)を「サブクエリ」という
(2) 副問い合わせの結果から、確実にNULLを除外する方法
例1)
SELECT * FROM 家計簿アーカイブ
WHERE 費目 IN ( SELECT  費目 FROM 家計簿
   WHERE 費目 IS NOT NULL)

例2)
SELECT * FROM 家計簿アーカイブ
WHERE 費目 IN ( SELECT  COALESCE(費目,'不明') FROM 家計簿)

  →費目がNULLなら、代わりに'不明'にする
(3) INSERTの特殊構文(VALUES以降の記述に相当する内容をSELECTで定義)
INSERT INTO 家計簿集計(費目,合計,平均,回数)
SELECT 費目, SUM(出金額), AVG(出金額),0
FROM 家計簿
WHERE 出金額 > 0
GROUP BY 費目


【参考URL】
http://www.sql-reference.com/index.html#subquery

2016年12月14日水曜日

【SQL】SQLのお勉強(1)

本「スッキリわかるSQL入門 ドリル215問付き!」を使ってSQLの勉強します。
http://book.impress.co.jp/books/1111101167

dokoQL(どこきゅーえる)は、ブラウザだけでSQLの編集と実行を行える学習用クラウドサービスです。
→「その他」でユーザ登録する(ただし、本を購入して使用してください、との事です)
http://dokoql.com/d/app.html

dokoQL ヘルプは、以下参照
http://dokoql.com/help

DBのインストール手順などは、以下URLに記載しているとの事
http://devnote.jp/index.html

1、例文(SELECT/INSERT/UPDATE/DELETE)
1) sample1 : 検索 (SELECT:ある条件を満たす行を探して、取得)
SELECT 出金額
FROM 家計簿


2) sample2: 検索
SELECT 日付,費目,メモ,入金額,出金額
FROM 家計簿


SELECT *
FROM 家計簿

※DBのデータが変更する場合があるので、*の濫用に注意

3) sample3: 取得
SELECT 日付,費目,メモ,入金額,出金額
FROM 家計簿
WHERE 出金額 > 3000


(別名定義)ASを使用する
SELECT  費目 AS ITEM,入金額 AS RECEIVE,出金額 AS PAY
FROM 家計簿 AS MONEYBOOK
WHERE 費目 = '給料'

→WHERE '費目' = '給料'としないこと(間違えて、はまった)
4) sample4: 挿入
INSERT INTO 家計簿
VALUES ('2013-02-25','居住費','3月の家賃',0,85000)


5) sample5: 更新 (UPDATE:ある条件を満たす行を探して、書き換える)
UPDATE 家計簿
SET 出金額 = 90000
WHERE 日付 = '2013-02-25'


6) sample5: 削除 (DELETE:ある条件を満たす行を探して、削除する)
DELETE FROM 家計簿
WHERE 日付 = '2013-02-25'


2、絞り込み
(1)WHERE
・WHEREを指定しないと「すべての行」が処理対象
・SELECT/UPDATE/DELETE文で使用可能
・WHEREの後ろには条件式(TRUE/FALSE判別)を記述
 ※NULL判別は「出金額 IS NULL/出金額 IS NOT NULL」として、= または<>は使用できません

(2) 「式 LIKE パターン文字列」
 →%:任意の0文字以上の文字列、_:任意の1文字
  →%を特殊文字と判別する場合、ESCAPE句を併用する
  SELECT  * FROM 家計簿
   WHERE メモ LIKE '%100$$%' ESCAPE '$'


(3) 「式 BETWEEN 値1 AND 値2」
SELECT  * FROM 家計簿
WHERE 出金額 BETWEEN 100 AND 3000

(4) 複数値との比較「式 IN (値1, 値2, 値3, ・・・・・)」
(5) ANY/ALL演算子による複数値との比較

3、検索結果の加工
(1) DISTINCT 検索結果から重複行を除外
(2) ORDER BY 検索結果の順序を並び替える
  SELECT 列名 FROM テーブル名
         ORDER BY 列名 並び順(ASC/DESC)
(3) LIMIT 先頭から数行だけ取得(出金額の高い順に3件を取得する)
     SELECT 費目, 出金額 FROM 家計簿
         ORDER BY 出金額 DESC LIMIT 3
(4) 集合演算子(UNION(和集合)/EXCEPT(差集合)/INTERSECT(積集合))

4、式と関数
(1) CASE演算子ー値を変換する
CASE演算子は、列の値や条件式を評価し、結果に応じて好きな値に変換させる
(構文)
CASE 評価する列や式 WHEN 値1 THEN 値1の時の返す値
                                       (WHEN 値2 THEN 値2の時の返す値)
                                       (ELSE デフォルト値)
END
(例)
SELECT  費目,出金額,
CASE 費目 WHEN '居住費' THEN '固定費'
     WHEN '水道光熱費'  THEN '固定費'
      ELSE '変動費'
  END AS 出費の分類
 FROM 家計簿
 WHERE 出金額 > 0


(構文)
CASE  WHEN 条件1 THEN 条件1の時の返す値
                                       (WHEN 条件2 THEN 条件2の時の返す値)
                                       (ELSE デフォルト値)
END
(例)
SELECT  費目,入金額,
CASE WHEN 入金額 < 5000 THEN 'お小遣い'
     WHEN 入金額 < 10000 THEN '一般収入'
     WHEN 入金額 < 30000 THEN '給料出たー!'
      ELSE '想定外の収入です!'
  END AS 収入の分類
 FROM 家計簿
 WHERE 入金額 > 0



(2) LENGTH(長さ取得)/TRIM(空白除去)/REPLACE(置換)/SUBSTRING(文字列一部抽出)
     ROUND(指定桁四捨五入)/TRUNC(指定桁切り捨て)/POWER(べき乗計算)
     CURRENT_DATE(現在の日付/CURRENT_TIME(現在の時刻)
     CAST(データ変換)
    COALESCE(最初に登場するNULLでない値を返す)
※COALESCEは「コウアレス」とよむそうです

2016年12月12日月曜日

【JavaScript】JavaScriptを高速化するプログラミングテクニック

JavaScriptの処理を早くする方法について調べてみました。
調べて、覚えておくとよさそうな事をまとめてみました。

1.length の参照を減らす
for (var i = 0, len = elements.length; i < len; i++) {
    :
}

2.ドット演算を減らす
要素の設定をまとめる。
【悪い例】
function BuildUI(){
    var nameElement = document.getElementById('name');
    nameElement.innerHTML =  '';            
    nameElement.innerHTML += "T";  
    nameElement.innerHTML += "A";   
    nameElement.innerHTML +="の日記"; 
}
【良い例】 
function BuildUI(){
    var elementText =
"T"+ "A"+ "の日記";
    document.getElementById('name').innerHTML = elementText;
}


3.関数ポインタをキャッシュする
Work関数はグローバルスコーブで定義されている関数とする。
全ての参照(ポインタ)をローカル変数のfuncWorkに格納し、ループ内でそのローカル変数を使って関数を呼び出すことでパフォーマンスが向上する。
function funcCollection(){
    var funcWork = Work;  //ローカル変数
    var length = myCollection.getItemCount();
    for(var index = 0; index < length ; index++)
        funcWork (myCollection[index]);
    }
}

 

4.文字列結合する場合は、+= じゃなくて join 使う
function test () {
    var html = []; 
    for (var i = 0; i < 5; i++) { 
       html.push('あ'); 
    } 
   $('tx').innerHTML = html.join("");
};

 

5.配列に要素を追加するのはpushよりlengthを使う
【悪い例】 
 ary.push("a");
【良い例】 

 ary[ary.length]="a"

6.DOMに要素追加する場合、複数の要素をまとめて追加する(置き換えもまとめて行う)

7.複数のスタイルの書き換え
スタイル変更は纏めて行う
【悪い例】
element.style.background = ‘gray’;
element.style.border = ‘1px solid black’;

【良い例】 
 element.setAttribute(‘style’, ‘background: gray; border: 1px solid gray;’);

8.htmlファイルの読み込みは、CSSファイルを先に、javascriptファイルを後に記述する

9. 出来る範囲で、関数呼び出しを避ける

10. newを使わずに、〔〕や{}といった括弧を用いて配列やオブジェクト生成を指定する 

11. メソッドチェーンを活用する

【参考URL】
その他、以下URL参考になります
https://html5experts.jp/yoshikawa_t/1016/
https://html5experts.jp/yoshikawa_t/1932/
http://tokkono.cute.coocan.jp/blog/slow/index.php/web-technology/top-10-reasons-javascript-blocking-page-load/
http://buzzmemo.blogspot.jp/2010/08/javascript.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20080109/290747/?rt=nocnt
https://www.ibm.com/developerworks/jp/web/library/wa-aj-jsajaxperf/
https://www.inter-office.co.jp/contents/177/

http://news.mynavi.jp/news/2009/11/11/015/
http://gihyo.jp/dev/serial/01/js-foundation/0007
http://www.atmarkit.co.jp/fwcr/design/index/index_htmltuning.html
 
http://www.atmarkit.co.jp/ait/articles/1409/02/news032.html
http://qiita.com/redamoon/items/1c38ee93834588e3c4ff

2016年12月11日日曜日

【JavaScript/HTML5】Webサイトトラブルの回避方法をプログラム側で制御する

Webサイトのトラブル解決について、調べてみたので、まとめてみました。

1、メモリリーク(Javascriptのメモリリーク対策)
GC(ガベージコレクション)を(任意に行われるので、)意図的に行わせる
 → 変数に対し、明示的にnullをセットした時
必要が無い場合はクロージャの利用を避ける
 ⇒クロシージャは、自分を囲むスコープにある変数を参照できる関数
循環参照によるメモリリークを避ける

※以前説明したIEの開発ツールのメモリツールを使って、循環参照している箇所をみつけましょう。

2、文字化け
ブラウザがどの文字エンコーディング(特定の文字をどのようなバイナリ値で表現するかを規定したルール)か分からず、発生します。
htmlファイル内に次のタグを追加して、文字エンコーディングをUTF-8に指定します。

 <meta charset="UTF-8">

※サーバへのリクエスト・レスポンスも文字化けが起こっている場合は、文字エンコーディングが原因かもしれません。(サーバ側での文字コードの設定も確認しましょう)

3、最新のサイトが表示されない
ブラウザのキャッシュが原因なので、htmlファイル内に、キャッシュを使わないように指定します。

<meta http-equiv="Pragma" content="no-cache">

※HTTPヘッダで指定する方法もあります

4、互換性が問題で表示されない
以下のURLで記載していますように、IEの互換性が問題で表示できない場合があります。
http://www.buildinsider.net/web/ie11attention/01

htmlファイル内に、最新レンダリングを指定します。
<meta http-equiv="X-UA-Compatible" content="IE=edge">





【参考URL】
https://utage.headwaters.co.jp/blog/?p=1116
http://itpro.nikkeibp.co.jp/article/lecture/20061218/257172/
http://qiita.com/takeharu/items/4975031faf6f7baf077a 
https://www.html5rocks.com/ja/tutorials/memory/effectivemanagement/
http://www.ibm.com/developerworks/jp/web/library/wa-jsmemory/

2016年12月8日木曜日

【もう一度、英語をやり直そう】英会話日記(12/7) ~本八幡getgo英会話

先週の続きで、今週も前置詞(At/In/On)を使う問題でした。
なかなか難しい

1) She will be going home (in) about 3 or 4 days.
  ⇒interval の in

2) She must arrive (at) the airport at least two hours before her departure, you know.

3) Yes, I know. She will have to check (in) and get aboarding pass.
  ⇒よく日常で使われる「チェックイン(記帳する/搭乗手続き)」 。aboarding pass(搭乗券)

4) Do they usually allow you to get (on) the plane a little early?
 ⇒get on boat, get on bassなどonを使う。車はget in a car (車の中に入るイメージ)
    ※get on / get in の使い分けはこちらの説明が詳しいです。
  http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12104277012

5) Do the planes always depart (at) the scheduled time?

6) Well, they usually leave (on) time, but not always.
  ⇒on time(定刻)

7) Once the plane is (in) the sky, you can remove your seat belt.

8) Then you can walk around (in) the cabin of the plane if you wish.

9) But the flight staff will not serve you unless you are (in) your seat.
 ⇒椅子の中に入るイメージ

10) How long does it take to get off the plane once you arrive (at) your destination?

11) You can usually leave (in) a few minutes but sometimes there are delays.

12) It depends (on) the situation.

13) Once you are (at) the airport terminal you should go to the luggage a carousel.

14) Stand (at) the carousel until your luggage arrives.

15) You may then place your luggage (in/on) a luggage cart if you wish.

16) Next, you should join the line that forms (at) the Immigration counter.

17) When your turn comes, place your passport (on) the counter for the Officer to examine.

18) After the officer has placed a stamp (on) your passport, proceed to Customs.

19) Make sure all your luggage is now (on) your possession.

20) Once you have cleared customs you will soon be (on) your way home.


2016年12月7日水曜日

IE開発者ツールの使い方(メモリリーク調査)

IEに「開発ツール」があります。
IEの歯車アイコン選択して、「 F12開発ツール」選択すると起動します。


この 「開発ツール」を使うことで、以下調べることができます。
・パフォーマンス調査(CPU時間など)
・ メモリリークの調査

メモリリーク調査
 [メモリ]ツールは、メモリの使用量を調査できるツールで、以下の機能があります。
① プロファイリングセッションの開始。
② プロファイリングセッションの終了。
③ プロファイリングセッションのインポート。
④ プロファイリングセッションのエクスポート。
⑤ ヒープスナップショットの作成。
⑥ メモリ合計。

 プロファイリングセッションを開始①すると、終了②するまでメモリの合計⑥がグラフで表示される。
⑤の[ヒープ スナップショットを作成します。]をクリックすると、そのクリック時点での、ページで使われているメモリの詳細情報(=スナップショット)が採取される


ヒープスナップショットは、メモリの状況を以下確認できます。
① ページ内のメモリ使用量。
② ページ内で保持しているオブジェクト数。
③ メモリ使用量と前回のスナップショットからの増量が表示される。
④ オブジェクト数と前回のスナップショットからの増減数が表示される。

①~④のようなリンクをクリックすることで、その詳細を確認できる。例えば、オブジェクト数の増減を示している④をクリックしてみよう。すると次の画面のように表示される。

タブ[種類][ルート][ドミネーター]をクリックして、オブジェクト数の関係詳細を把握することができます。
詳細は、実際に表示してみると、何となくわかりますが、
詳しく知りたい人は、【参考URL】のサイトを確認すると、分かりやすいです。


まとめますと、
・作成したページのメモリ使用量が多い場合
・使っているうちに次第にメモリ使用量が増えていく場合
などで、問題がどこにあるのかを特定する際に役に立ちます。

パフォーマンス調査用に、YSlowというツールも便利そうです。
下の参考URLにYSlowについて、詳しく書いてありました。
時間のある時に、使ってみようと思っています。


【参考URL】
http://www.yoheim.net/blog.php?q=20130708
http://www.buildinsider.net/web/ief12devtools/01

2016年12月6日火曜日

Amazon Go(アマゾン・ゴー)~無人コンビニ

Amazonは米国時間12月5日、コンセプトストア「Amazon Go(アマゾン・ゴー)」を発表しました。
下のURLに簡易に説明しており、動画もあります。

http://japan.cnet.com/news/service/35093243/

ネットのAmazonで購入するように、仮想カートに選んだ品物が追加(仮想カート)され、仮想カート内の商品総額が計算されて買い物客のAmazonアカウントに課金され、レシートがアプリに送られるそうです。
レジにならばなくっても、買ったものを計算してくれて、便利になりそうです。
駅の改札と同じようになるのですね。

でも、小さい店には必要のない話でそうね。
しかも、店員がいなくなるそうで、なんか味気ないですね。

下の記事を読むと、今後の世の中で、雇用はどんどんへりそうですね。
http://blogos.com/article/200882/
http://blogos.com/article/200832/

2016年12月4日日曜日

【もう一度、英語をやり直そう】英会話日記(11/30) ~本八幡getgo英会話

久しぶりの英会話の投稿です。
前置詞って、学生の頃詳しく勉強しないで、暗記で済ましていたよう気がします。
今週の英会話は、前置詞の英会話で、なるほどな、と思いました。
忘れないように、内容をまとめました。

1、日付
(1) atは「時」と表し、inは時間(time interval)を示す
(2) day on 曜日
(3) on月日(例: on December eleven)

2、場所
(1) at = 場所の点を表す(one point)
  例: at location
(2) on island(島にいる場合)、in Tokyo(city/state/countryにいる場合)
(3) on the corner(角で)
(4) on the second floor(2階)

3、物
(1) on television (番組)、on the television(テレビの上)
(2) put on clothes(服を着る)、take off clothes(服を脱ぐ)

4、状態
(1) on sale(服などの小物のセールス中)、for sale(大物(car/house/building)のセール)

【例文】
I live in an apartment building.
My apartment building ins on the corner.
My apartment is on the fifth floor.
My friend lives at 27 Strong Street
  →27Strong Streetは日本で言えば、番地にあたる
He lives in apartment 501.
  →501の呼び方は、「ファイブ、オー、ワン」。511は「ファイブイレブン」
It's in San Franisco.
I live on the top floor.
It's the fifth door on your left.
That apartment was in the basement.
  →basementは地下、B1は、「basement oneの略」
I used to live at 12 Harrison Street.
The train leaves in five minutes, hurry up.
I'm going to America in April.
He doesn't work on Sundas or Monday's,
In England the shops shut at 5:30.
She neer feels very good in the morning.
She is starting work on June 4th.
What do you do in the evenigs?
I can't sleep at night these days.
Where are you going in the summer?
I was born in 1966.


復習しないと、習った事を忘れてしまいますね。

ホームページ表示した時に、スクリプトエラー表示がでる場合

ホームページ表示すると、スクリプトエラーが発生する場合はありませんか?。


原因は、Yahoo!ツールバーが原因かもしれません。
Yahoo!ツールバーをアンインストールして、再度ホームページ表示してみてください。
うまくいく場合があります。

【Yahoo!ツールバーのアンインストール(削除)手順】
①ツールバーの[カスタマイズ]ボタン カスタマイズボタン を押して、表示されるメニューから[Yahoo!ツールバーについて]-[ツールバーを削除]を選びます。
②確認の画面が表示されるので、[アンインストール]ボタンを押します。
ツールバー7.2以前では[はい]ボタンを押します。

Windowsのコントロールパネル内にある[プログラム(アプリケーション)の追加と削除](Windowsのバージョンによっては、[プログラムと機能]または[プログラムのアンインストール])を利用してのアンインストールも可能です。


また、余計なアドインをインストールしたのが原因かも、しれません。
余計なものは削除すると、うまくいくと思います。

こちらのMicrosoftのURLには、その他の対応方法にいろいろ記載しています。
https://support.microsoft.com/ja-jp/kb/308260


【参考URL】
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1066447425
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1372587433
http://oshiete.goo.ne.jp/qa/1612865.html