SQLServerへの接続方法

コマンドプロンプトからsaアカウントで接続
>sqlcmd -S localhost -Usa
パスワード:

selectの出力結果をテキストファイルに保存
>sqlcmd -Q "use [000db];select * from [aaa_tbl]"
    -S localhost -Usa -P ******* > test.txt

基本的なSQL

追加(INSERT)

INSERT INTO xxx_tbl(xxx,yyy,zzz) VALUES('XXX','YYY','ZZZ')

削除(DELETE)

DELETE xxx_tbl WHERE XXX=’XXX’
※WHERE以降を省略した場合、テーブル内のすべての行を削除するため注意

変更(UPDATE)

UPDATE xxx_tbl SET xx='xx',yy='yy' WHERE zz='zz'
※WHERE以降を省略した場合、テーブル内のすべての行の値を変更するため注意

参照(SELECT)

基本パターン

同一テーブルをJOIN
SELECT A.[アカウント名],A.[ユーザID],B.[氏名] 
FROM [aaa_tbl] AS A
INNER JOIN [aaa_tbl]B ON A.[ユーザID]=B.[アカウント名]
WHERE A.[ユーザID]='111111'
※[aaa_tbl]=Aに短縮、同一テーブルをJOINする場合は別名にする必要があり、[aaa_tbl]Bとした。

総数
SELECT COUNT(*) FROM table1

再帰
SELECT * FROM [aaa_tbl] 
WHERE [kkk]=(SELECT DISTINCT([lll]) FROM [aaa_tbl]
 WHERE [アカウント名]='111111')

複数のユーザを対象としたselectの再帰
SELECT * FROM [bbb_tbl]
WHERE [アドレス] = ANY (SELECT [アドレス] FROM [aaa_tbl])

論理積条件
SELECT [アドレス] FROM [ccc_tbl]
WHERE ([ユーザID_A] IS NULL)
 AND ([ユーザID_B] IS NULL)
 AND ([ユーザID_C] IS NULL)

差分発生個所の確認(1カラム)
SELECT    '1側' AS 差分存在箇所, Main.ユーザID AS ユーザID
FROM      table1 AS Main LEFT JOIN
          table2 AS Sub ON (Main.ユーザID = Sub.ユーザID)
WHERE     Sub.ユーザID IS NULL
UNION ALL
SELECT    '2側' AS 差分存在箇所, Main.ユーザID AS ユーザID
FROM      table2 AS Main LEFT JOIN
          table1 AS Sub ON (Main.ユーザID = Sub.ユーザID)
WHERE     Sub.ユーザID IS NULL

差分発生個所の確認(行全体)
SELECT    '1側' AS 差分存在箇所, AA.*
FROM      (SELECT  *  FROM table1
           EXCEPT
           SELECT  *  FROM table2) AS AA
UNION ALL
SELECT    '2側' AS 差分存在箇所, AA.*
FROM      (SELECT  *  FROM table2
           EXCEPT
           SELECT  *  FROM table1) AS AA

SELECTの表示結果の変更

caseによる場合分け
SELECT name,TYPE, 
CASE WHEN member='ito taro' THEN 'ito' 
WHEN member='sato goro' THEN 'sato'
ELSE 'xxx' 
END
FROM dbo.member_tbl

表示結果の結合
SELECT name,TYPE,("name"+'('+TYPE+')') AS dummy,
FROM user_tbl

文字列の置換(name列の中のAをBに置き換えて表示)
SELECT name,REPLACE(name,A,B) FROM table1

桁を揃える
SELECT name,RIGHT('0000000' + RTRIM(ユーザID), 7) AS ユーザID
FROM table1

@の右側のドメイン名を変更する
SELECT name,
 LEFT(a.メールアドレス, CHARINDEX('@', a.メールアドレス) - 1) + '@sample.com' 
 AS 変更後のアドレス FROM table1

左から1番目の文字を抽出する
SELECT name, SUBSTRING(ユーザID, 0, 2) FROM table1

ローマ字姓名の頭文字を大文字に変換する
SELECT 
 UPPER(LEFT(ローマ字姓,1))+LOWER(RIGHT(ローマ字姓,LEN(ローマ字姓)-1)) AS ローマ字姓,
 UPPER(LEFT(ローマ字名,1))+LOWER(RIGHT(ローマ字名,LEN(ローマ字名)-1)) AS ローマ字名
FROM talble1

テーブル操作

テーブルの作成
CREATE TABLE table1 (col1 varchar(8000),col2 varchar(8000))

テーブルのコピー
SELECT * INTO todb.dbo.user_tbl FROM fromdb.dbo.user_tbl

テーブルの削除
DROP TABLE table1

テーブルのデータを空にする
TRUNCATE TABLE table1
最終更新:2012年06月17日 01:55