Mysql 多表查询

当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。

从大类上分,表连接分为内连接外连接

它们之间的最主要区别是內连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。

我们最常用的是内连接。

  例如:

         查询出所有雇员的名字和所在部门名称,因为雇员名称和部门分别存放在表emp和dept中,因此,

        需要使用表连接来进行查询:

select emp.*,dept.deptname from emp, dept where emp.deptno=dept.deptno; 

外连接有分为左连接和右连接

具体定义如下。

•左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录

•右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录

例如,查询emp中所有用户名和所在部门名称:

比较这个查询和上例中的查询,都是查询用户名和部门名,两者的区别在于本例中列出了所有的用户名,即使有的用户名(dony)并不存在合法的部门名称(部门号为4,在dept中没有这个部门);

子查询

 某些情况下,当我们查询的时候,需要的条件是另外一个select语句的结果,这个时候,就要用到子查询。

用于子查询的关键字主要包括in、not in、=、!=、exists、not exists等。

例如:从emp表中查询出所有部门在dept表中的所有记录

某些情况下,子查询可以转化为表连接,如上,转换表连接后:

select emp.* from emp ,dept where emp.deptno=dept.deptno;

注意:子查询和表连接之间的转换主要应用在两个方面。

  • MySQL 4.1以前的版本不支持子查询,需要用表连接来实现子查询的功能
  • 表连接在很多情况下用于优化子查询

记录联合

我们经常会碰到这样的应用,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候,就需要用union和union all关键字来实现这样的功能,具体语法如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值