可能重复:
SQL Join Differences
$PERSON = $DATABASE_LINK->query("SELECT * FROM `users`,`profiles` WHERE users.first_name = 'shane' && users.last_name = 'larson' && users.setup = '1' && profiles.zipcode = '53511' ORDER BY `full_name` ASC");
$PERSON = $PERSON->fetch_object();
var_dump($PERSON);
我想要一个基于名称扫描用户记录的查询,并检查配置文件表中的邮政编码。以上就是一个例子。它有效,但idk如何加入工作完全。关于联接如何匹配2行的任何解释都很棒:)
答案 0 :(得分:0)
您收到的结果集是用户表中与用户条件匹配的所有行的交叉积,以及配置文件表中与配置文件条件匹配的所有行。
这似乎不是你想要的。
考虑添加类似users.blammy = profiles.blammy的内容来加入这两个表。
答案 1 :(得分:0)
SELECT Cities.Name, Countries.Name, Countries.id
FROM Cities INNER JOIN Countries
ON Cities.CountryId = Countries.id
WHERE Cities.Name LIKE = 'town' LIMIT 10
看一下这个例子:
第一行从两个不同的表(城市和国家)中选择三列。
第二行指定要连接的两个表。
第三行指定与两个表匹配的项目。
该查询的结果是一个列表 与LIKE匹配的Cities.Name 条款及其相应的 Countries.Name(由它找到的 匹配Cities.CountryId with Countries.id)。
在此处阅读更多内容:http://www.wellho.net/mouth/158_MySQL-LEFT-JOIN-and-RIGHT-JOIN-INNER-JOIN-and-OUTER-JOIN.html
答案 2 :(得分:0)
因此,使用带有“WHERE table1.id_x = table2.id_y”的SQL语句可以正常工作,但据我所知,它们比Joins慢(主要是使用大型数据集)。
所以有内外连接,外连接分为左连接和右连接。
左边的一个小解释 - 加入:
SELECT Class.Id, Class.Name, Professor.Id, Professor.Name
FROM FROM Professor INNER JOIN Class
ON Professor.Id = Class.ProfessorId;
本声明选择所有教授,并不关心教授是否不教授课程。但如果没有教授的课程,则不选择此课程。它被称为左连接,因为左表中的'NULL'引用被忽略。右连接的解释应该是微不足道的;)
SELECT Class.Id, Class.Name, Professor.Id, Professor.Name
FROM FROM Professor LEFT OUTER JOIN Class
ON Professor.Id = Class.ProfessorId;
内部联接不会显示没有类的教授,也不会显示没有教授的课程。
请记住:并非所有DBMS都获得了关键字'INNER'和'OUTER';)