- 事前作業(サンプル スクリプトのダウンロードとセットアップ)
- SELECT ステートメントによるデータ検索
- データの並べ替え: ORDER BY 句
- 算術演算子: +、-、*、/
- 文字列連結演算子: +
- 重複データの排除: DISTINCT
事前作業(サンプル スクリプトのダウンロードとセットアップ)
Windows エクスプローラーを起動して、サンプル スクリプトをダウンロードしたフ
ォルダーを展開し、このフォルダー内の「CreateTables.txt」ファイルをダブル クリックし
て開きます。ファイルの内容をすべてコピーして、クエリ エディターへ貼り付けます。
貼り付け後、ツールバーの[!実行]ボタンをクリックしてクエリを実行します。これにより、
「sampleDB」という名前のデータベースが作成され、その中へ「社員」と「部門」テーブ
ルが作成されます。実行後、「社員」テーブルの 6 件のデータと「部門」テーブルの 2 件の
データが表示されれば、実行が完了です。
SELECT ステートメントによるデータ検索
SQL では、SELECT というステートメントを利用することで、テーブル内のデータを検索できる
ようになります。構文は、次のとおりです。
SELECT 列名1, 列名2, … FROM テーブル名 WHERE 検索する行の条件 |
SELECT の後には、取得したい列の名前をカンマで区切って指定します。列名へ、アスタリスク「*」を指定した場合は、すべての列という意味になり、テーブル内のすべての列を取得することができます。WHERE 句は省略することも可能で、この場合は、すべての行が取得の対象となります。
Let's Try
- まずは、[スタート]メニューの[すべてのプログラム]から[Microsoft SQL Server 2012]
の[SQL Server Management Studio]をクリックして、Management Studio を起動し
ます。 - [サーバーへの接続]ダイアログが表示されたら、[サーバー名]で SQL Server の名前を入
力します。
[認証]では、「Windows 認証」を選択して、[接続]ボタンをクリックします。なお、認
証については、本自習書シリーズの「ログイン認証とオブジェクト権限」編で詳しく説明して
いますので、こちらもぜひご覧いただければと思います。 - Management Studio が起動したら、次のようにツールバーの[新しいクエリ]ボタンをク
リックして、[クエリ エディター]を開きます。
- クエリ エディターでは、次のように入力して、sampleDB データベースへ接続して、「社員」
テーブルのデータを参照します。
USE sampleDB SELECT * FROM 社員
SELECT ステートメントの記述が完了したら、ツールバーの[!実行]ボタンをクリックし
て、ステートメントを実行します。これにより、結果ウィンドウがグリッド形式(表形式)へ
変わって、「sampleDB」データベース内の「社員」テーブルのすべてのデータを取得するこ
とが確認できます。「USE」は、データベースへ接続するための SQL Server 独自のステート
メント(Transact-SQL ステートメント)で、SELECT ステートメントで「*」を指定したこ
とで、社員テーブルのすべてのデータを取得することができます。
Note: SQL ステートメント内の記号は半角で入力
SQL ステートメントでは、英数字や記号(スペース、カッコ、カンマ、単一引用符)は、すべて半角で入力する必
要があります。日本語入力(IME)がオンになっている場合は、デフォルトでは、スペースが全角になるので、半
角へ変換し忘れないように注意してください。 - 次に、社員テーブルの「氏名」列と「給与」列のデータのみを取得してみましょう。特定の列
データのみを取得するには、次のように 列名をカンマで区切って指定します。
SELECT 氏名, 給与 FROM 社員
このように、列名をカンマで区切って記述することで、その列のデータのみを取得できるよう
になります。Note: 実行したいステートメントだけを選択してから[!実行]をクリック
クエリ エディターでは、ツールバーの[!実行]ボタンをクリックすると、エディター内へ記述したすべてのス
テートメントが実行されてしまいます。これを回避するには、実行したいステートメントだけを選択(マウスでド
ラッグ&ドロップまたはキーボードの[Shift]キーを押しながら矢印キーで選択)してから[!実行]ボタンを
クリックするようにします。
行の絞り込み: WHERE 句
ここまで利用した SELECT ステートメントは、WHERE 句を省略していましたが、この場合は、
すべての行データを取得します。SELECT ステートメントでは、WHERE 句を利用すると、絞り
込み条件を指定して、特定の行のみを取得できるようになります。では、これを試してみましょう。
- 次のように記述して、「社員番号」が「2」番の社員のみを取得してみます。
社員番号が 2 番の「鈴木 太郎」さんのみを取得できたことを確認できます。 - 次に、「氏名」が「浅田 あさみ」さんのデータのみを取得してみましょう。
Note: 文字列と日付データ型の値は単一引用符で囲む
「氏名」列のデータを「'」(単一引用符)で囲んでいるのは、SQL ステートメントでは「文字列(char)と日付
(date)データ型の値は、単一引用符で囲まなければならない」という決まりがあるためです。文字列を利用する
場合は、単一引用符を忘れずに付けるようにしましょう。
データの並べ替え: ORDER BY 句
SELECT ステートメントでは、ORDER BY 句を利用すると、特定の列を基準にデータを並べ替え
て、結果を取得できるようになります。これは、次のように利用します。
SELECT 列名1, 列名2, … |
ORDER BY の後には、並べ替えの基準となる列名を指定します。デフォルトでは、昇順(数値の
場合は「小から大へ」、英字の場合は「A から Z へ」、日付の場合は「古から新へ」)で並べ替え
ることができ、DESC キーワードを利用した場合は、降順で並べ替えることができます。
Let's Try: 昇順に並べ替え
- 次のように入力して、「社員」テーブルのデータを "給与の低い順(昇順)" に並べ替えて、
表示してみましょう。
ORDER BY 句で指定した「給与」列を基準にデータを昇順に並べ替えることができたことを
確認できます。
データを昇順に並べ替える場合には、次のように「ASC」キーワードを利用しても同じ結果を
取得することができます。
ASC キーワードを省略した場合と同じ結果を取得できたことを確認できます。 - 次に、"給与の高い順" に並べ替えてみましょう。降順で並べ替えるには、次のように DESC
キーワードを利用します。
「給与」列の後へ、DESC キーワードを記述したので、給与が高い順(降順)に並べ替える
ことができたことを確認できます。Note: NULL 値の並べ替え順
NULL 値については、Step 4 で説明しますが、SQL Server では、NULL 値は最も小さい値として扱われます。
なお、Oracle の場合は逆になり、NULL 値が最も大きい値として扱われます(NULLS FIRST オプションを指定
して、NULL 値を最初に表示することも可能です)。 - 次のように入力して、"給与の高い順" に並べ替えて、"同じ給与の社員がいた場合には、社員番号の小さい順" に並べ替えるようにしてみましょう。
このようにカンマで区切って複数の列を指定すれば、1 つ目の列で同じ値だったとしても、2
つ目の列で並べ替えることができます。2 つ目の列の並べ替え順は、デフォルトでは昇順です。 - 次に、"同じ給与の社員がいた場合には、社員番号の大きい順" に並べ替えるようにしてみましょう。
Note: ORDER BY 句を指定しない場合の並べ替え順は保証されない
SQL の世界では、ORDER BY 句を指定しない場合の並べ替え順は保証されません。どういった形で取得されるか
は、そのときの状況によって変化し、社員番号で並べ替えられるかもしれないし、給与で並べ替えられるかもしれ
ません。Note: ORDER BY 句には数値も指定できる
ORDER BY 句では、列名の代わりに “数値” を指定して、次のように記述することもできます。
SELECT 社員番号, 給与 FROM 社員
ORDER BY 2 DESC, 1
算術演算子: +、-、*、/
SQL では、算術演算子を利用して、数値データに対して演算を行うことができます。算術演算子
には、加算の「+」や減算の「-」、乗算の「*」、除算の「/」などがあります。
Let's Try
- 次のように算術演算子の「*」を利用して、「給与」の値を「3 倍」にした結果を取得してみま
しょう。
このように、算術演算子を利用することで、数値データに対して、演算を行えるようになりま
す。Note: NULL 値に対する演算結果は「NULL」
NULL 値に対しては、何かしらの演算を行っても、結果は NULL 値になります。
Note: 列に対する別名をつける: AS
算術演算子を使って取得した列の名前は「(列名なし)」と表示されます。列名は、ORDER BY 句やアプリケーシ
ョンからデータを取得する際に必要になるので、このままだと操作がしづらくなります。このような場合のために、
結果列に対して、新しい列名をつける機能として「AS」があります。これは、次のように利用します。
このように、AS を使用すると、結果列に対して新しい列名を付け、ORDER BY 句やアプリケーションから利用
できるようになります。
また、AS は、既存の列に対して別名を付けたり、AS を省略して、次のように使用することもできます。
文字列連結演算子: +
SQL では、「+」(文字列連結演算子)を利用すると、文字データを連結することができます。た
だし、これは SQL Server 独自の演算子で、SQL 規格(他のデータベース)では、「||」(縦線:
Vertical Line を2 個)を使用して、文字データを連結します。
Let's Try
- 次のように入力して、社員の「氏名」列へ “さん” をつけて、表示してみましょう。
このように、「+」を利用すると、文字データを連結できるようになります。
表示された結果には、氏名と “さん” の間に余分なスペースがありますが、これは、「氏名」
列のデータ型が Char(50) と定義されているためです。Char データ型では、指定したバイ
ト数に満たない部分をスペースで埋めます(データ型については、本自習書シリーズの
「Transact SQL 入門」で詳しく説明しています)。
Note: 余分なスペースを詰める関数
Char データ型では、指定したバイト数に満たない部分をスペースで埋めると説明しましたが、その余分なスペー
スを詰めることができる関数もあります。それが「RTRIM」関数です。この関数を使用すると、次のように余分
なスペースを詰められるようになります(RTRIM 関数については、本自習書シリーズの「Transact SQL 入門」
で説明しています)。
重複データの排除: DISTINCT
SQL では、DISTINCT 句を利用して、重複したデータを取り除くことができます。これは、次の
ように利用します。
SELECT DISTINCT 列名 FROM テーブル名 |
0 件のコメント:
コメントを投稿