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 を返します。
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 つの属性が異なっている必要があります。
クイズは正常に完了しました スコア : 2/6正確さ : 0%ログインして説明を見る 1/6 1/6 < Previous 次へ >