を。
プライマリキーは、1つまたは複数の列に を超える値の一意性の一貫性を強制します。 ID列に主キーがある場合、同じID値を持つ2つの行を持つことは不可能です( )。 プライマリキーがないと、多くの行が同じID値を持つ可能性があり、ID値だけに基づいてそれらを区別することはできません。
外部キーは、他の場所を指すデータの整合性を強制します。 実際に指し示されているデータが確実に存在することを保証します。 典型的な親子関係では、外部キーは、すべて の子が常に親を指し、親が実際に存在することを保証します。 外部キーがないと、存在しない親に を指す "孤立した"子がいる可能性があります。
レコードが1つしかなく、1つの列しか取得できなかったため、データの不一致はありません。
これらの表と列、およびレコードがあるとします。
CREATE TABLE patient (
patient_id INT,
name VARCHAR(20),
consultant_id INT
);
INSERT INTO patient VALUES(100,'Patient 1', 1);
INSERT INTO patient VALUES(200,'Patient 2', 1);
INSERT INTO patient VALUES(300,'Patient 3', 1);
INSERT INTO patient VALUES(400,'Patient 4', 2);
INSERT INTO patient VALUES(500,'Patient 5', 2);
INSERT INTO patient VALUES(600,'Patient 6', 3);
CREATE TABLE consultant(
id INT,
name VARCHAR(20)
);
INSERT INTO consultant VALUES(1,'Consultant 1');
INSERT INTO consultant VALUES(2,'Consultant 2');
INSERT INTO consultant VALUES(3,'Consultant 3');
たちはコンサルタントのためにも名前を持っていることを参照してください、私たちは、キーでなし、クエリで、
SELECT p0_.name AS patientname_0,
c1_.name AS consultantname_0
FROM patient p0_
INNER JOIN consultant c1_
ON c1_.id = p0_.consultant_id
WHERE (c1_.id = 1);
結果
patientname_0 consultantname_0
Patient 1 Consultant 1
Patient 2 Consultant 1
Patient 3 Consultant 1
しかし患者に出席したコンサルタント見てみたかったですON句
SELECT p0_.name AS patientname_0,
c1_.name AS consultantname_0
FROM patient p0_
INNER JOIN consultant c1_
ON (c1_.id = 1);
は、コンサルタント1
patientname_0 consultantname_0
Patient 1 Consultant 1
Patient 2 Consultant 1
Patient 3 Consultant 1
Patient 4 Consultant 1
Patient 5 Consultant 1
Patient 6 Consultant 1
ではありませんそれは 'consultant'テーブルが1つのレコードだけ、ない状態で、ID = 1のものを含んでいると思われる患者の残りのconsultantnameのための一貫性のないデータの結果何も除外しないでください。 – newtover
はい、私はまだレコードが1つしかありません。別のレコードを追加してチェックします。 2番目のクエリはORMによって生成されました。 (教義2)。 –
2番目のクエリはごみです(明らかでない場合に備えて) –