您的位置:首页 > 数据库 > MySQL

mysql入门连接查询(九)

2017-05-15 18:09 288 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: