SQL Server テーブルとテーブルを結合

2つ以上のテーブルを特定のルールで結合して1つのテーブルのようにします。

結合の種類には「INNER JOIN」、「LEFT JOIN」、「RIGHT JOIN」等ありますが、使い分けるとデバックがややこしくなるので、ルールを設けて使用することをお勧めします。

私は「LEFT JOIN」だけを使用しています。

よって、ここでは「LEFT JOIN」を使用した例を説明します。

LEFT JOINとはSQL文で左方に記述したテーブルをメインテーブルとして扱う結合方法です。

左方結合とも言い、双方のテーブルの結合が成立しなくても、メインテーブルの内容は取得する方法です。

すなわち、サブテーブルに結合対象が存在しない場合は、メインテーブルは取得できて、サブテーブルの内容は「NULL」として取得できます。

1対1の結合

SELECT
        テーブル1.列1,
        テーブル1.列2
    FROM
        テーブル1
            LEFT    JOIN    テーブル2    ON
                テーブル2.列1    =   テーブル1.列1   

メインテーブルを「テーブル1」として「テーブル2」を結合します。

「テーブル1」の「列1」と「テーブル2」の「列1」が一致する行(レコード)を結合します。

抽出条件付き1対1の結合

SELECT
        テーブル1.列1,
        テーブル1.列2
    FROM
        テーブル1
            LEFT    JOIN    テーブル2    ON
                テーブル2.列1    =   テーブル1.列1   
    WHERE
        テーブル1.列1    =   100


メインテーブルを「テーブル1」として「テーブル2」を結合しますが、メインテーブルは「列1」が「100」の行(レコード)を抽出してから結合します。

「テーブル1」の「列1」と「テーブル2」の「列1」が一致する行(レコード)を結合します。

1対2以上の接続

「FROM句」に「JOIN句」は1つしか使用できないので、「(」(カッコ)でネストすることで「JOIN句」を複数使用することが可能になります。

SELECT
        テーブル1.列1,
        テーブル1.列2
    FROM
        (
        テーブル1
            LEFT    JOIN    テーブル2    ON
                テーブル2.列1    =   テーブル1.列1   
        )
            LEFT    JOIN    テーブル3    ON
                テーブル3.列1    =   テーブル1.列1   
    WHERE
        テーブル1.列1    =   100

 

SELECT
        テーブル1.列1,
        テーブル1.列2
    FROM
        (
        (
        テーブル1
            LEFT    JOIN    テーブル2    ON
                テーブル2.列1    =   テーブル1.列1   
        )
            LEFT    JOIN    テーブル3    ON
                テーブル3.列1    =   テーブル1.列1   
        )
            LEFT    JOIN    テーブル4    ON
                テーブル4.列2    =   テーブル1.列2   
    WHERE
        テーブル1.列1    =   100

SQL学習におすすめの教材

Sql Server2016の教科書SQL文を分かりやすく解説している教材で、SQL文初心者におすすめの教材です。

>> この教材を楽天市場で見る <<

SQL Server 最大値取得

テーブルの検索対象内の行(レコード)で特定列の最大値を検索します。

最大値の検索は「MAX」関数を使用します。

全レコードの最大値を検索

SELECT
        MAX(列1)    AS  列1最大値
    FROM
        テーブル1

テーブル1の全行(レコード)を対象にして、列1の最大値を検索します。

「MAX(列1)」は名称を持たないので「列1最大値」として命名します。

特定レコード内の最大値検索

SELECT
        MAX(列1)    AS  列1最大値
    FROM
        テーブル1
    WHERE
        列1 >=  100

テーブル1の列1が100以上の行(レコード)を対象に列1の最大値を検索します。

SQL学習におすすめの教材

Sql Server2016の教科書SQL文を分かりやすく解説している教材で、SQL文初心者におすすめの教材です。

>> この教材を楽天市場で見る <<

SQL Server ワイルドカードであいまい検索

あいまい検索って?

よく知られている検索エンジン、GoogleやYahooの検索と同様に検索ワードと完全一致ではなく、どこかに検索ワードを含む検索の仕方です。

SQL Serverではワールドカードと言われている「%」とLIKE句を使用することで可能になります。

検索ワード前方一致

SELECT
        *
    FROM
        テーブル1
    WHERE
        列1     LIKE    'ミッキー%'

列1の値の先頭に「ミッキー」と一致する行(レコード)を検索します。

検索ワード後方一致

SELECT
        *
    FROM
        テーブル1
    WHERE
        列1     LIKE    '%ミッキー'

列1の値の最後尾に「ミッキー」と一致する行(レコード)を検索します。

検索ワードがどこかに一致

SELECT
        *
    FROM
        テーブル1
    WHERE
        列1     LIKE    '%ミッキー%'

列1の値のどこかに「ミッキー」と一致する行(レコード)を検索します。

 

例としてSELECT句で紹介しましたが、他のSQL文でもLIKE句とワイルドカード「%」は使用できます。

SQL学習におすすめの教材

Sql Server2016の教科書SQL文を分かりやすく解説している教材で、SQL文初心者におすすめの教材です。

>> この教材を楽天市場で見る <<

SQL Server レコードの表示・追加・修正・削除

テーブルの内容を表示、追加・修正・削除を行うSQL文です。

又、特定行(レコード)に絞り込んで操作を行う方法も紹介します。

行(レコード)の表示

テーブルのすべての行(レコード)、全ての列(カラム)を表示する。

USE データベース名

SELECT
        *
    FROM
        テーブル名1

「データベース名」に所属する「テーブル名1」の内容を全て表示します。

テーブルの任意の列と行を抽出して表示する。

USE データベース名

SELECT
        列1,
        列2
    FROM
        テーブル1
    WHERE
        列1 =   100

テーブル1の列1と列2を内容を表示しますが、列1が100の行のみを表示します。

テーブルの行(レコード)を追加する

値を使用して追加する。

INSERT  INTO    テーブル1
(
    列1,
    列2
)
VALUES
(
    101,
    'ミッキー'
)

テーブル1に列1が「101」、列2が「ミッキー」の行が追加されます。

他テーブルの内容を追加する。

INSERT  INTO    テーブル1
    SELECT
            *
        FROM
            テーブル2

テーブル2の内容を丸ごとテーブル1に追加します。

この場合、テーブル1とテーブル2の列定義が同じことが条件になります。

INSERT   INTO    テーブル1
(
    テーブル1.列1,
    テーブル2.列2
)
(
    SELECT
            テーブル2.列1,
            テーブル2.列2
        FROM
            テーブル2
        WHERE
            テーブル2.列1    >   100
)    

テーブル1を列1が100より大きい行に絞って列1と列2をテーブル1に追加します。

お気づきでしょうけど、列1と列2は双方のテーブルに同じ名称が存在するので、「テーブル1.列1」と修飾しています。

テーブルの列の値を変更する

全て行(レコード)を対象にする。

UPDATE  テーブル1
    SET 列1 =   100,
        列2 =   'あいうえお'

テーブル1の全ての行を対象に列1の値を「100」、列2の値を「あいうえお」に変更します。

特定の行(レコード)を対象にする。

UPDATE  テーブル1
    SET 列2 =   'あいうえお'
    WHERE
        列1 =   100

テーブル1の列1が「100」を持つ行(レコード)を対象に列2の値を「あいうえお」に変更します。

デーブルの行(レコード)を削除する

全ての行(レコード)を削除対象にする。

DELETE
    FROM
        テーブル1

テーブル1の全ての行(レコード)を削除します。

テーブルの特定の行を対象に削除する

DELETE
    FROM
        テーブル1
    WHERE
        列1 =   100

テーブル1の列1の値が「100」の行(レコード)を削除します。

SQLを学ぶ教材

Sql Server2016の教科書SQL文を分かりやすく解説している教材で、SQL文初心者におすすめの教材です。

>> この教材を楽天市場で見る <<

SQL Serverのテーブル構造変更

データベース開発中、もしくは仕様の変更で列(カラム)の仕様を変更が必要になることがあります。

仕様の変更をする場合は必ずテーブルをバックアップしてからにしましょう。

痛い目に合うかもしてませんよ。

 

ごくわずかなテーブル構成変更であれば、SQL Server Manegement Studioでするほうが簡単ですが、できればSQL文での変更をお勧めします。

何故かと言うと、変更の仕様をテキストで保存できるので変更履歴を管理できるからです。

テーブルに列(カラム)を追加

USE データベース名

ALTER   TABLE   テーブル名  ADD
    追加する列名1   型(桁数),
    追加する列名2   型(桁数)

USEでカレントデータベースを変更して、ALTER TABLE ADDで列(カラム)を追加します。

このSQLを実行すると、テーブル(テーブル名)に列(追加する列名1と追加する列名2)が追加されます。

列(カラム)のデータ型と桁数を変更

USE データベース名

ALTER   TABLE   テーブル名  ALTER
    COLUMN 変更する列名 型(桁数)

USEでカレントデータベースを変更して、ALTER TABLE ALTERで列(カラム)のデータ型や桁数を変更します。

このSQLを実行すると、テーブル(テーブル名)の列(変更する列名)が「型」と「桁数」に変更されます。

テーブルの列名を変更する

USE データベース名

EXEC sp_rename
    'テーブル名.列名','変更後の列名','COLUMN'

USEでカレントデータベースを変更して、EXEC sp_renameで列(カラム)の名前を変更します。

このSQLを実行すると、テーブルの列(テーブル名.列名’)の名前が(変更後の列名)に改名されます。

テーブルの列(カラム)を削除する

USE データベース名

ALTER   TABLE   テーブル名  DROP    COLUMN
    削除する列名1,
    削除する列名2

USEでカレントデータベースを変更して、ALTER TABLE DROPで列(カラム)を削除します。

このSQLを実行すると、テーブル(テーブル名)の列(削除する列名1と削除する列名2)が削除されます。

SQL初心者におすすめの教材

Sql Server2016の教科書SQL文を分かりやすく解説している教材で、SQL文初心者におすすめの教材です。

>> この教材を楽天市場で見る <<

SQL Serverのテーブル作成

SQL Serverのテーブルとは、簡単に言うとデータベースの主軸的存在で様々な情報の格納庫のようなものです。

SQL Serverを使用した開発では、先だって作成しておく必要があるのがテーブルです。

テーブル構造を設計

テーブルを作成する前に構造を設計します。

テーブル構造を簡単に説明すると、列と行、主キーで構成されます。

列は列名やデータ型、長さ等を規定してデータを多様化するもので、列の集合体が行になります。

行数がデータ数になります。

例えば住所録を例にしてみましょう。

氏名  |住所
————————
日本太郎|東京都○○
日本二郎|東京都○○○
東京花子|東京都○○○○
東京京子|東京都○○○○○

氏名と住所が列で縦方向が行です。

列はカラム、行はレコードとも呼びます。

テーブル内の全レコードの中で1レコードを一意にするために、プライマリーキーを設定します。

IDとは〇〇番号等を設定することが多くなっています。
又、プライマリーキーは検索速度にも大きく影響します。

SQL Server Management Studioでテーブル作成

Microsoftのツール、Manement Studioを使うとSQL文等のコードを知らなくてもデーブルを作ることができます。

多少のデータベースの知識だけで、データベースの操作ができるので、SQL Serverを使用する場合は必ず用意したほうがいいでしょう。

勿論、無料で使用できます。

Sql Server2016の教科書SQL ServerとManement Studioについてのお勧めの教材です。

>> この教材を楽天市場で見る <<

SQL文でSQL Serverのテーブルを作成する

SQL文でテーブルを作るには「CREATE TABLE」を使います。

USE カレントデータベース

CREATE  TABLE   テーブル名
    (
        列名1   データ型(長さ)  NOT NULL    DEFAULT 0,
        列名2   データ型(長さ)  NOT NULL    DEFAULT '',
        PRIMARY KEY(列名1)
    )

USEでカレントデータベースを設定します。
CREATEでテーブルを作成します。

このSQL文を実行すると、列名1と列名2の二つの列を持ち、プライマリーキーが列名2に設定されたテーブルが作成されます。

Sql Server2016の教科書SQL文を分かりやすく解説している教材で、SQL文初心者におすすめの教材です。

>> この教材を楽天市場で見る <<