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

0 件のコメント:

コメントを投稿