SQL语句之select

一、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 会做去重操作

上一篇:mysql


下一篇:《动物游戏》一场真正的资本主义游戏