logo

SQL |一意の制約

SQL の UNIQUE 制約により、列または列のセットの値が明確になり、重複が防止されます。 PRIMARY KEY とは異なり、各 NULL は一意として扱われるため、複数の NULL 値が許可されますが、主キーではすべての値が一意で非 NULL である必要があります。

特徴:

  • 列に一意の値が含まれていることを確認します。
  • 複数の NULL が許可されます。
  • 1 つ以上の列に適用できます。
  • インデックスは自動的に作成されません (ただし、多くのデータベースはパフォーマンスのために作成します)。
  • ALTER TABLE を使用して追加または削除できます。

構文:



CREATE TABLE table_name (  
 column1 datatype UNIQUE
 column2 datatype
 ...
);

上記の構文では次のようになります。

  • CREATE TABLE テーブル名: 新しいテーブルを作成します。
  • 列 1 のデータ型 UNIQUE: データ型を使用して列を定義し、一意の値を強制します。
  • 列 2 のデータ型: 一意制約なしで別の列を定義します。
  • 必要に応じて追加の列に対して繰り返します。

SQL UNIQUE 制約の使用例

例 1: UNIQUE 制約を使用したテーブルの作成

Email 列が一意である必要がある Customers テーブルを作成しましょう。

CREATE TABLE Customers (  
CustomerID INT PRIMARY KEY
Name VARCHAR(100)
Email VARCHAR(100) UNIQUE
Country VARCHAR(50)
);

この場合、各顧客は一意の電子メール アドレスを持っている必要があります。重複したメールを挿入しようとすると SQL エラーが発生します。

INSERT INTO Customers (CustomerID Name Email Country)  
VALUES (1 'John Doe' '[email protected]' 'USA');

INSERT INTO Customers (CustomerID Name Email Country)
VALUES (2 'Jane Smith' '[email protected]' 'Canada');

-- This will fail because '[email protected]' already exists
INSERT INTO Customers (CustomerID Name Email Country)
VALUES (3 'Alice Johnson' '[email protected]' 'UK');

電子メール [email protected] が Customers テーブルにすでに存在しているため、3 回目の挿入は失敗します。

例 2: 複数の列での UNIQUE の使用

また、UNIQUE 制約を複数の列に適用して、それらの列の組み合わせが一意になるようにすることもできます。

SMTPインターネットプロトコル
CREATE TABLE Orders (  
OrderID INT PRIMARY KEY
CustomerID INT
ProductID INT
OrderDate DATE
UNIQUE (CustomerID ProductID)
);

この例では、CustomerID と ProductID の組み合わせは一意である必要があり、これは顧客が同じ製品を複数回注文できないことを意味します。

例 3: サブクエリを使用した一意の値のチェック

SQL を使用すると、サブクエリの一意性をチェックできます。サブクエリで UNIQUE キーワードを使用すると、結果に重複した値が含まれないようにできます。

SELECT CustomerID  
FROM Orders
WHERE UNIQUE (
SELECT OrderID
FROM OrderDetails
WHERE Orders.CustomerID = OrderDetails.CustomerID
);

この例では、Orders テーブル内の各顧客に重複する OrderID 値があるかどうかを確認します。サブクエリが一意の値を返す場合、CustomerID が選択されます。

注意事項

  • 空のサブクエリでは true と評価されます。
  • サブクエリの出力として一意のタプルが存在する場合にのみ true を返します (2 つのタプルのいずれかの属性の値が異なる場合、2 つのタプルは一意です)。
  • サブクエリに少なくとも 1 つの属性が NULL である 2 つの重複行がある場合、true を返します。
おすすめのクイズ クイズの編集 6 つの質問

SQL における UNIQUE 制約は何を保証しますか?

  • 列には重複しない値のみが格納されます

  • B

    列では重複をチェックせずに値を許可します

  • C

    列は行内に複数の同一の値を受け入れます

  • D

    列には常に非 NULL の値のみが格納されます

説明:

UNIQUE を指定すると、列 (または列グループ) 内のすべての値が明確になり、エントリの重複が防止されます。

UNIQUE は PRIMARY KEY とどう違うのですか?

  • UNIQUE では多くの NULL 値が許可されます。主キーはそうではありません

  • B

    UNIQUE は NULL を削除します。主キーには常に NULL が格納されます

  • C

    UNIQUE はインデックス作成を強制します。主キーによりインデックスが妨げられる

  • D

    UNIQUE はソートを強制します。主キーは順序付けを回避します

説明:

UNIQUE では、NULL を完全に禁止する PRIMARY KEY とは異なり、各 NULL は異なるものとみなされるため、複数の NULL 値が許可されます。

UNIQUE 列に重複した値を挿入するとどうなりますか?

  • SQL は重複行を受け入れ、両方の値を保存します

  • B

    SQL は以前の値を最後に挿入された値に置き換えます

  • C

    SQL が重複を拒否し、整合性エラーが生成される

  • D

    SQL は重複した値を NULL に自動的に変換します

    文字列を int にキャストする
説明:

値が UNIQUE 制約に違反すると、SQL は挿入または更新をブロックし、エラーを報告します。

UNIQUE と NULL について正しいのはどれですか?

  • UNIQUE はすべての NULL 値を等しい重複として扱います。

  • B

    UNIQUE は、すべての NULL 値を個別の一意の行として扱います。

  • C

    UNIQUE は、すべての NULL エントリを空の文字列に変換します。

  • D

    UNIQUE では、列にデータが存在しない場合にのみ NULL を許可します。

説明:

各 NULL は UNIQUE では比較できない個別の値として評価されるため、複数の NULL が許可されます。

多くのデータベースが UNIQUE のインデックスを作成するのはなぜですか?

ハフマンコーディングコード
  • 挿入する前に値をアルファベット順に整理するには

  • B

    テーブルに保存する前に数値データをフォーマットするには

  • C

    NULL を一意の連続値に変換するには

  • D

    検証中の重複チェックを改善するには

説明:

インデックスにより、エンジンは重複値を迅速に検出し、UNIQUE 制約の適用をより効率的にすることができます。

UNIQUE キーワードはサブクエリで何をチェックしますか?

  • サブクエリが正確に 1 つの数値列を返すようにします

  • B

    サブクエリ出力に個別の行のみが含まれていることを確認します

  • C

    サブクエリが結合を使用せずに値を比較することを保証します。

  • D

    サブクエリが NULL を含む行を確実に無視するようにします。

説明:

UNIQUE は、サブクエリが重複したタプルを生成しないことを検証します。返された各行は、少なくとも 1 つの属性が異なっている必要があります。

SQL |一意の制約クイズは正常に完了しました スコア :  2/6正確さ : 0%ログインして説明を見る 1/6 1/6 < Previous 次へ >