mysql join 内连接和外连接
来源:互联网 发布:linux ssr 客户端 编辑:程序博客网 时间:2024/06/05 09:04
table1:左表;table2:右表。
JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):也可以省去inner,比如join a on b,取得两个表中存在连接匹配关系的记录。
LEFT [OUTER]JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。
RIGHT[OUTER] JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。
cross join:交叉连接,得到的结果是两个表的乘积,即笛卡尔积
注意:mysql不支持Full join --全外联接,不过可以通过UNION 关键字来合并 LEFT JOIN 与 RIGHT JOIN来模拟FULL join
另外,mysql在遇到右外联结的时候其优化器会将其改写成等价的左外联接
语法:
select * from A left join B on A.name = B.name;#或者:select * from A left outer join B on A.name = B.name;
select * from A right join B on A.name = B.name;
select * from A inner join B on A.name = B.name;#或者:select*from A join B on A.name=B.name;
SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c);--相当于SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)
最后要说的就是,在MySQL5.0以后,运算顺序得到了重视,所以对多表的联结查询可能会错误以子联结查询的方式进行。譬如你需要进行多表联结,因此你输入了下面的联结查询:
SELECT t1.id,t2.id,t3.id
FROM t1,t2
LEFT JOIN t3 ON (t3.id=t1.id)
WHERE t1.id=t2.id;
但是MySQL并不是这样执行的,其后台的真正执行方式是下面的语句:
SELECT t1.id,t2.id,t3.id
FROM t1,( t2 LEFT JOIN t3 ON (t3.id=t1.id) )
WHERE t1.id=t2.id;
这并不是我们想要的效果,所以我们需要这样输入:
SELECT t1.id,t2.id,t3.id
FROM (t1,t2)
LEFT JOIN t3 ON (t3.id=t1.id)
WHERE t1.id=t2.id;
在这里括号是相当重要的,因此以后在写这样的查询的时候我们不要忘记了多写几个括号,至少这样能避免很多错误
我要补充的是在MySQL现有版本中CROSS JOIN的作用和INNER JOIN是一样的(虽然在SQL Standard中是不一样的,然而在MySQL中他们的区别仅仅是INNER JOIN需要附加ON参数的语句,而CROSS JOIN不需要)
Select A.Name B.Hobby from A, B where A.id = B.id,这是隐式的内联结
它的作用和 Select A.Name from A INNER JOIN B ON A.id = B.id是一样的。这里的INNER JOIN换成CROSS JOIN也是可以的
1. NATURAL [LEFT] JOIN:这个句子的作用相当于INNER JOIN,或者是在USING子句中包含了联结的表中所有字段的Left JOIN(左联结)
2. STRAIGHT_JOIN:由于默认情况下MySQL在进行表的联结的时候会先读入左表,当使用了这个参数后MySQL将会先读入右表,这是个MySQL的内置优化参数,大家应该在特定情况下使用,譬如已经确认右表中的记录数量少,在筛选后能大大提高查询速度
- mysql join 内连接和外连接
- Mysql 连接(inner join,默认的就是内连接)、外连接(left join,right join)
- Mysql 的内外连接 (inner join,默认内连接) 外连接(left join,right join)
- 数据库的外连接(OUTER JOIN),内连接(INNER JOIN)和交叉连接(CROSS JOIN)区别
- Mysql 内连接、外连接、全连接和交叉连接
- mysql 内连接和外连接
- mysql 内连接和外连接 .
- MySQL内连接和外连接
- mysql内连接和外连接
- MySQL COUNT(*) INNER JOIN 内连接查询
- DB2数据库的外连接(OUTER JOIN),内连接(INNER JOIN)和交叉连接(CROSS JOIN)区别
- 区别交叉连接(cross jon) 内连接(inner join) 和外连接(left outer join,right outer join)
- MySQL连接查询 内连接和外连接的区别
- mysql左连接left join右连接 right join 内连接 inner join笔记
- 内连接inner join和外连接outer join的全部用法
- 内连接 外连接(left join/ right join)
- MySQL学习----MySQL 连接和联合----15MySQL 交叉连接、内连接和外连接
- mysql内连接,外连接
- Codeforces229A Shifts[二分]
- java的四种内部类
- VALSE 2017 | 人脸检测与识别技术年度进展概述
- 移动端开发
- AsycnTask
- mysql join 内连接和外连接
- ArrayBlockingQueue浅析
- spring ioc和di
- Quartz.net 之一 初识
- Python进行web开发--django
- linux下svn服务搭建
- 排序算法总结
- IOS推送
- cocos2d-x3.6两层Layer触摸事件传递