有人可以告诉我哪种方式更好,它们都会产生相同的结果但是更“正确”?
就个人而言,我觉得第一个查询更容易阅读,但我似乎在其他地方读到应该总是使用别名。
由于
SELECT Patient.PatientSurname, Doctor.DoctorSurname
FROM Patient
JOIN Operation
ON Operation.PatientCode=Patient.PatientCode
JOIN Doctor
ON Doctor.DoctorCode=Operation.DoctorCode
WHERE Operation.OperationType='Broken Arm'
GROUP BY Patient.PatientSurname
HAVING count(Patient.PatientSurname) > 0
SELECT PatientSurname, DoctorSurname
FROM Patient as p, Operation as o, Doctor as d
WHERE o.PatientCode=p.PatientCode
AND d.DoctorCode=o.DoctorCode
AND o.OperationType='Broken Arm'
GROUP BY p.PatientSurname
HAVING count(p.PatientSurname) > 0
答案 0 :(得分:11)
两个查询之间的区别是JOIN
语法:
JOIN
语法。JOIN
语法。哪个更好?
MySQL和SQL Server以及其他RDBMS也支持这两种语法,你不应该期望两者之间有任何性能差异。他们是一样的。
但是,建议使用第一个。它的数量更安全。例如,如果要使用第二种语法INNER JOIN
进行SELECT *
FROM Table1 t1, Table2 t2
WHERE t1.id = t2.id2;
:
WHERE t1.id = t2.id
如果您忘记SELECT *
FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id2;
,查询将不会失败。但它会产生交叉连接,很难找出错误。但是使用第一种语法:
ON
如果您忘记了CROSS JOIN
条件,则会出现语法错误。即使你打算做一个SELECT *
FROM Table1 t1 CROSS JOIN Table2 t2
,其他人也会更容易理解:
{{1}}
比其他语法。
@Gareth提到的另一个好处(见下面的评论):
另一个重要的好处是易于在INNER和。之间切换 OUTER连接而不必在WHERE子句中处理NULL。
有关详细信息,请参阅以下内容: