MySQL查询语句之复杂查询


当前第2页 返回上一页

注意:原来dept表中有deptno为40的,但查询出来就没有了,这里是因为emp中deptno字段中没有值为40,所以使用innner join连接时就自动删除了dept表中deptno字段值为40的记录。

2、外连接:

2.1:左外连接:结果集保留左表的所有行,但只包含第二个表与第一表匹配的行。第二个表相应的空行被放入NULL值。

2.2:右外连接:结果集保留右表的所有行,但只包含第二个表与第一表匹配的行。第二个表相应的空行被放入NULL值。

左外连接和右外连接交换两个表的位置就可以达到相同的效果。

现在我们进行分组和连表一起用的查询

例如:我们要查询emp每个部门的工资总和并且对应dept表中的部门名称

解析这句话: 查询的字段是 emp中的每个部门sal(工资总和),这里就要用到分组查询,但是还要查询到对应部门的部门名称(dname),由于dname

是在dept表中,所以就应该连接emp和dept两张表.

思路1:我们先查询出我们需要的所有字段再进行分组,所以先连接再分组,语句如下:

SELECT e.deptno,d.dname,SUM(e.sal) FROM emp e INNER JOIN dept d ON e.deptno=d.deptno GROUP BY d.deptno;)(注意这里使

用了别名 emp的别名是 e,dept的别名是 d)

第二种写法:

SELECT e.deptno,d.dname,SUM(e.sal) FROM emp e,dept d WHEREe.deptno=d.deptno GROUP BY d.deptno;

这两种写法的结果都是一样,如下:



思路2:我们要查询emp每个部门的工资总和,把这个结果集当作一个表(这里称为表1),再让表1去连接dept表查询出对应的部门名称(dname);

分步1:SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;这个语句就查询出了emp表中每个部门的工资总和,现在我们再与dept

表连接:

分步2:SELECT xin.*,d.dname FROM(SELECT deptno,SUM(sal) FROM emp GROUP BY deptno) xin INNER JOIN dept d ON xin.deptno

=d.deptno;这样就查询出了想要的结果,注意这里的xin 是别名,结果如下:



这里的代码看起来很长,其实思路是很明确的,就是把第一个查询结果当作一张表去连接另一张表,这样的思路不容易出错,多练习写起来就

很熟练了。

三、分页:

关键字:LIMIT

语法:select * from tableName 条件 limit 当前页码*页面容量-1 , 页面容量;

一般limit 都和 order by 连用

例如 我们要查询emp表中按部门编号升序排列的5-10的记录,每页显示5条记录,语句如下:

SELECT *FROM emp ORDER BY deptno LIMIT 4,5;

这样就可以查询出想要的结果了,注意最后一个参数5是页面容量,也就是本页要显示的行数(即本页开始行到结束行的记录条数)。

比如我们要查询17页的记录,每页显示10条记录:

LIMIT 17*10-1,10;

四:IN

关键字:In

子查询的返回值结果不只一个条件就必须用IN 不能用"=";

注:LIMIT 都是放在最后的

相关推荐:

MySQL5.7缺少my.ini文件如何解决

关于mysql max 与 where 间的执行问题小结

MySQL统计信息的详细概述

以上就是MySQL查询语句之复杂查询的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

学习mysql不是内部命令的错误解决方案

如何在dos下打开mysql

详解mysql使用 row 格式 binlog 撤销操作

mysql如何改变主键属性

mysql实例精讲单行函数以及字符数学日期流程控制

怎么把复合主键改为单一主键

mysql设置log-bin失败怎么办

mysql中插入表数据中文乱码怎么办

mysql中关于事务的具体详解

mysql5.6启动内存占用过高解决方案

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...