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_typeHAVING COUNT(*) = 2;-- 错误形式(因为product_name不包含在GROUP BY聚合键中)SELECT product_type, COUNT(*) FROM product GROUP BY product_typeHAVING product_name = '圆珠笔';
复制代码
上图所示 HAVING 的必须在 GROUP BY 出现否则结果会是错误的
对查询结果进行排序
SELECT <列名1>, <列名2>, <列名3>, …… FROM <表名> ORDER BY <排序基准列1>, <排序基准列2>, ……
复制代码
默认为升序排列,降序排列为 DESC
当用于排序的列名中含有 NULL 时,NULL 会在开头或末尾进行汇总。
评论