SELECT 语句基础
select 后跟的是你想要的列名可以多个 from 后跟的是你的表名 或者你查询出来的结果也行 where 后跟的是条件整体语句表示 从某表选择相应的列,并筛选符合条件的值。结果如上图左下角所示所示整体数据如下图
*表示通配符,表示匹配所有结果如上图所示查询除了表中所有数据
如果我们想从 product
(商品) 表中选取出“登记日期(regist
)在 2009 年 4 月 28 日之后”的商品,查询结果要包含 product name
和 regist_date
两列。
可以这样写
SELECT product_name,regist_date
FROM product
WHERE regist_date > '2009-04-28';
复制代码
SELECT *
FROM product
WHERE purchase_price = NULL;
复制代码
SELECT *
FROM product
WHERE purchase_price <> NULL;
复制代码
SELECT *
FROM product
WHERE product_name > NULL;
复制代码
以上 3 个语句的结果都是空 第一个是条件列没有 NULL 后面两个是 NULL 是个不确定的值 不能进行比较
如果想从 product 表中取出“销售单价(saleprice)比进货单价(purchase price)高出 500 日元以上”的商品。可以这样写。
SELECT product_name,sale_price,purchase_price
FROM product
WHERE sale_price - purchase_price > 500;
复制代码
SELECT product_name,sale_price,purchase_price
FROM product
WHERE NOT sale_price - purchase_price <= 500;
复制代码
对表进行聚合查询
以下五个是最常用的聚合函数:
COUNT:计算表中的记录数(行数)
SUM:计算表中数值列中数据的合计值
AVG:计算表中数值列中数据的平均值
MAX:求出表中任意列中数据的最大值
MIN:求出表中任意列中数据的最小值
-- 计算全部数据的行数(包含NULL)
SELECT COUNT(*)
FROM product;
-- 计算NULL以外数据的行数
SELECT COUNT(purchase_price)
FROM product;
-- 计算销售单价和进货单价的合计值
SELECT SUM(sale_price), SUM(purchase_price)
FROM product;
-- 计算销售单价和进货单价的平均值
SELECT AVG(sale_price), AVG(purchase_price)
FROM product;
-- MAX和MIN也可用于非数值型数据
SELECT MAX(regist_date), MIN(regist_date)
FROM product;
复制代码
-- 计算去除重复数据后的数据行数
SELECT COUNT(DISTINCT product_type)
FROM product;
-- 是否使用DISTINCT时的动作差异(SUM函数)
SELECT SUM(sale_price), SUM(DISTINCT sale_price)
FROM product;
复制代码
因为这一列有两个 500 所有去重后求和就会少 500
-- 按照商品种类统计数据行数
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type;
-- 不含GROUP BY 结果只会显示这一列第一行的属性,结果也不是我们想要的
SELECT product_type, COUNT(*)
FROM product
复制代码
SELECT purchase_price, COUNT(*)
FROM product
GROUP BY purchase_price;
复制代码
此时会将 NULL 作为一组特殊数据进行处理,因为他是不确定值也是一个类别
GROUP BY 书写位置
GROUP BY 的子句书写顺序有严格要求,不按要求会导致 SQL 无法正常执行,目前出现过的子句顺序为:
1 SELECT → 2. FROM → 3. WHERE → 4. GROUP BY
其中前三项用于筛选数据,GROUP BY 对筛选出的数据进行处理
SELECT purchase_price, COUNT(*)
FROM product
WHERE product_type = '衣服'
GROUP BY purchase_price;
复制代码
HAVING 的用法类似 WHERE 但分组后不能用 WHERE
-- 数字
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type
HAVING COUNT(*) = 2;
-- 错误形式(因为product_name不包含在GROUP BY聚合键中)
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type
HAVING product_name = '圆珠笔';
复制代码
上图所示 HAVING 的必须在 GROUP BY 出现否则结果会是错误的
对查询结果进行排序
SELECT <列名1>, <列名2>, <列名3>, ……
FROM <表名>
ORDER BY <排序基准列1>, <排序基准列2>, ……
复制代码
默认为升序排列,降序排列为 DESC
当用于排序的列名中含有 NULL 时,NULL 会在开头或末尾进行汇总。
评论