区分我的SQL查询

时间:2014-01-22 14:58:07

标签: php mysql

以下查询之间有什么区别?他们给了我相同的结果。

1

SELECT student. * ,
department.department_name,
semester.semester_name
FROM (
student
LEFT JOIN department ON student.student_id = department.department_id
LEFT JOIN semester ON student.student_id = semester.semester_id
)

2

SELECT student. * ,
department.department_name,
semester.semester_name
FROM (
student
LEFT JOIN department ON student.department_id = department.department_id
LEFT JOIN semester ON student.semester_id = semester.semester_id
)

第3

SELECT student. * ,
department.department_name,
semester.semester_name
FROM (
student
LEFT JOIN department ON student.student_id = student.student_id
LEFT JOIN semester ON student.student_id = student.student_id
)

4

SELECT student. * , department.department_name, semester.semester_name
FROM (
student
LEFT JOIN department ON student.department_id = student.student_id
LEFT JOIN semester ON student.semester_id = student.student_id
)

2 个答案:

答案 0 :(得分:3)

你无法匹敌:

student.student_id = department.department_id

这没有意义 - 你说学生证和部门号是可以互换的,但事实并非如此。在这种特殊情况下,你可能有“学生1”和“部门1”,所以在你测试的情况下,它可以工作。但它一般不会。

同样,这样做没有任何价值:

student.student_id = student.student_id

在这里,你要说的是你想要的东西与自己相等。由于所有事情都与自己相同,因此不会施加任何限制,因此是多余的。如果这是JOIN的唯一条款,您将最终加入新表的所有行(笛卡尔积),这绝对不是您想要的。

只有查询(2)似乎是正确的。

答案 1 :(得分:0)

2)(除非你有一个奇怪的架构)是正确的,因为它会给出学生及其课程和学期的清单。

3)将提供针对所有课程和所有学期的学生列表,因为student.student_id = student.student_id将始终为真。

1和4)将在学生和课程与学期之间进行随机匹配,具体取决于他们之间发生了哪些ID(即学生ID恰好与学期或部门ID相同)。