创新路
我们一直在努力

MySQL学习笔记(6)

1:当多张表进行连接查询时,若没有任何条件限制,则会发生记录重复(产生笛卡尔积)

 

  案例:查询每一个员工所在的部门名称,要求最终显示员工姓名和对应的名称

select emp.empno,emp.ename,dept.dname from emp,dept;

 empno  ename    dname     

  7369  SMITH    ACCOUNTING

  7369  SMITH    RESEARCH  

  7369  SMITH    SALES     

  7369  SMITH    OPERATIONS

  7499  ALLEN    ACCOUNTING

  7499  ALLEN    RESEARCH  

  7499  ALLEN    SALES     

  7499  ALLEN    OPERATIONS

  7521  WARD     ACCOUNTING

  7521  WARD     RESEARCH  

  7521  WARD     SALES     

  7521  WARD     OPERATIONS

  7566  JONES    ACCOUNTING

  7566  JONES    RESEARCH  

  7566  JONES    SALES     

  7566  JONES    OPERATIONS

  7654  MARTIM   ACCOUNTING

  7654  MARTIM   RESEARCH  

  7654  MARTIM   SALES     

  7654  MARTIM   OPERATIONS

  7698  BLAKE    ACCOUNTING

  7698  BLAKE    RESEARCH  

  7698  BLAKE    SALES     

  7698  BLAKE    OPERATIONS

  7782  CLARK    ACCOUNTING

  7782  CLARK    RESEARCH  

  7782  CLARK    SALES     

  7782  CLARK    OPERATIONS

  7788  SCOLL    ACCOUNTING

  7788  SCOLL    RESEARCH  

  7788  SCOLL    SALES     

  7788  SCOLL    OPERATIONS

  7839  KING     ACCOUNTING

  7839  KING     RESEARCH  

  7839  KING     SALES     

  7839  KING     OPERATIONS

  7844  IUSRNER  ACCOUNTING

  7844  IUSRNER  RESEARCH  

  7844  IUSRNER  SALES     

  7844  IUSRNER  OPERATIONS

  7876  ADAMS    ACCOUNTING

  7876  ADAMS    RESEARCH  

  7876  ADAMS    SALES     

  7876  ADAMS    OPERATIONS

  7900  JAMES    ACCOUNTING

  7900  JAMES    RESEARCH  

  7900  JAMES    SALES     

  7900  JAMES    OPERATIONS

  7902  FORD     ACCOUNTING

  7902  FORD     RESEARCH  

  7902  FORD     SALES     

  7902  FORD     OPERATIONS

  7934  MILLER   ACCOUNTING

  7934  MILLER   RESEARCH  

  7934  MILLER   SALES     

  7934  MILLER   OPERATIONS

56 rows in set (0.05 sec)

 

mysql> select e.empno,e.ename,d.dname from emp e,dept d;

 empno  ename    dname     

  7369  SMITH    ACCOUNTING

  7369  SMITH    RESEARCH  

  7369  SMITH    SALES     

  7369  SMITH    OPERATIONS

  7499  ALLEN    ACCOUNTING

  7499  ALLEN    RESEARCH  

  7499  ALLEN    SALES     

  7499  ALLEN    OPERATIONS

  7521  WARD     ACCOUNTING

  7521  WARD     RESEARCH  

  7521  WARD     SALES     

  7521  WARD     OPERATIONS

  7566  JONES    ACCOUNTING

  7566  JONES    RESEARCH  

  7566  JONES    SALES     

  7566  JONES    OPERATIONS

  7654  MARTIM   ACCOUNTING

  7654  MARTIM   RESEARCH  

  7654  MARTIM   SALES     

  7654  MARTIM   OPERATIONS

  7698  BLAKE    ACCOUNTING

  7698  BLAKE    RESEARCH  

  7698  BLAKE    SALES     

  7698  BLAKE    OPERATIONS

  7782  CLARK    ACCOUNTING

  7782  CLARK    RESEARCH  

  7782  CLARK    SALES     

  7782  CLARK    OPERATIONS

  7788  SCOLL    ACCOUNTING

  7788  SCOLL    RESEARCH  

  7788  SCOLL    SALES     

  7788  SCOLL    OPERATIONS

  7839  KING     ACCOUNTING

  7839  KING     RESEARCH  

  7839  KING     SALES     

  7839  KING     OPERATIONS

  7844  IUSRNER  ACCOUNTING

  7844  IUSRNER  RESEARCH  

  7844  IUSRNER  SALES     

  7844  IUSRNER  OPERATIONS

  7876  ADAMS    ACCOUNTING

  7876  ADAMS    RESEARCH  

  7876  ADAMS    SALES     

  7876  ADAMS    OPERATIONS

  7900  JAMES    ACCOUNTING

  7900  JAMES    RESEARCH  

  7900  JAMES    SALES     

  7900  JAMES    OPERATIONS

  7902  FORD     ACCOUNTING

  7902  FORD     RESEARCH  

  7902  FORD     SALES     

  7902  FORD     OPERATIONS

  7934  MILLER   ACCOUNTING

  7934  MILLER   RESEARCH  

  7934  MILLER   SALES     

  7934  MILLER   OPERATIONS

 56 rows in set (0.00 sec)

 

2:上面问题是由笛卡尔积造成的,m*n条记录(通过约束条件限制)  sql92:内链接中的等值连接

select e.empno,e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;

  empno  ename    dname     

  7782  CLARK    ACCOUNTING

  7839  KING     ACCOUNTING

  7934  MILLER   ACCOUNTING

  7369  SMITH    RESEARCH  

  7566  JONES    RESEARCH  

  7788  SCOLL    RESEARCH  

  7876  ADAMS    RESEARCH  

  7902  FORD     RESEARCH  

  7499  ALLEN    SALES     

  7521  WARD     SALES     

  7654  MARTIM   SALES     

  7698  BLAKE    SALES     

  7844  IUSRNER  SALES     

  7900  JAMES    SALES     

 

3:join on   sql99:表连接更清晰,还可以再追加where语句进行过滤

select e.empno,e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;

  empno  ename    dname     

  7782  CLARK    ACCOUNTING

  7839  KING     ACCOUNTING

  7934  MILLER   ACCOUNTING

  7369  SMITH    RESEARCH  

  7566  JONES    RESEARCH  

  7788  SCOLL    RESEARCH  

  7876  ADAMS    RESEARCH  

  7902  FORD     RESEARCH  

  7499  ALLEN    SALES     

  7521  WARD     SALES     

  7654  MARTIM   SALES     

  7698  BLAKE    SALES     

  7844  IUSRNER  SALES     

  7900  JAMES    SALES     

14 rows in set (0.00 sec)

 

4:inner可以省略

 select e.empno,e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno;

  empno  ename    dname     

  7782  CLARK    ACCOUNTING

  7839  KING     ACCOUNTING

  7934  MILLER   ACCOUNTING

  7369  SMITH    RESEARCH  

  7566  JONES    RESEARCH  

  7788  SCOLL    RESEARCH  

  7876  ADAMS    RESEARCH  

  7902  FORD     RESEARCH  

  7499  ALLEN    SALES     

  7521  WARD     SALES     

  7654  MARTIM   SALES     

  7698  BLAKE    SALES     

  7844  IUSRNER  SALES     

  7900  JAMES    SALES     

14 rows in set (0.00 sec)

 

5:找出每一个员工对应的工资等级(内连接中的非等值连接)

mysql> select e.empno,e.ename,e.sal ,s.grade from emp e join salgrade s on e.sal between s.local and  s.hical;

empno  ename    sal      grade

  7369  SMITH     800.00      1

  7499  ALLEN    1600.00      3

  7521  WARD     1250.00      2

  7566  JONES    2975.00      4

  7654  MARTIM   1250.00      2

  7698  BLAKE    2850.00      4

  7782  CLARK    2450.00      4

  7788  SCOLL    3000.00      4

  7839  KING     5000.00      5

  7844  IUSRNER  1500.00      3

  7876  ADAMS    1100.00      1

  7900  JAMES     950.00      1

  7902  FORD     3000.00      4

  7934  MILLER   1300.00      2

14 rows in set (0.00 sec)

 

6:找出每个员工的上一级领导名称(内连接中的自连接)一张数据表看成两张数据表

select e.empno,e.ename,l.ename from emp e join emp l on e.mgr=l.empno;

empno  ename    ename

  7369  SMITH    FORD 

  7499  ALLEN    BLAKE

  7521  WARD     BLAKE

  7566  JONES    KING 

  7654  MARTIM   BLAKE

  7698  BLAKE    KING 

  7782  CLARK    KING 

  7788  SCOLL    JONES

  7844  IUSRNER  BLAKE

  7876  ADAMS    SCOLL

  7900  JAMES    BLAKE

  7902  FORD     JONES

  7934  MILLER   CLARK

13 rows in set (0.00 sec)

未经允许不得转载:天府数据港官方信息博客 » MySQL学习笔记(6)

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机