MySQL——MySQL的数据查询功能

MySQL的数据查询功能

SQL查询的7个关键词——以链家二手房数据为例

在实际工作中,使用最多的就是数据库的查询功能了。在数据查询过程中,通常会用到以下7个核心关键词:

SELECT <select_list>
FROM <table_list>
[WHERE <where_condition>]
[GROUP BY <group_by_list>]
[HAVING <having_condition>]
[ORDER BY <order_by_list> ASC|DESC]
[LIMIT <limit_number>]

其中,SELECT和FROM两个关键词是必选项,也就是说,只要是数据查询功能,都需要使用这两个关键词,其他的5个关键词,可以根据查询的实际情况有针对性的选择和使用。

(1) SELECT

主要作用就是告诉数据库,在提取数据时需要选择的字段名称。这里的字段名称可以是数据表中已经有的名称,也可以是依据已有名称衍生出来的名称。需要注意的是如果要查看表中所有数据,只需要在SELECT后面直接写一个星号(*)即可;如果需要提取多个字段,在SELECT关键词后面逐一写出字段名称,并且字段名称之间需要用逗号(英文状态下)隔开。

(2) FROM

主要作用就是告诉数据库,在提取数据时需要选择的数据源(也就是表)名称。
通常来说SELECT和FROM两个关键词都是一起使用的。

# 选择指定的数据库 
use test; 
# 查看链家二手房所有数据 
select * from sec_buildings; 
# 查看链家二手房的小区名称、户型、面积、单价和总价; 
select fname,ftype,size,price_unit,tot_amt from sec_buildings; 
# 查看链家二手房的平均单价和平均总价 
select avg(price_unit),avg(tot_amt) from sec_buildings;

(3) WHERE

主要作用就是限定数据查询的条件,也就是实现数据子集的提取。通常情况下,查询条件可以包含算术运算符、比较运算符、逻辑运算符、区间运算符和通配符。在这里插入图片描述

# 选择指定的数据库 
use test; 
# 查看链家二手房所有数据 
select * from sec_buildings; 
# 查看链家二手房的小区名称、户型、面积、单价和总价; 
select fname,ftype,size,price_unit,tot_amt from sec_buildings; 
# 查看链家二手房的平均单价和平均总价 
select avg(price_unit),avg(tot_amt) from sec_buildings;

# 1.查询所有两室一厅的二手房信息
select * from sec_buildings where ftype="2室1厅";
# 2.查询2014年建的浦东、静安、闵行的二手房信息
select * from sec_buildings where built_date="2014年建" and region in ("浦东","静安","闵行");
# 3.查询闵行区房价在1000万以上的二手房名称、户型、面积、朝向和楼层
select fname,ftype,size,direction,floor from sec_buildings where region="闵行" and tot_amt>1000;
# 4.查询浦东新区面积在60-70平米的二手房名称、户型、面积和总价
select fname,ftype,size,tot_amt from sec_buildings where region="浦东" and size between 60 and 70; #前后都包含
# 5.查询浦东新区所有阳台朝南或者朝南北的二手房信息
select * from sec_buildings where region="浦东" and (direction="朝南" or direction="朝南北");
select * from sec_buildings where region="浦东" and direction in("朝南","朝南北");
#运算优先级 not and or
# 6.查询浦东新区阳台不是朝南的二手房信息
select * from sec_buildings where region="浦东" and direction!="朝南";
select * from sec_buildings where region = "浦东" and not direction="朝南";
# 7.查询小区名称中包含“新天地”字样的二手房信息
select * from sec_buildings where fname like "%新天地%";

在这里插入图片描述

(4)GROUP BY

主要用于统计时的分组操作,通常和聚合函数一起搭配使用。在SQL语法中,可以使用的聚合函数主要有以下5种:
在这里插入图片描述

select * from fruits;

select count(*) from fruits;
select count(f_name) from fruits;
select count(s_id) from fruits;

select distinct s_id from fruits;
select count(distinct s_id) from fruits;

group by 应用实例:

# 1.查询各个行政区域下二手房的数量、总的可居住面积、平均总价格、最大总价格和最小单价 
select region,count(*) as counts,sum(size) as tot_size,avg(tot_amt) as avg_amt, max(tot_amt) as max_amt,min(price_unit) as min_price 
from sec_buildings group by region;

需要注意的是,如果对多个字段进行分组统计,那么需要将所有字段都写到关键词group by后面,并以逗号(英文状态下)隔开。

# 2.查询各个行政区域下每年二手房的数量、总的可居住面积、平均总价格、最大总价格和最小单价 
select region,built_date,count(*) as counts,sum(size) as tot_size,avg(tot_amt) as avg_amt, max(tot_amt) as max_amt,min(price_unit) as min_price from sec_buildings group by region,built_date;

这里尝试用SQL计算RFM模型中的R、F、M值。这里将Excel RFM案例中的order数据集导入到MySQL中,需要注意的是导入之前,需要对数据集做一些处理,否则导不成功:

  • 1.将数据集中所有中文列名改成英文
  • 2.将数据存储方式改成csv
  • 3.将数据编码方式改成utf-8
# 提取出RFM模型关键字段 
select buyer_id,datediff("2017-06-01",max(payment_time)) as R,count(buyer_id) as F,avg(actual_amt) as M from orders 
where payment_time between "2017-05-01 00:00:00" and "2017-05-31 23:59:59" 
group by buyer_id;

MySQL中所有函数:https://www.runoob.com/mysql/mysql-functions.html

(5)HAVING

having关键词与where关键词的作用有一些相似
在这里插入图片描述
我们继续看链家二手房数据,现在的要求是按照地区、户型、楼层和阳台朝向分组统计静安区和浦东区二手房的平均单价和总数量,并筛选出平均单价超过100000元的记录:

# 按照地区、户型、楼层和阳台朝向分组统计静安区和浦东区二手房的平均单价和总数量,并筛选出平均单价 超过100000元的记录
select region,ftype,floor,direction, avg(price_unit) as avg_price,count(*) as counts from sec_buildings
where region in ("静安","浦东")
group by region,ftype,floor,direction
having avg_price > 100000;

(6)ORDER BY

用于查询结果的排序,排序过程中可以按照某个或者某些字段进行升序或者降序的排列。默认是按照升序方式排序,如果需要降序排列的话,需要在字段后面跟上一个关键词DESC。

# 按面积降序、总价升序的方式查询出所有2室1厅的二手房信息 
select * from sec_buildings 
where ftype = "2室1厅" 
order by size desc,tot_amt; 

select * from sec_buildings 
where ftype = "2室1厅" 
order by tot_amt,size desc;

体会一下上面两个查询结果。
需要注意的是order by关键词后面的字段的顺序是有意义的,排在前面的优先级就比后面的要高。

(7)LIMIT

用于限定查询返回的记录行数,可以选择返回前几行,中间几行或者是末尾几行。需要注意的是这个关键词后面最多可以写两个整数型的值:

LIMIT n:表示返回查询结果的前n行
LIMIT m,n:表示从第m+1行开始,连续返回n行的数据

# 查询出建筑时间最悠久的5套二手房 
select * from sec_buildings 
order by built_date 
limit 5; 

# 查询出建筑时间最新的6套二手房 
select * from sec_buildings 
order by built_date desc
limit 6; 

# 查询出浦东新区2013年建的二手房,并且总价排名在6-10 
select * from sec_buildings 
where region="浦东" and built_date = "2013年建" 
order by tot_amt desc 
limit 5,5;

以上,就是查询中常用的7个关键词,同时也是数据提取时要用到的最基本的关键词,同学们一定要掌握每个关键词的作用和语法。


版权声明:本文为Grateful_Dead424原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。