SQL server Management Studio の使い方

以下の書籍を参照しました。
SQL Server 2008の教科書
松本美穂 松本崇博 ソシム株式会社 2009



【SQLステートメントの基本:WHERE句で利用できる演算子】

■比較演算子


比較演算子の一覧
a = b a と b は等しい
a < b a は b より小さい
a > b a は b より大きい
a <= b a は b 以下
a >= b a は b 以上
a <> b a と b は等しくない


●例1

select *または列名 from テーブル名
where 列名 = 値

select *または列名 from テーブル名
where 列名 <= 値


●例2 条件を否定する場合

select *または列名 from テーブル名
where not ( 列名 = 値 )

  ⇕⇕⇕ 同じこと

select *または列名 from テーブル名
where 列名 <> 値



■論理演算子


where句で条件を複数指定したい場合に使用する。
AND すべての条件を満たす
OR  どちらかの条件を満たすデータの表示


●例

select *または列名 from テーブル名
where 列名1 = 値1
and 列名2 > 値2


※ and と or を同時に使うと、and が優先される。
※ or を優先させたい場合は、その条件を()でくくる。



■BETWEEN演算子


△△以上▲▲以下、という条件を指定した場合に使用する。
1つの条件式に演算子は1つしか使えないため。
※ 未満の条件はbetweenでは指定できない


●例1 500以上700以下を指定したい場合

select *または列名 from テーブル名
where 列名1 >= 500
and 列名1 <= 700

  ⇕⇕⇕ もっとすっきり

select *または列名 from テーブル名
where 列名1 between 500 and 700


●例2 500以上700未満を指定したい場合

select *または列名 from テーブル名
where 列名1 >= 500
and 列名1 < 700



■NULL値の検索


NULL値を検索するときは、is null を使用する。


●例

select *または列名 from テーブル名
where 列名1 is null



■IN演算子


AまたはBまたはC といった条件の指定に使用する。


●例1

select *または列名 from テーブル名
where 列名1 in ( 値1 , 値2 , … )


●例2 NULL値を指定したい場合

select *または列名 from テーブル名
where 列名1 in ( 値1 , 値2 , … )
or 列名1 is null



■LIKE演算子


文字データのあいまい検索に使用する。
ワイルドカードは「%」か「_」
% … 0文字以上の任意の文字列
_ … 任意の一文字
 

●例1 列名1内の「あ」で始まるデータの検索

select *または列名 from テーブル名
where 列名1 like 'あ%'

※ 「%あ%」のように、検索ワードの頭にも使用できる。


●例2 列名1内の「あ」で始まり、「い」を含んだデータの検索

select *または列名 from テーブル名
where 列名1 like 'あ%'
or 列名1 like '%い%'


●例3 二文字目に「あ」があるデータを検索

select *または列名 from テーブル名
where 列名1 like '_あ%'


※ 文字「'」を含んだ文字列の検索をしたい場合
 × → 'shelly's'
 ○ → 'shelly''s'

※ 「%」や「_」を含んだ文字列の検索をしたい場合
 ESCAPE句を使用する。
 × → '100%'
 ○ → '100\%%' escape '\'
 % の前に \% を付けることで、「% はワイルドカードではない」となる。

SQL server Management Studio の使い方

以下の書籍を参照しました。
SQL Server 2008の教科書
松本美穂 松本崇博 ソシム株式会社 2009



【SQLステートメントの基本:並べ替え】

■データの並べ替え…ORDER BY

●昇順 ASC (記述がない場合は実行される) Ascend

select *または列名 from テーブル名
order by 列名 asc

●降順 DESC Descend

select *または列名 from テーブル名
order by 列名 desc

※ SQL Serverでは、NULLは一番小さい値として扱われる。



■データの並べ替え(複数列)

select *または列名 from テーブル名
order by 列名1 desc, 列名2 desc

※ 昇順:ascendは省略可



■データの並べ替え(where句がある場合)

select *または列名 from テーブル名
where 列の検索条件
order by 列名1, 列名2 { asc | desc }


※ { asc | desc } … asc または desc
SQL server Management Studio の使い方

以下の書籍を参照しました。
SQL Server 2008の教科書
松本美穂 松本崇博 ソシム株式会社 2009



【制約】

■NOT NULL
■PRIMARY KEY
■UNIQUE
■CHECK
■FOREIGN KEY


以下、特記ない場合、「sampleDB」というデータベースを使って作業しているものとします。




■PRIMARY KEY(主キー制約)
…重複不可、NOT NULL

NOT NULL制約が含まれているので、別途設定の必要なし

(設定方法)
オブジェクトエクスプローラで「sampleDB」内の該当のテーブルを右クリック
→「デザイン」に進むと、「テーブルデザイナ」ウィンドウが表示される。

主キー(PRIMARY KEY)を設定したい列名を右クリック
→「主キーの設定」をクリックすると、列名の左に鍵マークが表示される。

 >複合主キーの設定時は、設定したい列を[Ctrl]で複数選択する。

保存をすれば、主キー設定完了♪
(必ずすること!)


※ 重複時のエラーは「PK_テーブル名」

※ SQLでPRIMARY KEYを設定するには

ALTER TABLE テーブル名
ADD CONSTRAINT 制約名 PRIMARY KEY (列名,列名2)

制約名は、だいたい列名から取られるけど、複合主キーの場合は何か名前を付ける。



■UNIQUE制約(重複データを入力させない)
…NOT NULL制約が含まれていない。(NULLでもOK)
 ただし、1つだけで、複数行にNULL値は入れられない。

(設定方法)
オブジェクトエクスプローラで「sampleDB」内の該当のテーブルを右クリック
→「デザイン」に進むと、「テーブルデザイナ」ウィンドウが表示される。

任意の列名を右クリック
→「インデックス/キー」をクリックすると、「インデックス/キー」ダイアログが表示されるので
→[追加]をクリック。
→「全般」セクション内「種類」を「一意キー」にする。
 「列」で列を選択する。


※ SQLでUNIQUE制約を設定するには

ALTER TABLE テーブル名
ADD CONSTRAINT 制約名 UNIQUE (列名)

※ SQLでUNIQUE制約を削除するには

ALTER TABLE テーブル名
DROP CONSTRAINT 制約名



■CHECK制約(入力データの制限)
…WHERE句で指定できる演算子が利用できる。

(設定方法)
オブジェクトエクスプローラで「sampleDB」内の該当のテーブルを右クリック
→「デザイン」に進むと、「テーブルデザイナ」ウィンドウが表示される。

任意の列名を右クリック
→「制約のチェック」をクリックすると、「CHECK制約」ダイアログが表示されるので
→[追加]をクリック。
→「全般」セクションブ内「式」の右に条件式を入力。(給与>=0 など)
→「ID」セクション内「名前」で「CK_制約名」など名前を付ける。
→[閉じる]をクリックして「CHECK制約」ダイアログを閉じる。


※ 制限の無効化
データのチェックを行うため、INSERTやUPDATEの時、パフォーマンスが低下する。
そのため、一時的に制約を無効化できる。
上記の「CHECK制約」ダイアログ内「テーブルデザイナ」セクションで
「INSERTおよびUPDATEに適用」で設定可能。

※ SQLで制限を無効化するには

ALTER TABLE テーブル名
NOCHECK CONSTRAINT 制約名

※ SQLで無効化の解除

ALTER TABLE テーブル名
CHECK CONSTRAINT 制約名


■FOREIGN KEY制約(外部キー制約)
…外部キーと主キーのリレーションシップが正しいかのチェックする機能。
 ・主キーに存在しない値を追加できないようにする。
 ・外部キーから参照されている主キー値を削除できないようにする。

(設定方法)
外部キーを設定するテーブルを「テーブルA」、主キーがあるテーブルを「テーブルB」とする。
オブジェクトエクスプローラで「sampleDB」内のテーブルAを右クリック
→「デザイン」に進むと、「テーブルデザイナ」ウィンドウが表示される。

任意の列名を右クリック
→「リレーションシップ」をクリックすると、「外部キー リレーションシップ」ダイアログが表示される。
→[追加]をクリック。
→「全般」セクション内「テーブルと列の指定」の右列の[...]をクリック。
→「テーブルと列」ダイアログが表示される。
→リレーションシップ名、画面左に、テーブルBと列を指定。
 画面右のテーブルAは、すでに指定されているので、列を指定。
→[OK]で「テーブルと列」ダイアログを閉じる。
→[閉じる]をクリックして「外部キー リレーションシップ」ダイアログを閉じる。


または、オブジェクトエクスプローラの「データベースダイアグラム」を右クリックし
「新しいデータベースダイアグラム」をクリックし、テーブルを選択することで
GUI操作での設定も可能。
すでに設定されているのも確認できます。



※ SQLでFOREIGN KEY制約を設定するには

ALTER TABLE 外部キーがあるテーブル名
ADD CONSTRAINT 制約名
FOREIGN KEY (列名) REFERENCE 主キーがあるテーブル名(列名)

※ SQLで連鎖更新・連鎖削除を設定するには

主キー側のデータを更新・削除した際に、参照側(外部キー設定側)も
連鎖更新・削除することで、リレーションシップ(参照関係)を保つ。

ALTER TABLE 外部キーがあるテーブル名
ADD CONSTRAINT 制約名
FOEIGN KEY (列名) REFERENCE 主キーがあるテーブル名(列名)
ON UPDATE CASCADE
ON DELETE CASCADE

CASCADE の代わりに SETNULLを指定すると、NULL値のセットができる。



*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*

制約は、オブジェクトエクスプローラー内のテーブル名を右クリックし、
「最新の情報に更新」をクリックすると
オブジェクトエクスプローラーの表示が変わって、制約とかキーとかが確認できる。