1.前言
本节主要介绍关于DQL查询方法的相关知识点,本来是想要将它放到前一章中进行介绍,不过我觉得关于Mysql的查询很重要,在DBA开发与运维中会常常用到它们,故此拿出来单独说。
2.DQL查询(Select)
2.1首先说明一下因为Select语句会常常和Mysql内置函数一起使用,故有必须要了解一下关于Mysql的内置函数用法,这里因为太多,故不一一说了,
具体参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/functions.html
2.2下面介绍一些常用的函数
2.2.1关于查看系统参数
1 -- select @@xxx 查看系统参数 2 SELECT @@port; ##查看端口 3 SELECT @@basedir; ##查看安装目录路径 4 SELECT @@datadir; ##查看数据目录路径 5 SELECT @@socket; ##查看套接字的所在的路径 6 SELECT @@server_id; ##查看Mysql的server_id
2.2.2关于select的一些内置函数(后续还要补充)
1 SELECT NOW(); ##查看当前时间 2 SELECT DATABASE(); ##查看当前所在的数据库 3 SELECT USER(); ##查看当前登录Mysql服务器的用户 4 SELECT CONCAT("hello world"); #####拼接要补充 5 SELECT CONCAT(USER,"@",HOST) FROM mysql.user; 6 SELECT GROUP_CONCAT(USER,"@",HOST) FROM mysql.user;
3.DQL之select ...where...(过滤)
3.1 Where条件查询
语法:select col1,col2 from table(表名) where col 条件;
说明:条件包含有(=,>,<,>=,<=,<>) 等于|大于|小于|大于等于|小于等于|不等于
3.2 Where 配合逻辑运算符(and or )
3.3 Where配合的模糊查询
实例:select * from city where district like 'guang%'; ##查看以guang开头的所有信息。
注意:%不能放在关键字前面,否则不走索引。
3.4 Where配合in语句
实例:select * from city where countrycode in ('CHN','USA'); ##查看所有国家中包含中国和美国的所有字段信息。
3.5 Where配合between and
SELECT * FROM city WHERE population >1000000 AND population <2000000; ##查询世界上人口数量大于100w小于200w的城市信息
SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000;
4.group by(分组)+聚合函数
4.1 作用:根据by后面的条件进行分组,方便统计,by后面跟一个列或多个列
4.2常用的聚合函数:
**max()** :最大值 **min()** :最小值 **avg()** :平均值 **sum()** :总和 ***** **count()** :个数 ***** group_concat() : 列转行
4.3示例:
统计世界上每个国家的总人口数. SELECT countrycode ,SUM(population) FROM city GROUP BY countrycode; 统计中国各个省的总人口数量 SELECT district,SUM(Population) FROM city WHERE countrycode='chn' GROUP BY district; 统计世界上每个国家的城市数量 SELECT countrycode,COUNT(id) FROM city GROUP BY countrycode;
4.4 having:
##统计中国每个省的总人口数,只打印总人口数小于100
SELECT district,SUM(Population) FROM city WHERE countrycode='chn' GROUP BY district HAVING SUM(Population) < 1000000 ;
5.oder by +limit
5.1作用:实现先排序,by后添加条件列
5.2 示例:
##查看中国所有的城市,并按人口数进行排序(从大到小) SELECT * FROM city WHERE countrycode='CHN' ORDER BY population DESC; ##统计中国,每个省的总人口,找出总人口大于500w的,并按总人口从大到小排序,只显示前三名 SELECT district, SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district HAVING SUM(population)>5000000 ORDER BY SUM(population) DESC LIMIT 3 ; LIMIT N ,M -->跳过N,显示一共M行 LIMIT 5,5 -->跳过第五行,从第六行开始显示五条数据 SELECT district, SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district HAVING SUM(population)>5000000 ORDER BY SUM(population) DESC LIMIT 5,5;
6.去重(distinct)
SELECT DISTINCT(countrycode) FROM city ; ##该关键字主要添加在要去重字段的前面,表示对该字段进行去重
7.联合查询(union vs union all)
-- 中国或美国城市信息 SELECT * FROM city WHERE countrycode IN ('CHN' ,'USA'); 或者: SELECT * FROM city WHERE countrycode='CHN' UNION ALL SELECT * FROM city WHERE countrycode='USA' 说明:一般情况下,我们会将 IN 或者 OR 语句 改写成 UNION ALL,来提高性能 UNION 去重复 UNION ALL 不去重复