2013年3月30日土曜日

◆データの検索(SELECT) の基本操作

事前作業(サンプル スクリプトのダウンロードとセットアップ)

Windows エクスプローラーを起動して、サンプル スクリプトをダウンロードしたフ
ォルダーを展開し、このフォルダー内の「CreateTables.txt」ファイルをダブル クリックし
て開きます。ファイルの内容をすべてコピーして、クエリ エディターへ貼り付けます。

image

貼り付け後、ツールバーの[!実行]ボタンをクリックしてクエリを実行します。これにより、
「sampleDB」という名前のデータベースが作成され、その中へ「社員」と「部門」テーブ
ルが作成されます。実行後、「社員」テーブルの 6 件のデータと「部門」テーブルの 2 件の
データが表示されれば、実行が完了です。

SELECT ステートメントによるデータ検索

SQL では、SELECT というステートメントを利用することで、テーブル内のデータを検索できる
ようになります。構文は、次のとおりです。

SELECT 列名1, 列名2, … FROM テーブル名 WHERE 検索する行の条件

SELECT の後には、取得したい列の名前をカンマで区切って指定します。列名へ、アスタリスク「*」を指定した場合は、すべての列という意味になり、テーブル内のすべての列を取得することができます。WHERE 句は省略することも可能で、この場合は、すべての行が取得の対象となります。

Let's Try
  1. まずは、[スタート]メニューの[すべてのプログラム]から[Microsoft SQL Server 2012]
    の[SQL Server Management Studio]をクリックして、Management Studio を起動し
    ます。
  2. [サーバーへの接続]ダイアログが表示されたら、[サーバー名]で SQL Server の名前を入
    力します。
    [認証]では、「Windows 認証」を選択して、[接続]ボタンをクリックします。なお、認
    証については、本自習書シリーズの「ログイン認証とオブジェクト権限」編で詳しく説明して
    いますので、こちらもぜひご覧いただければと思います。
  3. Management Studio が起動したら、次のようにツールバーの[新しいクエリ]ボタンをク
    リックして、[クエリ エディター]を開きます。
    image
  4. クエリ エディターでは、次のように入力して、sampleDB データベースへ接続して、「社員」
    テーブルのデータを参照します。

    USE sampleDB SELECT * FROM 社員


    image
    SELECT ステートメントの記述が完了したら、ツールバーの[!実行]ボタンをクリックし
    て、ステートメントを実行します。これにより、結果ウィンドウがグリッド形式(表形式)へ
    変わって、「sampleDB」データベース内の「社員」テーブルのすべてのデータを取得するこ
    とが確認できます。「USE」は、データベースへ接続するための SQL Server 独自のステート
    メント(Transact-SQL ステートメント)で、SELECT ステートメントで「*」を指定したこ
    とで、社員テーブルのすべてのデータを取得することができます。

    Note: SQL ステートメント内の記号は半角で入力
    SQL ステートメントでは、英数字や記号(スペース、カッコ、カンマ、単一引用符)は、すべて半角で入力する必
    要があります。日本語入力(IME)がオンになっている場合は、デフォルトでは、スペースが全角になるので、半
    角へ変換し忘れないように注意してください。
  5. 次に、社員テーブルの「氏名」列と「給与」列のデータのみを取得してみましょう。特定の列
    データのみを取得するには、次のように 列名をカンマで区切って指定します。
    SELECT 氏名, 給与 FROM 社員

    image
    このように、列名をカンマで区切って記述することで、その列のデータのみを取得できるよう
    になります。

    Note: 実行したいステートメントだけを選択してから[!実行]をクリック
    クエリ エディターでは、ツールバーの[!実行]ボタンをクリックすると、エディター内へ記述したすべてのス
    テートメントが実行されてしまいます。これを回避するには、実行したいステートメントだけを選択(マウスでド
    ラッグ&ドロップまたはキーボードの[Shift]キーを押しながら矢印キーで選択)してから[!実行]ボタンを
    クリックするようにします。

行の絞り込み: WHERE 句

ここまで利用した SELECT ステートメントは、WHERE 句を省略していましたが、この場合は、
すべての行データを取得します。SELECT ステートメントでは、WHERE 句を利用すると、絞り
込み条件を指定して、特定の行のみを取得できるようになります。では、これを試してみましょう。

  1. 次のように記述して、「社員番号」が「2」番の社員のみを取得してみます。
    image
    社員番号が 2 番の「鈴木 太郎」さんのみを取得できたことを確認できます。
  2. 次に、「氏名」が「浅田 あさみ」さんのデータのみを取得してみましょう。
    image

    Note: 文字列と日付データ型の値は単一引用符で囲む
    「氏名」列のデータを「'」(単一引用符)で囲んでいるのは、SQL ステートメントでは「文字列(char)と日付
    (date)データ型の値は、単一引用符で囲まなければならない」という決まりがあるためです。文字列を利用する
    場合は、単一引用符を忘れずに付けるようにしましょう。
データの並べ替え: ORDER BY 句

SELECT ステートメントでは、ORDER BY 句を利用すると、特定の列を基準にデータを並べ替え
て、結果を取得できるようになります。これは、次のように利用します。

SELECT 列名1, 列名2, …
FROM テーブル名
OREDER BY 列名[ ASC | DESC ]

ORDER BY の後には、並べ替えの基準となる列名を指定します。デフォルトでは、昇順(数値の
場合は「小から大へ」、英字の場合は「A から Z へ」、日付の場合は「古から新へ」)で並べ替え
ることができ、DESC キーワードを利用した場合は、降順で並べ替えることができます。

Let's Try: 昇順に並べ替え
  1. 次のように入力して、「社員」テーブルのデータを "給与の低い順(昇順)" に並べ替えて、
    表示してみましょう。
    image
    ORDER BY 句で指定した「給与」列を基準にデータを昇順に並べ替えることができたことを
    確認できます。
    データを昇順に並べ替える場合には、次のように「ASC」キーワードを利用しても同じ結果を
    取得することができます。
    image
    ASC キーワードを省略した場合と同じ結果を取得できたことを確認できます。
  2. 次に、"給与の高い順" に並べ替えてみましょう。降順で並べ替えるには、次のように DESC
    キーワードを利用します。
    image
    「給与」列の後へ、DESC キーワードを記述したので、給与が高い順(降順)に並べ替える
    ことができたことを確認できます。Note: NULL 値の並べ替え順
    NULL 値については、Step 4 で説明しますが、SQL Server では、NULL 値は最も小さい値として扱われます。
    なお、Oracle の場合は逆になり、NULL 値が最も大きい値として扱われます(NULLS FIRST オプションを指定
    して、NULL 値を最初に表示することも可能です)。
  3. 次のように入力して、"給与の高い順" に並べ替えて、"同じ給与の社員がいた場合には、社員番号の小さい順" に並べ替えるようにしてみましょう。
    image
    このようにカンマで区切って複数の列を指定すれば、1 つ目の列で同じ値だったとしても、2
    つ目の列で並べ替えることができます。2 つ目の列の並べ替え順は、デフォルトでは昇順です。
  4. 次に、"同じ給与の社員がいた場合には、社員番号の大きい順" に並べ替えるようにしてみましょう。
    image
    Note: ORDER BY 句を指定しない場合の並べ替え順は保証されない
    SQL の世界では、ORDER BY 句を指定しない場合の並べ替え順は保証されません。どういった形で取得されるか
    は、そのときの状況によって変化し、社員番号で並べ替えられるかもしれないし、給与で並べ替えられるかもしれ
    ません。

    Note: ORDER BY 句には数値も指定できる
    ORDER BY 句では、列名の代わりに “数値” を指定して、次のように記述することもできます。
    SELECT 社員番号, 給与 FROM 社員
    ORDER BY 2 DESC, 1

算術演算子: +、-、*、/

SQL では、算術演算子を利用して、数値データに対して演算を行うことができます。算術演算子
には、加算の「+」や減算の「-」、乗算の「*」、除算の「/」などがあります。

Let's Try
  1. 次のように算術演算子の「*」を利用して、「給与」の値を「3 倍」にした結果を取得してみま
    しょう。
    image
    このように、算術演算子を利用することで、数値データに対して、演算を行えるようになりま
    す。

    Note: NULL 値に対する演算結果は「NULL」
    NULL 値に対しては、何かしらの演算を行っても、結果は NULL 値になります。
    Note: 列に対する別名をつける: AS
    算術演算子を使って取得した列の名前は「(列名なし)」と表示されます。列名は、ORDER BY 句やアプリケーシ
    ョンからデータを取得する際に必要になるので、このままだと操作がしづらくなります。このような場合のために、
    結果列に対して、新しい列名をつける機能として「AS」があります。これは、次のように利用します。
    image
    このように、AS を使用すると、結果列に対して新しい列名を付け、ORDER BY 句やアプリケーションから利用
    できるようになります。
    また、AS は、既存の列に対して別名を付けたり、AS を省略して、次のように使用することもできます。
    image

文字列連結演算子: +

SQL では、「+」(文字列連結演算子)を利用すると、文字データを連結することができます。た
だし、これは SQL Server 独自の演算子で、SQL 規格(他のデータベース)では、「||」(縦線:
Vertical Line を2 個)を使用して、文字データを連結します。

Let's Try
  1. 次のように入力して、社員の「氏名」列へ “さん” をつけて、表示してみましょう。
    image
    このように、「+」を利用すると、文字データを連結できるようになります。
    表示された結果には、氏名と “さん” の間に余分なスペースがありますが、これは、「氏名」
    列のデータ型が Char(50) と定義されているためです。Char データ型では、指定したバイ
    ト数に満たない部分をスペースで埋めます(データ型については、本自習書シリーズの
    「Transact SQL 入門」で詳しく説明しています)。

    Note: 余分なスペースを詰める関数
    Char データ型では、指定したバイト数に満たない部分をスペースで埋めると説明しましたが、その余分なスペー
    スを詰めることができる関数もあります。それが「RTRIM」関数です。この関数を使用すると、次のように余分
    なスペースを詰められるようになります(RTRIM 関数については、本自習書シリーズの「Transact SQL 入門」
    で説明しています)。
    image
重複データの排除: DISTINCT

SQL では、DISTINCT 句を利用して、重複したデータを取り除くことができます。これは、次の
ように利用します。

SELECT DISTINCT 列名 FROM テーブル名

image

0 件のコメント:

コメントを投稿