left join#左连接又叫外连接
left
join
返回左表中所有记录和右表中连接字段相等的记录
test_user表phpcvs表
SQL:select * from test_user left join phpcvs on test_user.id=phpcvs.id
执行结果如下图:
right join#右连接又叫外连接
right
join
返回右表中所有记录和左表中连接字段相等的记录
SQL:select * from test_user right join phpcvs on test_user.id=phpcvs.id
执行结果如下图:
(*这里执行结果只有一条数据是因为right join的时候phpcvs表里只有一条数据。)
inner join#等值连接又叫内链接
inner
join
只返回两个表中连接字段相等的行
SQL:select * from test_user inner join phpcvs on test_user.id=phpcvs.id
执行结果如下图:
(* 这里返回两个表中字段相等的值,所以只会有一条数据)
子查询 和 JOIN
子查询
SQL:select * from test_user where id not in (select id from phpcvs)
JOIN
SQL:select test_user.* from test_user left join phpcvs on test_user.id=phpcvs.id where phpcvs.id is null
*子查询 和 JOIN 在数据量少的情况下感觉两种情况的执行时间都差不多。有时候子查询还会比用JOIN要快。
*连接(JOIN).. 更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。