勉強/検証も兼ねて、SQL Serverのインストールを行い、sqlcmdコマンドを使用したコマンドベースでの作業を行いました。
SQL Serverの導入_sqlcmdで遊ぶ
今回は、WHERE句/ORDER BY句を使用して遊びます。
下記のテーブルを作成して、遊びます。
※前回のSQL Serverの導入_sqlcmdで遊ぶを見てくれている人がいる場合は、DROP TABLE VANILLAでテーブルの削除を行ってください。「データベースに 'VANILLA' という名前のオブジェクトが既に存在します。」というエラーが出て、同名のテーブルは作成出来ないと思われます。
CREATE TABLE VANILLA(
code INT UNIQUE,
level INT,
attack INT,
defense INT,
name VARCHAR(30));
GO
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (1,1,'ワイト',300,200)
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (2,8,'ブルーアイズホワイトドラゴン',3000,2500)
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (3,4,'ホーリー・エルフ',800,2000)
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (4,6,'デーモンの召喚',2500,1200)
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (5,4,'ワイバーンの戦士',1500,1200)
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (6,7,'ブラックマジシャン',2500,2100)
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (7,3,'闇・道化師のサギー',600,1500)
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (8,3,'ベビードラゴン',1200,700)
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (9,4,'砦を守る翼竜',1400,1200)
INSERT INTO VANILLA (code,level,name,attack,defense) VALUES (10,4,'グレムリン',1300,1400)
GO
データを作成したら、とりあえずselect叩きます。
1> SELECT * FROM VANILLA;
2> GO
code level attack defense name
----------- ----------- ----------- ----------- ------------------------------
1 1 300 200 ワイト
2 8 3000 2500 ブルーアイズホワイトドラゴン
3 4 800 2000 ホーリー・エルフ
4 6 2500 1200 デーモンの召喚
5 4 1500 1200 ワイバーンの戦士
6 7 2500 2100 ブラックマジシャン
7 3 600 1500 闇・道化師のサギー
8 3 1200 700 ベビードラゴン
9 4 1400 1200 砦を守る翼竜
10 4 1300 1400 グレムリン
(10 行処理されました)
お次にORDER BY句を使用して、データの並び替えを行います。
attackカラムの数値が高い順で並び替えを行います。
selete文の後ろに ORDER BY カラム名 DESC or ASCと記載する事で並び替えを行えます。
降順の場合はDESC/昇順はASCを使用します。デフォルトだとASCが適用されます。
1> SELECT * FROM VANILLA ORDER BY attack DESC;
2> GO
code level attack defense name
----------- ----------- ----------- ----------- ------------------------------
2 8 3000 2500 ブルーアイズホワイトドラゴン
4 6 2500 1200 デーモンの召喚
6 7 2500 2100 ブラックマジシャン
5 4 1500 1200 ワイバーンの戦士
9 4 1400 1200 砦を守る翼竜
10 4 1300 1400 グレムリン
8 3 1200 700 ベビードラゴン
3 4 800 2000 ホーリー・エルフ
7 3 600 1500 闇・道化師のサギー
1 1 300 200 ワイト
(10 行処理されました)
並び替えました。ちなみに、複数指定する事も可能です。
カンマ区切りで、attack DESC,level DESCと指定する事で attack → level の順番で並び替えを行ってくれます。
上記で並び替えをすると、'ブラックマジシャン' と 'デーモンの召喚' の順番が逆になります。
1> SELECT * FROM VANILLA ORDER BY attack DESC,level DESC;
2> GO
code level attack defense name
----------- ----------- ----------- ----------- ------------------------------
2 8 3000 2500 ブルーアイズホワイトドラゴン
6 7 2500 2100 ブラックマジシャン
4 6 2500 1200 デーモンの召喚
5 4 1500 1200 ワイバーンの戦士
9 4 1400 1200 砦を守る翼竜
10 4 1300 1400 グレムリン
8 3 1200 700 ベビードラゴン
3 4 800 2000 ホーリー・エルフ
7 3 600 1500 闇・道化師のサギー
1 1 300 200 ワイト
お次に、levelカラムが4となっているデータを取得します。
指定した条件でデータを取得したい場合は、WHERE句を使用します。
selete文の後ろに、WHERE カラム 条件式 と記載する事で指定した条件でデータを取得出来ます。
1> SELECT * FROM VANILLA WHERE level = 4;
2> go
code level attack defense name
----------- ----------- ----------- ----------- ------------------------------
3 4 800 2000 ホーリー・エルフ
5 4 1500 1200 ワイバーンの戦士
9 4 1400 1200 砦を守る翼竜
10 4 1300 1400 グレムリン
(4 行処理されました)
and/orを使用する事で、複数条件・いずれかの条件でのデータを取得出来ます。
①attackカラムとdefenseカラムが1000以上のデータを取得
②attackカラムとdefenseカラムのいずかが2000以上のデータを取得
を行います。
1> SELECT * FROM VANILLA WHERE (attack >= 1000) AND (defense >= 1000);
2> GO
code level attack defense name
----------- ----------- ----------- ----------- ------------------------------
2 8 3000 2500 ブルーアイズホワイトドラゴン
4 6 2500 1200 デーモンの召喚
5 4 1500 1200 ワイバーンの戦士
6 7 2500 2100 ブラックマジシャン
9 4 1400 1200 砦を守る翼竜
10 4 1300 1400 グレムリン
(6 行処理されました)
1> SELECT * FROM VANILLA WHERE (attack >= 2000) OR (defense >= 2000);
2> GO
code level attack defense name
----------- ----------- ----------- ----------- ------------------------------
2 8 3000 2500 ブルーアイズホワイトドラゴン
3 4 800 2000 ホーリー・エルフ
4 6 2500 1200 デーモンの召喚
6 7 2500 2100 ブラックマジシャン
(4 行処理されました)
最後に、Like演算子について
特定の文字列を含むデータを取得したい場合に、Like演算子を使用します。
WHERE カラム名 LIKE '文字' で特定の文字列を含むデータを取得出来ます。
検索対象には、ワイルドカードを使用する事が主です。
下記をよく使用します。
ワイルドカード文字 | 説明 |
---|---|
% | 0個以上の文字 |
_ | 任意の一文字 |
LIKE句を使用して、ドラゴンが含まれるデータを取得します。
1> SELECT * FROM VANILLA WHERE name LIKE '%ドラゴン%';
2> GO
code level attack defense name
----------- ----------- ----------- ----------- ------------------------------
2 8 3000 2500 ブルーアイズホワイトドラゴン
8 3 1200 700 ベビードラゴン
(2 行処理されました)
業務上でも、WHERE句/ORDER BY句/LIKE演算子の使用頻度は高いです。
というか、SELECT文とかALTER文しかほぼ使ってないです。(検証の時にINSERT文/UPDATE文書く位です、、)
最近は業務で触る機会がないので、こういった自己学習を設けないと駄目ですね。
何かの参考になれば、幸いでございます。
以上です。