sql——基础查询与排序

本文详细介绍了SQL的基本操作,包括数据选取、运算符使用、聚合查询以及排序查询。通过SELECT语句进行数据选取,使用DISTINCT删除重复数据,运用聚合函数如SUM、AVG、MAX、MIN和COUNT进行数据汇总,并利用ORDER BY进行排序。此外,还讲解了如何使用GROUP BY进行分组查询,以及在比较运算和逻辑运算中的注意事项。
摘要由CSDN通过智能技术生成

DQL基本操作

数据选取

从表中选取数据时需要使用SELECT语句,也就是只从表中选出(SELECT)必要数据的意思。通过SELECT语句查询并选取出必要数据的过程称为匹配查询或查询(query)。

SELECT <列名>, ……
  FROM <表名>
 WHERE <条件表达式>;

例如

-- 用来选取product type列为衣服的记录的SELECT语句
SELECT product_name, product_type
  FROM product
 WHERE product_type = '衣服';
-- 也可以选取出不是查询条件的列(条件列与输出列不同)
SELECT product_name
  FROM product
 WHERE product_type = '衣服';
  • 想要查询出全部列时,可以使用代表所有列的星号(*)。
SELECT *
  FROM <表名>
  • SQL语句可以使用AS关键字为列设定别名(用中文时需要双引号(“”))
SELECT product_id     As id,
       product_name   As name,
       purchase_price AS "进货单价"
  FROM product;
  • 使用DISTINCT删除product_type列中重复的数据
SELECT DISTINCT product_type
  FROM product;

运算符

算术运算符

SQL语句中可以使用的四则运算的主要运算符如下:

含义运算符
加法+
减法-
乘法*
除法/
-- 选取出sale_price列为500的记录
SELECT product_name, product_type
  FROM product
 WHERE sale_price = 500;

SQL常见比较运算符如下:

运算符含义
=和 ~ 相等
<>和 ~ 不相等
>=大于等于 ~
>大于 ~
<=小于等于 ~
<小于 ~
  • SELECT子句中可以使用常数或者表达式。
  • 使用比较运算符时一定要注意不等号和等号的位置。
  • 字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。
  • 希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。

逻辑运算符:and 、or、not

注意运算符优先级

SELECT *
  FROM product
 WHERE purchase_price <> NULL;
SELECT *
  FROM product
 WHERE purchase_price = NULL;

聚合查询

SQL中用于汇总的函数叫做聚合函数。以下五个是最常用的聚合函数:

  • SUM:计算表中某数值列中的合计值

  • AVG:计算表中某数值列中的平均值

  • MAX:计算表中任意列中数据的最大值,包括文本类型和数字类型

  • MIN:计算表中任意列中数据的最小值,包括文本类型和数字类型

  • COUNT:计算表中的记录条数(行数)

-- 计算销售单价和进货单价的合计值
SELECT SUM(sale_price), SUM(purchase_price) 
  FROM product;
-- 计算销售单价和进货单价的平均值
SELECT AVG(sale_price), AVG(purchase_price)
  FROM product;
-- 计算销售单价的最大值和最小值
SELECT MAX(sale_price), MIN(sale_price)
  FROM product;
-- MAX和MIN也可用于非数值型数据
SELECT MAX(regist_date), MIN(regist_date)
  FROM product;
-- 计算全部数据的行数(包含 NULL 所在行)
SELECT COUNT(*)
  FROM product;
-- 计算 NULL 以外数据的行数
SELECT COUNT(purchase_price)
  FROM product;
使用 DISTINCT 进行删除重复值的聚合运算

当对整表进行聚合运算时,表中可能存在多行相同的数据。在某些场景下,就不能直接使用聚合函数进行聚合运算了,必须搭配 DISTINCT 函数使用。

比如:要计算总共有几种咖啡类型在售,该怎么计算呢?

如前所述,DISTINCT 函数用于删除重复数据,应用 COUNT 聚合函数之前,加上 DISTINCT 关键字就可以实现需求。

SELECT COUNT(DISTINCT product_type)
  FROM product;

排序查询

SELECT <列名1>, <列名2>, <列名3>, ……
  FROM <表名>
 ORDER BY <排序基准列1> [ASC, DESC], <排序基准列2> [ASC, DESC], ……
  • 默认升序 asc
  • 遇到null时:NULL 的值比 非NULL 值低(可以理解为 0 或者 -∞)。
  • NULL 值排在末行,同时将所有 非NULL 值按升序排列。

对于数字或者日期类型,可以在排序字段前添加一个负号(minus)来得到反向排序。(-1、-2、-3....-∞

SELECT * FROM user 
 ORDER BY -date_login DESC;

对于字符型或者字符型数字,此方法不一定能得到期望的排序结果,可以使用 IS NULL 比较运算符。另外 ISNULL( ) 函数等同于使用 IS NULL 比较运算符。

-- IS NULL
SELECT * FROM user 
 ORDER BY name IS NULL ASC,name ASC;
 
-- ISNULL()
SELECT * FROM user 
 ORDER BY ISNULL(name) ASC,name ASC;

上述语句先使用 ISNULL(name) 字段进行升序排列,而只有当 name 列值为 NULL 时,ISNULL(name) 才为真,所以其排到末行,而 name ASC 则实现了 非NULL 值升序排列。

还可以使用 COALESCE 函数实现需求

SELECT * FROM user 
 ORDER BY COALESCE(name, 'zzzzz') ASC;

NULL 值排在首行,同时将所有 非NULL 值按倒序排列。

对于数字或者日期类型,可以在排序字段前添加一个负号(minus)来实现。(-∞...-3、-2、-1

SELECT * FROM user 
 ORDER BY -date_login ASC;

分组查询

GROUP BY语句

之前使用聚合函数都是会将整个表的数据进行处理,当你想将进行分组汇总时(即:将现有的数据按照某列来汇总统计),GROUP BY可以帮助你:

SELECT <列名1>,<列名2>, <列名3>, ……
  FROM <表名>
 GROUP BY <列名1>, <列名2>, <列名3>, ……;
SELECT purchase_price, COUNT(*)
  FROM product
 WHERE product_type = '衣服'
 GROUP BY purchase_price;
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值