旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

MySQL查询语句之庞杂查询【MySQL教程】,MySQL,复杂,查询

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:35评论:0


导读:MySQL是一种关联数据库治理体系,关联数据库将数据保存在差别的表中,而不是将一切数据放在一个大仓库内,如许就增加了速率并提高了灵活性。在MySQL中经常会有许多庞杂的查询,为了勤...
MySQL是一种关联数据库治理体系,关联数据库将数据保存在差别的表中,而不是将一切数据放在一个大仓库内,如许就增加了速率并提高了灵活性。在MySQL中经常会有许多庞杂的查询,为了勤俭人人的时候,小编总结了一些经常用到的庞杂查询。

MySQL庞杂查询

一、分组查询:

1、关键字:GROUP BY

2、用法:GROUP BY 语句用于连系算计函数 (比方 SUM) ,依据一个或多个列对结果集举行分组,算计函数经常须要增加 GROUP BY 语句。

下面的给了两张表 一张是emp,一张是dept,下面的查询我们都对这两张表举行操纵,以下图:

第一张:emp

第二张:dept

如今我们查询emp每一个部门的工资总和,语句以下:

SELECT deptno,SUM(sal)FROM emp GROUP BY deptno;

结果以下:

:这里我们查询每一个部门的工资(sal)总和,所以应当根据部门标号(deptno)举行分组,乞降所以用了sum();

3、having:

where 和 having 都是做前提推断,在引见having前我们看下where 和 having的区分

where的作用是在对查询结果举行分组前,将不相符where前提的行去掉,即在分组之前过滤数据,前提中不能包括聚合函数,运用where前提显现特定的行。

having的作用是挑选满足前提的组,即在分组以后过滤数据,前提中经常包括聚合函数,运用having 前提显现特定的组,也能够运用多个分组规范举行分组。

比方:我们要查询emp表中工资总和大于10000的部门编号,语句以下:

SELECT deptno,SUM(sal)FROM emp GROUP BY deptno HAVING SUM(sal)>10000;

结果以下:

如许就查出了工资总和大于10000的部门编号为20,(为了明白也把工资总和显现出来了)。

二、连表查询:

依据两个或多个表中的列之间的关联,从这些表中查询数据.

1、inner join(内衔接):

语法:select 字段名1,字段名2 from table1 [INNER] join table2 ON table1.字段名=table2.字段名;

注:内衔接是从结果中删除其他被衔接的表中没有婚配行的一切行,只能查询出衔接的表中都具有的信息,所之内衔接可能会丧失信息,另有inner能够省略

比方:我们衔接emp 和 dept两张表,查询ename 和deptno,语句以下:

SELECT emp.ename,dept.deptno FROM emp INNER JOIN dept ON emp.deptno=dept.deptno;

另有种写法:SELECT emp.ename,dept.deptno from emp,dept where emp.deptno=dept.deptno;



注重:本来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查询语句之庞杂查询的细致内容,更多请关注ki4网别的相干文章!

标签:MySQL复杂查询


欢迎 发表评论: