mysql--6.多表查询

来源:互联网 发布:java web面试题 编辑:程序博客网 时间:2024/06/05 19:38

1      概述

 

 

2      内链接--inner可以省略

2.1  等值连接

 

 

Eg:

 

 

 

 

2.2  非等值连接

 

 

2.3  自连接

找出每一个员工的上级领导,要求显示员工姓名及对应的领导姓名(内连接:自连接)

 

 

 

二、省市

 

3      外链接(等值)--outer可省略

3.1  左外连接和右外连接

  

练习:

查看所有人所属的部门名称和员工名称?

         selectdept.dname,emp.ename from dept,emp where dept.did = emp.dno;

         selectd.dname,e.ename from dept d,emp e where d.did = e.dno;

        

统计每个部门的人数(按照部门名称统计,分组group by  count)

         selectd.dname,count(*) from dept d,emp e where d.did = e.dno group by d.dname;

        

统计部门的平均工资(按部门名称统计,分组group by  avg)

         selectd.dname,avg(salaly) from dept d,emp e where d.did = e.dno group by d.dname;

        

 

3.2  全外连接

 

 

4      交叉连接/笛卡尔积

表A                             表B

                   aidaname                  bid    bname

                   a1     aa1                     b1     bb1

                   a2     aa2                     b2     bb2

                                                        b3     bb3

                  

                   *查询的语法

                            select* from 表A,表B; 返回的结果就是笛卡尔积。

                           

                   结果:

                   a1     aa1                     b1     bb1

                   a1     aa1                     b2     bb2

                   a1     aa1                     b3     bb3

                   a2     aa2                     b1     bb1

                   a2     aa2                     b2     bb2

                   a2     aa2                     b3     bb3

 

select * from dept,emp;

 

5      扩展:多表连接

员工表不部门表连接(e.deptno = d.deptno),再不工资等级表连接(e.sal between s.losal and s.hisal)

 

原理:A表和B表通过连接条件1连接之后,A表再和C表通过连接条件2进行连接;

 

 

 

 

原创粉丝点击