sql >> データベース >  >> RDS >> Sqlserver

SQL Serverでデータベースを作成する(T-SQL)

    多くの開発者やデータベース管理者は、SQL Server Management Studio(SSMS)、AzureDataStudioなどのGUIツールを使用してデータベースを作成します。

    ただし、SQLを使用してデータベースを作成する方がはるかに高速な場合があります。これは、同じデータベースを再作成する必要があるさまざまな環境がある場合に特に当てはまります。各環境に対して同じスクリプトを実行でき、データベースは毎秒数秒以内に作成されます。

    SQL Serverでは、これをT-SQLで行います。 T-SQLはTransact-SQLの略で、SQLServerのSQLの拡張機能です。

    以下は、T-SQLを使用してSQLServerでデータベースを作成する例です。

    基本コード

    CREATE DATABASE Music;

    これが、データベースを作成するために必要なすべてのコードです。この場合、 Musicというデータベースが作成されます。 。

    ただし、作成されるのはそれだけです。データベースにはテーブルやその他のオブジェクトは含まれていません。そのためには、さらにステートメントを使用して、必要に応じてそれらのオブジェクトを作成する必要があります。

    また、上記のCREATE DATABASE ステートメントは、引数を含まない最も基本的な構文を使用します。このステートメントに含めることができる多くのオプションがあります。

    たとえば、ファイルとそのファイルグループに独自の名前を指定できます。また、データベーススナップショットを作成したり、データベースファイルを添付して、別のデータベースの切り離されたファイルからデータベースを作成したりすることもできます。

    このステートメントの完全な構文については、Microsoftのドキュメントを参照してください。

    テーブルの作成

    上記のデータベース用に3つのテーブルを作成する例を次に示します。

    USE Music;
    CREATE TABLE Artists (
      ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
      ArtistName nvarchar(255) NOT NULL,
      ActiveFrom date
    );
    CREATE TABLE Genres (
      GenreId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
      Genre nvarchar(50) NOT NULL
    );
    CREATE TABLE Albums (
      AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
      AlbumName nvarchar(255) NOT NULL,
      ReleaseDate date NOT NULL,
      ArtistId int NOT NULL,
      GenreId int NOT NULL
      CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
        REFERENCES dbo.Artists (ArtistId)     
        ON DELETE NO ACTION    
        ON UPDATE NO ACTION    
    );

    最初のステップは、正しいデータベース(この場合は音楽データベース)に切り替えることです。これを行うには、USE MUSICを使用します 。

    正しいデータベースを使用すると、テーブルやその他のオブジェクトを作成できます。この場合、3つのテーブルを作成しました。 CREATE TABLEを使用するたびに 、その後に作成するテーブル名が続きます。この後に、そのテーブルの定義が続きます。

    定義には、テーブルの列とその定義が含まれます。たとえば、ArtistId は列であり、 intを使用します データ型であり、テーブルの主キーとして設定しました。主キーであるということは、データベース内の各行を一意に識別することを意味します。

    また、この列をIDENTITYに設定しました 列。これは、各行が、行ごとに増分する自動生成された値を使用することを意味します。この場合、1から始まり、1ずつ増加します(これは、IDENTITY(1,1)を指定したためです。 。

    最後に、この列もNOT NULLに設定しました 。これは、値が含まれている必要があることを意味します。 nullにすることはできません。これは、列を主キーとして設定する前の実際の要件ですが、他の列をNOT NULLに設定することもできます。 必要に応じて(この例で実行しました)。

    関係を作成する

    上記の例では、Albums間の関係を作成しました およびArtists テーブル。

    リレーションシップは、関連データを持つテーブル間の一種のリンクです。リレーションシップは、列に別のテーブルの特定の列の値と一致する値のみを含めることができるように指定できるため、データの整合性を強化するのに役立ちます。

    関係を作成する上記の例のコードの特定のセクションは次のとおりです。

    CREATE TABLE Albums (
      AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
      AlbumName nvarchar(255) NOT NULL,
      ReleaseDate date NOT NULL,
      ArtistId int NOT NULL,
      GenreId int NOT NULL
      CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
        REFERENCES dbo.Artists (ArtistId)     
        ON DELETE NO ACTION    
        ON UPDATE NO ACTION    
    );

    Albumsを作成すると同時にリレーションシップを作成しました テーブル。すでにArtistsを作成していたので、それができました。 テーブル(関係の他のテーブルです)。

    外部キー制約を作成して関係を作成しました(CONSTRAINTを使用) 引数)、およびFOREIGN KEYを指定します 関係の詳細と一緒に。 REFERENCES キーワードは、外部キーが参照するテーブルと列を指定します。

    リレーションシップにFK_Albums_Artistsという名前を付けました 。

    ON DELETE およびON UPDATE パーツはオプションです。これらは、誰かが親/主キー列から行を削除または更新した場合の対処方法を指定します。デフォルト値はNO ACTIONです。 、これは、データベースエンジンがエラーを発生させ、親テーブルの行に対する更新アクションがロールバックされることを意味します。

    SQLでリレーションシップを作成する方法に関する私の記事には、ここで提供できる他のオプションと、各オプションの機能がリストされています。

    後で関係を作成する

    既存のテーブルにリレーションシップを作成することもできます。

    T-SQLを使用してこれを行うには、ALTER TABLEを使用します ステートメント。

    したがって、前のコードを実行した後、次のコードを実行できます。

    ALTER TABLE Albums
    ADD CONSTRAINT FK_Albums_Genres FOREIGN KEY (GenreId)     
    	REFERENCES dbo.Genres (GenreId)     
    	ON DELETE NO ACTION    
    	ON UPDATE NO ACTION
    ;

    これにより、今度はAlbums間に別の関係が作成されます。 およびGenres テーブル。

    このコードは、前の関係とほとんど同じことをしていることがわかります。唯一の違いは、関係がArtistsの間であるということです およびGenres Albumsの代わりに およびArtists

    この場合、リレーションシップにFK_Albums_Genresという名前を付けました。 。

    データを挿入

    上記のコードは、データに適したデータベースを作成しました。これでデータを追加できます。

    SQL Serverでは、INSERTを使用してデータベースにデータを追加できます。 声明。このステートメントを使用するときは、テーブルの名前と、データを挿入する列を指定する必要があります。

    実際、すべての列にデータを挿入する場合、列の提供はオプションですが、わかりやすくするために、列名を含む例を次に示します。

    INSERT INTO Artists (ArtistName, ActiveFrom)
    VALUES 
      ('Iron Maiden','1975-12-25'),
      ('AC/DC','1973-01-11'), 
      ('Allan Holdsworth','1969-01-01'),
      ('Buddy Rich','1919-01-01'),
      ('Devin Townsend','1993-01-01'),
      ('Jim Reeves','1948-01-01'),
      ('Tom Jones','1963-01-01'),
      ('Maroon 5','1994-01-01'),
      ('The Script','2001-01-01'),
      ('Lit','1988-06-26'),
      ('Black Sabbath','1968-01-01'),
      ('Michael Learns to Rock','1988-03-15'),
      ('Carabao','1981-01-01'),
      ('Karnivool','1997-01-01'),
      ('Birds of Tokyo','2004-01-01'),
      ('Bodyjar','1990-01-01');
    INSERT INTO Genres (Genre)
    VALUES 
      ('Rock'),
      ('Jazz'), 
      ('Country'),
      ('Pop'),
      ('Blues'),
      ('Hip Hop'),
      ('Rap'),
      ('Punk');
    INSERT INTO Albums (AlbumName, ReleaseDate, ArtistId, GenreId)
    VALUES 
      ('Powerslave', '1984-09-03', 1, 1),
      ('Powerage', '1978-05-05', 2, 1), 
      ('Singing Down the Lane', '1956-01-01', 6, 3),
      ('Ziltoid the Omniscient', '2007-05-21', 5, 1),
      ('Casualties of Cool', '2014-05-14', 5, 1),
      ('Epicloud', '2012-09-18', 5, 1),
      ('Somewhere in Time', '1986-09-29', 1, 1),	
      ('Piece of Mind', '1983-05-16', 1, 1),	
      ('Killers', '1981-02-02', 1, 1),	
      ('No Prayer for the Dying', '1990-10-01', 1, 1),	
      ('No Sound Without Silence', '2014-09-12', 9, 4),	
      ('Big Swing Face', '1967-06-01', 4, 2),	
      ('Blue Night', '2000-11-01', 12, 4),	
      ('Eternity', '2008-10-27', 12, 4),	
      ('Scandinavia', '2012-06-11', 12, 4),	
      ('Long Lost Suitcase', '2015-10-09', 7, 4),	
      ('Praise and Blame', '2010-06-26', 7, 4),	
      ('Along Came Jones', '1965-05-21', 7, 4),	
      ('All Night Wrong', '2002-05-05', 3, 2),	
      ('The Sixteen Men of Tain', '2000-03-20', 3, 2);

    ご覧のとおり、各行には独自の行があります。行ごとに1行追加するだけで、各列はコンマで区切られ、括弧で囲まれます。各行はコンマで区切ります(括弧の後)。

    新しく作成したデータベースに対して上記のコードを実行すると、次の出力が得られます。

    (16 rows affected)
    
    (8 rows affected)
    
    (20 rows affected)

    これは、データが正常に挿入されたことを示しています。

    データベースを確認する

    データベースに対してクイックテストを実行して、データベースが作成され、データが挿入されたことを確認できます。

    たとえば、次の簡単なクエリを実行できます。

    SELECT * FROM Artists;

    結果:

    +------------+------------------------+--------------+
     | ArtistId   | ArtistName             | ActiveFrom   |
     |------------+------------------------+--------------|
     | 1          | Iron Maiden            | 1975-12-25   |
     | 2          | AC/DC                  | 1973-01-11   |
     | 3          | Allan Holdsworth       | 1969-01-01   |
     | 4          | Buddy Rich             | 1919-01-01   |
     | 5          | Devin Townsend         | 1993-01-01   |
     | 6          | Jim Reeves             | 1948-01-01   |
     | 7          | Tom Jones              | 1963-01-01   |
     | 8          | Maroon 5               | 1994-01-01   |
     | 9          | The Script             | 2001-01-01   |
     | 10         | Lit                    | 1988-06-26   |
     | 11         | Black Sabbath          | 1968-01-01   |
     | 12         | Michael Learns to Rock | 1988-03-15   |
     | 13         | Carabao                | 1981-01-01   |
     | 14         | Karnivool              | 1997-01-01   |
     | 15         | Birds of Tokyo         | 2004-01-01   |
     | 16         | Bodyjar                | 1990-01-01   |
     +------------+------------------------+--------------+ 

    そして、3つのテーブルすべてのデータを使用する別のクエリを実行してみましょう。

    SELECT 
      ArtistName,
      AlbumName,
      ReleaseDate
    FROM Artists ar
    INNER JOIN Albums al
    ON ar.ArtistId = al.ArtistId
    INNER JOIN Genres g 
    ON al.GenreId = g.GenreId
    WHERE g.Genre = 'Rock';

    結果:

    +----------------+-------------------------+---------------+
     | ArtistName     | AlbumName               | ReleaseDate   |
     |----------------+-------------------------+---------------|
     | Iron Maiden    | Powerslave              | 1984-09-03    |
     | AC/DC          | Powerage                | 1978-05-05    |
     | Devin Townsend | Ziltoid the Omniscient  | 2007-05-21    |
     | Devin Townsend | Casualties of Cool      | 2014-05-14    |
     | Devin Townsend | Epicloud                | 2012-09-18    |
     | Iron Maiden    | Somewhere in Time       | 1986-09-29    |
     | Iron Maiden    | Piece of Mind           | 1983-05-16    |
     | Iron Maiden    | Killers                 | 1981-02-02    |
     | Iron Maiden    | No Prayer for the Dying | 1990-10-01    |
     +----------------+-------------------------+---------------+ 

    このクエリは、関連データを持つテーブル間の関係を作成することの重要性を示しています。このようなクエリを実行するときは、データがテーブル間で一貫している必要があります。

    これで、データベースを使用する準備が整いました。それに対してクエリを実行できます。さらにデータを挿入できます。さらにテーブル、リレーションシップ、ビュー、ストアドプロシージャ、ユーザー定義関数などを追加できます。


    1. 多言語データベース設計のベストプラクティス

    2. SaaSサブスクリプションデータモデル

    3. SQL Serverトリガー–パート2DDLおよびLOGONトリガー

    4. Android:子テーブルを親テーブルと結合する方法Sqlite