黑马程序员技术交流社区

标题: sql多表连接查询 [打印本页]

作者: 周敏_.net    时间: 2011-11-29 14:53
标题: sql多表连接查询
本帖最后由 周敏_.net 于 2011-12-1 02:29 编辑

对几个连接查询的用法不是很清楚,希望大家能用自己的理解讲解一下
作者: 杨本国    时间: 2011-11-29 15:13
联合查询:select 姓名,工资 from 表名 union select 姓名,工资 from 表名      组合其他两个结果表并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
内连接查询:select kj.姓名,kj.职业 from 表名 as kj inner join 表名 as bu on bu.负责人=kj.姓名   表内的组合查询
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
   我大概就了解这些了。
作者: 许前刚    时间: 2011-11-29 15:47
内连接、外连接和交叉连接。
内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。


作者: 经睿    时间: 2011-11-29 15:58
本帖最后由 经睿 于 2011-11-29 15:59 编辑

我用的比较多的是内连接(join 或者inner join )

SQL语法:

select *fron table1 join table2  on table1.条件列名 = table2.条件列名

返回符合匹配条件的两表列

等价于:

           select A* ,B* from table1 A ,table2 B where A.条件列名 =B.条件列名

  


作者: 杨楠    时间: 2011-11-29 16:25
连表查询偶从来没用过呢。。。偶也想问,如果用子查询可否替代什么左右join。。。
作者: 李海龙    时间: 2011-11-30 15:48
有内联接  外联结  全联接
内联接  where   ,   inner join ... on
select A.Name  , B.score  from Student A , Score B where A.Id = B.Id(A表和B表中相关联的列)

select A.Name , B. score form Student a inner join Score b on(A.Id = B.Id)

外联结
   左外连接
     select A.Name , B. score form Student a  LeFT OUTER join Score b on(A.Id = B.Id)
    右外连接
                                          RIGHT OUTER JOIN.....ON

右外连接  以右表为基础,左表为辅,匹配右表一遍  如果基于左表右表没有的话 在查询的显示的表中 插入一列 不排除空值
聚合函数的时候有区别,,例如Count AVG 好像排除空值  小弟学艺不精只有这些 希望对你有帮助
另外 全连接   应该是  FULL JOIN ...ON   不太记得了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2