【SQL Server】SQL Serverの導入_sqlcmdで遊ぶ(DB作成～INSERTまで)

DBの勉強/検証がてらにSQL Serverの導入を行いました。なお、コマンドベースでの作業の為にSSMSは使用していません。
※個人的には、SSMSの方が操作しやすいです。

以下リンクから、「SQL2019-SSEI-Eval.exe」を取得し、インストールを行っています。
[SQL Server のダウンロード](https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads)

インストール後に、Powershellからsqlcmdコマンドを実施します。
-S でサーバ名を指定、－E　で認証方式をWindows認証で接続出来るようです。
Windows認証/SQL Server認証 と二つの認証方法があるようで、Windows認証だとWindowsにログインした際の認証情報を使うようでID/PASSの入力は必要ない。
SQL Server認証では、SQL Server側で管理しているID/PASSでログインを行う必要があるようです。

今回は、インストール後にID/PASSなどの設定を行っていないので、、
とりえあず、Windows認証でログインする事にします。

コマンド実行後に、1>と返ってきました。

```:sqlcmd
PS C:\> sqlcmd -S localhost -E
1>
```

では、好きなアニメのキャラ情報などが入ったDBを作成したいと思います。
CREATE DATABASEで作成出来ます。ちなみに、GO打たないと実行されません。
当方はこの仕様を知らずに、何か間違えたか？と５分位無駄にしました。

```:DB作成
1>CREATE DATABASE YUGIOH;
2>GO
```

作成したDBに移動します。
移動する前に現在地の確認を行い、移動します。
※DB_NAMEという関数を使用すれば、現在地が分かります。AS演算子で、列名をつけてます。
useを使って、master →　YUGIOH　にDBを切り替えます。

※下記URL参照
<https://docs.microsoft.com/ja-jp/sql/t-sql/functions/db-name-transact-sql?view=sql-server-ver16>

```:DB切り替え
>1SELECT DB_NAME() AS [Current Database];  
>2GO
Current Database
--------------------------------------------------------------------------------------------------------------------------------
master

1> use YUGIOH;
2> go
データベース コンテキストが 'YUGIOH' に変更されました。

1> SELECT DB_NAME() AS [Current Database];
2> go
Current Database
--------------------------------------------------------------------------------------------------------------------------------
YUGIOH
```

テーブルの作成を行います。CREATE TABLEで作成出来ます。
作成後に、テーブルが出来ているかSelectで探してみます。

```:テーブル作成
1>CREATE TABLE VANILLA(
2>code INT UNIQUE,
3>name VARCHAR(20),
4>attack INT,
5>defense INT);
6>GO

1> select * from VANILLA;
2> go
code        name                 attack      defense
----------- -------------------- ----------- -----------

(0 行処理されました)
```

テーブル作成後に、INSERTOでデータ挿入を行います。
selectで反映されているかを確認します。

```:データ挿入
1> INSERT INTO VANILLA (code,name,attack,defense) values (1,'ブルーアイズホワイトドラゴン',3000,2500)
2> INSERT INTO VANILLA (code,name,attack,defense) values (2,'ブルーアイズホワイトドラゴン',3000,2500)
3> INSERT INTO VANILLA (code,name,attack,defense) values (3,'ブルーアイズホワイトドラゴン',3000,2500)
4> INSERT INTO VANILLA (code,name,attack,defense) values (4,'ブラックマジシャン',2500,2100)
5> INSERT INTO VANILLA (code,name,attack,defense) values (5,'エルフの剣士',1400,1200)
6> INSERT INTO VANILLA (code,name,attack,defense) values (6,'ワイト',300,200);
7> GO

(1 行処理されました)

(1 行処理されました)

(1 行処理されました)

(1 行処理されました)

(1 行処理されました)

(1 行処理されました)

1> SELECT * FROM VANILLA;
2> go
code        name                           attack      defense
----------- ------------------------------ ----------- -----------
          1 ブルーアイズホワイトドラゴン                        3000        2500
          2 ブルーアイズホワイトドラゴン                        3000        2500
          3 ブルーアイズホワイトドラゴン                        3000        2500
          4 ブラックマジシャン                             2500        2100
          5 エルフの剣士                                1400        1200
          6 ワイト                                    300         200

(6 行処理されました)
```

見慣れてる単語だと単調な作業でも楽しく感じます。インデントが気になりますが、今は無視します。
(sqlplusとかだと、formatすぐ弄りたくなるのですが、、)
簡単に、selectを叩いていこうと思います。ブルーアイズホワイトドラゴンの攻撃力と守備力を足して、totalカラムとして出力します。

```:遊び
1> select name,(attack + defense) as total from VANILLA where name = 'ブルーアイズホワイトドラゴン'
2> go
name                           total
------------------------------ -----------
ブルーアイズホワイトドラゴン                        5500
ブルーアイズホワイトドラゴン                        5500
ブルーアイズホワイトドラゴン                        5500
```

地味に楽しいな、、土日にもう少し遊んでみようかなと思います。