一、DQL介绍
DQL(data query ;anguage)数据查询语言,用于数据的查询,主要语句select
二、select的语法(单表)
select 列 from 表
where 条件
group by 条件
having 条件
order by 条件
limit
以上子句顺序不能更改
三、练习环境说明
world数据库
city 城市表(4079行)
country 国家表 (239行)
countrylanguage 国家的语言(984行)
四、练习
(1)select 配合 from 子句使用
-- select 列,列,列 from 表
1. 查询表中所有的信息(生产中几乎是没有这种需求的)
USE world ;
SELECT id,NAME ,countrycode ,district,population FROM city;
或者:
SELECT * FROM city;
(2)select 配合 where 子句使用
1. 查询中国所有的城市名和人口数
SELECT NAME,population FROM city
WHERE countrycode='CHN';
-- where 配合 like 子句 模糊查询 *****
例子:
1. 查询一下contrycode中带有CH开头,城市信息
SELECT * FROM city
WHERE countrycode LIKE 'CH%';
注意:不要出现‘’%CH%‘’的请况,不走索引性能极差,业务需要使用ES代替
-- where 配合 in 语句
例子:
1. 查询中国或美国的城市信息.
SELECT NAME,population FROM city
WHERE countrycode='CHN' OR countrycode='USA';
或者:
SELECT NAME,population FROM city
WHERE countrycode IN ('CHN' ,'USA');
(3)配合group by使用
作用:将某列具有相同条件的数据分成一组然后用聚合函数操作
1. 统计每个国家,城市的个数
SELECT countrycode ,COUNT(id) FROM city
GROUP BY countrycode;
2. 统计每个国家的总人口数.
SELECT countrycode,SUM(population) FROM city
GROUP BY countrycode;
3. 统计每个 国家 省 的个数
SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode;
4. 统计中国 每个省的总人口数
SELECT district, SUM(population) FROM city
WHERE countrycode='CHN'
GROUP BY district ;
5. 统计中国 每个省城市的个数
SELECT district, COUNT(NAME) FROM city
WHERE countrycode='CHN'
GROUP BY district ;
6. 统计中国 每个省城市的名字列表GROUP_CONCAT()
guangdong guangzhou,shenzhen,foshan....
SELECT district, GROUP_CONCAT(NAME) FROM city
WHERE countrycode='CHN'
GROUP BY district ;
7. 小扩展
anhui : hefei,huaian ....
SELECT CONCAT(district,":" ,GROUP_CONCAT(NAME)) FROM city
WHERE countrycode='CHN'
GROUP BY district ;
(4)select 配合 order by 使用
例子:
1. 统计所有国家的总人口数量,
将总人口数大于5000w的过滤出来,
并且按照从大到小顺序排列
SELECT countrycode,SUM(population) FROM city
GROUP BY countrycode
HAVING SUM(population)>50000000
ORDER BY SUM(population) DESC ;
(5)SELECT 配合 LIMIT 子句
例子:
1. 统计所有国家的总人口数量,
将总人口数大于5000w的过滤出来,
并且按照从大到小顺序排列,只显示前三名
SELECT countrycode,SUM(population) FROM city
GROUP BY countrycode
HAVING SUM(population)>50000000
ORDER BY SUM(population) DESC
LIMIT 3 OFFSET 0;
SELECT countrycode,SUM(population) FROM city
GROUP BY countrycode
HAVING SUM(population)>50000000
ORDER BY SUM(population) DESC
LIMIT 3 OFFSET 3
LIMIT M,N :跳过M行,显示一共N行
LIMIT Y OFFSET X: 跳过X行,显示一共Y行
五、union 和 union all 作用
作用: 多个结果集合并查询的功能
需求: 查询中或者美国的城市信息
SELECT * FROM city WHERE countrycode='CHN' OR countrycode='USA';
改写为:
SELECT * FROM city WHERE countrycode='CHN'
UNION ALL
SELECT * FROM city WHERE countrycode='USA';
union 和 union all 的区别 ?
union all 不做去重复
union 会做去重操作