简单学SQL——select 查(一)

1.查询简介

在这里插入图片描述

2.比较,逻辑运算

书写范式

SELECT <列名1>,<列名2>, <列名3>, ……
  FROM <表名>
 GROUP BY <列名1>, <列名2>, <列名3>, ……;

其中

SELECT <列名1>,<列名2>, <列名3>中的列名可与加减乘除运算配合使用

加减乘法运算,举例如下:

SELECT (sale_price-purchase_price) as '利润',
(sale_price*0.8-purchase_price) as '打八折后利润',
(sale_price-purchase_price)/purchase_price as '利润率'
  FROM product;

2.1 比较符号

比较符号与C语言相比,只有两处不一样,如下

  • 和…相等,一个等号 =,不是==
  • 和…不相等,为<>,不是 !=

举例

SELECT product_type,regist_date from product
where regist_date <> '2009-01-08' ;-- 查询登记日期不为2009-01-08的产品类型

2.2 逻辑运算符

  • 符号,词义,数学意义
  • and,和,交集
  • or,或者,合集
  • not,不是,取反

逻辑符号,and,举例

SELECT product_type,regist_date from product-- 查询2009-01-08到2009-06-08登记的产品类型
where regist_date > '2009-01-08' and regist_date < '2009-06-08'; 

逻辑符号,or,举例

SELECT product_type,regist_date from product-- 查询2009-01-08之前 或者 2009-06-08之后登记的产品类型
where regist_date < '2009-01-08' or regist_date > '2009-06-08'  ;

逻辑符号,not,举例

SELECT product_name, product_type, sale_price
  FROM product
 WHERE NOT sale_price >= 1000;
 -- 等同于
 SELECT product_name, product_type, sale_price
  FROM product
 WHERE  sale_price < 1000;

3.聚合函数

-count:统计表中某记录的行数,不统计null所在行

  • sum:计算某属性(列)数据的总和,只适合数值类型
  • avg:计算某属性(列)数据的平均值,只适合数值类型
  • max/min:计算某属性(列)数据的最值,只适合数值类型
  • 注意可剔除重复数据再计算,distinct,如 sum(distinct sale_price)
-- 计算全部数据的行数(包含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;

4. 分组,排序

最重要的是,明白 select 的执行顺序:

FROMWHEREGROUP BYHAVINGSELECTORDER BY

明白这顺序后就可以了解,group by中不能使用select中所命名的别名,因为还没执行到select,电脑还没读取子句中的别名信息。而order by就可以使用别名,因为此时电脑已经执行了select。

举例,查询销售单价( sale_price 列)合计值大于进货单价( purchase_price 列)合计值1.5倍的商品种类,并以销售单价( sale_price 列)为标准作降序排列。

书写顺序如下

select product_type, sum(sale_price) as '销售单价和',sum(purchase_price) 
 from product
 group by product_type
having sum(sale_price) > sum(purchase_price) *1.5 
order by '销售单价和' desc;

按照执行

 from product
 (where)
 group by product_type
having sum(sale_price) > sum(purchase_price) *1.5 
select product_type, sum(sale_price) as '销售单价和',sum(purchase_price) 
order by '销售单价和' desc;

翻译一下:先找到表product,where无内容即无对表数据的过滤筛选的条件,以product_type为统计分组目标,并对分组作出要求:销售单价和 大于 进货单价和,查询中要显示的属性是product_type, sum(sale_price) as ,sum(purchase_price) ,最终显示的项目以’销售单价和’为标准作降序处理。

4.1 分组 group by

举例

SELECT purchase_price, COUNT(*)
  FROM product
 WHERE product_type = '衣服'
 GROUP BY purchase_price;

其中使用having对分组的信息进行筛选,这个功能相当于where,不同的地方在于作用的对象不同。having,分组信息;where,未分组的表数据

4.2 排序 order by

desc 下降,asc 上升

举例

select *  from product
order by regist_date desc,sale_price asc;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值