use*_*053 1 mysql sql t-sql join
有人可以告诉我哪种方式更好,它们都能产生相同的结果,但哪种更"正确"?
我个人认为第一个查询更容易阅读,但我似乎在其他地方读到应该总是使用别名.
谢谢
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
Run Code Online (Sandbox Code Playgroud)
Mah*_*mal 11
两个查询之间的区别是JOIN语法:
JOIN语法.JOIN语法.哪个更好?
MySQL和SQL Server以及其他RDBMS也支持这两种语法,您不应期望两者之间存在任何性能差异.他们是一样的.
但是,建议使用第一个.它的数量更安全.例如,如果要执行INNER JOIN,请使用第二种语法:
SELECT *
FROM Table1 t1, Table2 t2
WHERE t1.id = t2.id2;
Run Code Online (Sandbox Code Playgroud)
如果您忘记了WHERE t1.id = t2.id,查询将不会失败.但它会产生交叉连接,很难找出错误.但是使用第一种语法:
SELECT *
FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id2;
Run Code Online (Sandbox Code Playgroud)
如果您忘记了这个ON条件,您将收到语法错误.即使你打算这样做CROSS JOIN,其他人也会更容易理解:
SELECT *
FROM Table1 t1 CROSS JOIN Table2 t2
Run Code Online (Sandbox Code Playgroud)
比其他语法.
@Gareth提到的另一个好处(见下面的评论):
另一个重要的好处是可以在INNER和OUTER连接之间轻松切换,而无需在WHERE子句中处理NULL.
有关更多信息,请参阅以下内容:
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |