首页 > 技术文章 > 5.Mysql之基本SQL语法(02)

zmc60 2020-10-26 20:00 原文

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 不去重复

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

  

推荐阅读