码迷,mamicode.com
首页 > 数据库 > 详细

MySQL之连接查询

时间:2017-05-08 10:49:15      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:目录   交叉连接   举例   查询条件   笛卡尔   inner   版本   style   mysq   

1.内连接:只列出匹配的记录
  语法:
    SELECT … FROM join_table
   INNER JOIN join_table2
   ON join_condition
   WHERE where_defnition
 解释:只列出这些连接表中与连接条件相匹配的数据行。INNER可以不写,则默认为内连接。[ON join_condition]里面写的是连接的条件。
 举例:
    select e.name,d.name from employee e inner join department d on e.dept_id=d.id;(常用)
    等价于:
    select e.name,d.name from employee e join department d on e.dept_id=d.id;(常用)
    等价于:
    select e.name,d.name from employee e,department d where e.dept_id=d.id;

2.外连接:
  左外连接(LEFT [OUTER] JOIN)
  右外连接(RIGHT [OUTER] JOIN)
  全外连接(FULL [OUTER] JOIN) 注:MySQL5.1的版本暂不支持
  解释:不仅列出与连接条件(on)相匹配的行,还列出左表table1(左外连接)、或右表table2(右外连接)、或两个表(全外连接)中所有符合WHERE过滤条件的数据行。一般都是用左连接或者外连接.其中,[OUTER]部分可以不写,(LEFT | RIGHT | FULL)部分要写其中一个。
  2.1 左外连接:左表列出全部,右表只列出匹配的记录。
  举例:
    SELECT m.`name` ,b.name from sys_menu m LEFT OUTER JOIN sys_button b ON m.id=b.menuId
  等价于:
    SELECT m.`name` ,b.name from sys_menu m LEFT JOIN sys_button b ON m.id=b.menuId

  2.2 右外连接 :右表列出全部,左表只列出匹配的记录。
  举例:
    SELECT m.`name` ,b.name from sys_menu m RIGHT JOIN sys_button b ON m.id=b.menuId
  等价于:
    SELECT m.`name` ,b.name from sys_menu m RIGHT OUTER JOIN sys_button b ON m.id=b.menuId

3 交叉连接:
解释:假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}
其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
等价于:(荐)
SELECT … FROM table1, table2;
4.自连接:
解释:参与连接的表都是同一张表。(通过给表取别名虚拟出两张表)
注:非常重要,在JavaWeb中的目录树中用的特别多。(使用什么连接由需求而定)
举例:
SELECT m.`name` parent ,m2.`name` c from sys_menu m LEFT JOIN sys_menu m2 on m.id=m2.parentId
说明: 查询当前所有菜单的名称以及其子菜单的名称

MySQL之连接查询

标签:目录   交叉连接   举例   查询条件   笛卡尔   inner   版本   style   mysq   

原文地址:http://www.cnblogs.com/sxf20/p/6823837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!