Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 区分我的SQL查询_Php_Mysql - Fatal编程技术网

Php 区分我的SQL查询

Php 区分我的SQL查询,php,mysql,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

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

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
)
您无法与此匹配:

student.student_id = department.department_id
这没有道理——你说学生证和系号是可以互换的,但它们不是。在这种特殊情况下,您可能有“学生1”和“部门1”,因此在您正在测试的情况下,它是有效的。但一般来说不会

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

student.student_id = student.student_id
这里你是说,你想要的行中,某物等于它本身。因为所有的事物都是平等的,这将不适用任何限制,因此是多余的。如果这是
JOIN
的唯一子句,那么最终将连接到新表的所有行(笛卡尔积),这肯定不是您想要的

只有查询(2)看起来是正确的。

2)(除非你有一个奇怪的模式)是正确的,因为它会给出一个学生及其课程和学期的列表

3) 将给出所有课程和所有学期的学生列表,因为
student.student\u id=student.student\u id
始终为真


1和4)将根据学生与课程和学期之间的id(即学生id恰好与学期或部门id相同)进行随机匹配。MySQL中的NULL=NULL似乎返回NULL,而不是True:dev.MySQL.com/doc/refman/5.0/en/comparison-operators。html@BLaZuRE,对于一般的比较案例来说,这是一个很好的观点,但我可以想象这些主键/外键都会被定义为
非空
?因为这个问题非常基本,我不会指望这些表像预期的那样具有主键/外键,也不会指望它们被定义为
非空
。我还想强调,并不是所有的事物都是平等的。类似地,如果您尝试where子句
选择。。。其中colX=值联合选择。。。当colX值为空时,您可能无法获得所有行,因为您还需要
,其中colX为空
。我很难找到答案,但初学者应该意识到这一点。