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)
案例:查询每一个员工所在的部门名称,要求最终显示员工姓名和对应的名称
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从入门到放弃第六章:子查询和表连接
- MySQL入门笔记 —— 025 连接查询面试题
- php入门学习知识点一 PHP与MYSql连接与查询
- MySQL入门笔记 —— 024 左右连接查询及练习题
- MySQL入门之使用SQL99标准的连接查询
- MySQL入门笔记 —— 023 内连接查询
- php入门学习知识点一 PHP与MYSql连接与查询
- C语言连接mysql简单查询实例入门-mysql_init,mysql_real_connect,mysql_query,mysql_close等
- MySql从一窍不通到入门(三)连接查询、联合查询、子查询
- 数据库入门浅析:ASP.NET与MySQL连接
- C/C++连接查询MYSQL
- 第一篇博文之mysql表表连接查询和行列置换问题
- JSP连接mysql进行查询
- 使用连接(JOIN)来代替子查询(Sub-Queries) mysql优化系列记录
- 2011-9-13 mysql的查询、函数、连接
- 查询数据库当前用户连接信息(MySQL,Oracle)
- 使用连接(JOIN)来代替子查询(Sub-Queries) mysql优化系列记录
- mysql 查询(数据库字段连接及截取及日期)
- JSP连接MYSQL查询编码问题解决
- 教学思路SQL之入门习题《学生成绩》 四、多表连接关系查询