​本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql

本节学习笔记:

1.select语句基础

查询整张表数据

select * from product;

查询表中符合条件数据

select product_name,product_type
from poduct
where product_type='衣服';

注意事项:

  • *代表全部列

  • SQL中可以随意使用换行符,不影响语句执行(但不可插入空行)

  • 设定汉语别名时需要使用双引号(")括起来

  • 在SELECT语句中使用DISTINCT可以删除重复行

  • 注释是SQL语句中用来标识说明或者注意事项的部分。分为1行注释"-- "和多行注释两种"/ **/"

    --想要查询所有列,用*表示
    select * from product;

2.运算符

(1)算数运算符

加法(+)、减法(-)、乘法(*)、除法(/)

(2)比较运算符

等于(=)、不等于(<>、!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)

注意事项:

  • SELECT子句中可以使用常数或者表达式

  • 使用比较运算符时一定要注意不等号和等号的位置

  • 字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆

  • 希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符

(3)逻辑运算符

NOT运算符:不是......(不可单独使用,多用于is或in中)

select product_name,product_type,sale_price
from product
where not sale_price >=1000

AND运算符:并且(交集)

OR运算符:或者(并集)

IN运算符:相当于多个OR(NOT IN 不在这个范围中)

注意事项

括号优先处理

select product_name,product_type,regist_date
from product
where product_type='办公用品'
AND(regist_date='2009-09-11'
OR regist_date='2009-09-20');

真值表-梳理逻辑关系

AND 运算符两侧的真值都为真时返回真,除此之外都返回假

OR 运算符两侧的真值只要有一个不为假就返回真,只有当其两侧的真值都为假时才返回假

NOT运算符只是单纯的将真转换为假,将假转换为真

NULL的真值结果既不为真,也不为假,因为并不知道这样一个值,此时为不确定(三值逻辑)

3.聚合查询

(1)聚合函数

COUNT:记录数(行数)

--包含NULL
select count(*) from product;
--不包含NULL
select count(purchase_price) from product;

SUM:数据合计

select sum(sale_price),sum(purchase_price) from product;

AVG:数据平均值

select avg(sale_price),avg(purchase_price) from product;

MIN:最小值(可为非数值型)

select min(regist_date) from product;

MAX:最大值(可为非数值型)

(2)聚合函数去重

DISTINCT:去重

select count(distinct product_type) from product;

注意事项:

  • COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数

  • 聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL

  • MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列

  • 想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT

  • 在聚合函数的参数中使用DISTINCT,可以删除重复数据

4.分组聚合

(1)GROUP BY分组汇总

--按商品品类统计
select product_type,count(*)
from product
group by product_type;
--不含group by
select product_type,count(*) from product);

GROUP BY 子句中指定的列称为聚合键或者分组列

注意:分组时,NULL作为一组特殊数据进行处理

注意事项:

  • 在聚合函数的SELECT子句中写了聚合健以外的列使用COUNT等聚合函数时,SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名(也就是聚合键)

  • 在GROUP BY子句中使用列的别名 SELECT子句中可以通过AS来指定别名,但在GROUP BY中不能使用别名。因为在DBMS中 ,SELECT子句在GROUP BY子句后执行

  • 在WHERE中使用聚合函数,原因是聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,所以相互矛盾会引发错误。 如果想指定条件,可以在SELECT,HAVING(以及ORDER BY子句中使用聚合函数。

(2)HAVING过滤

对分组进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名(聚合键),用法类似where

select product_type, count(*)
from product
group by product_type
having count(*) = 2;

5.排序

ORDER BY:默认升序,降序加desc

-- 多个排序,前升再后讲
select product_id, product_name, sale_price, purchase_price
from product
order by sale_price,product_id desc;
-- 当用于排序的列名中含有NULL时,NULL会在开头或末尾进行汇总

6.SQL执行顺序

SQL在使用执行顺序为:

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

因此SELECT之前的GROUP BY和HAVING不能使用别名,但ORDER BY 可以。

练习题:

2.1 编写一条SQL语句,从product(商品)表中选取出“登记日期(regist在2009年4月28日之后”的商品,查询结果要包含product_name和regist_date两列。

select product_name,regist_date
from product
where regist_date>'2000-04-28';

2.2 请说出对product 表执行如下3条SELECT语句时的返回结果。

①返回结果:NULL

SELECT *FROM productWHERE purchase_price = NULL;

②返回结果:NULL

SELECT *FROM productWHERE purchase_price <> NULL;

③返回结果:NULL

SELECT *FROM productWHERE product_name > NULL;

2.3 代码清单2-22(2-2节)中的SELECT语句能够从product表中取出“销售单价(saleprice)比进货单价(purchase price)高出500日元以上”的商品。请写出两条可以得到相同结果的SELECT语句。执行结果如下所示。

product_name | sale_price | purchase_price
-------------+------------+------------
T恤衫         |   1000    | 500
运动T恤       |    4000    | 2800
高压锅        |    6800    | 5000
select product_name,sale_price,product_price
from product
where (sale_price-purchase_price)>500;
select product_name,sale_price,product_price
from product
where not (sale_price-purchase_price)<=500;
select product_name,sale_price,product_price
from product
where sale_price>500+purchase_price;

2.4 请写出一条SELECT语句,从product表中选取出满足“销售单价打九折之后利润高于100日元的办公用品和厨房用具”条件的记录。查询结果要包括product_name列、product_type列以及销售单价打九折之后的利润(别名设定为profit)。

select product_name,product_type,(sale_price*0.9-purchase_price) as profit
from product
where (sale_price*0.9-purchase_price)>100
and (product_type='办公用品'
or product_type='厨房用具');

2.5 请指出下述SELECT语句中所有的语法错误。

SELECT product_id, SUM(product_name)
--本SELECT语句中存在错误。
FROM product
GROUP BY product_type
WHERE regist_date > '2009-09-01';

WHERE不可以在GROUP BY 之后使用,在进行分组后过滤应使用HAVING;product_name不能进行sum聚合;product_type字段在select没有体现,前后不一致

--改正后
SELECT product_id,product_name,product_type
FROM product
GROUP BY product_type
HAVING regist_date > '2009-09-01';

2.6 请编写一条SELECT语句,求出销售单价(sale_price列)合计值大于进货单价(purchase_price列)合计值1.5倍的商品种类。执行结果如下所示。

product_type | sum  | sum
-------------+------+------
衣服         | 5000 | 3300
办公用品      |  600 | 320

select语句:

select product_type,sum(sale_price) as sum1,sum(purchase_price) as sum2
from product
group by product_type
having sum(sale_price)>1.5*sum(purchase_price);

2.7 此前我们曾经使用SELECT语句选取出了product(商品)表中的全部记录。当时我们使用了ORDER BY子句来指定排列顺序,但现在已经无法记起当时如何指定的了。请根据下列执行结果,思考ORDER BY子句的内容

SQL语句:

select *
from product
order by regist_date desc,sale_price;

0基础学SQL-Task02 SQL基础查询与排序(共7节)相关推荐

  1. 0基础学编程需要哪些基础?

    程序员薪酬高.工作环境好,是很多同学向往的职业,让很多非计算机专业的同学羡慕不已.非计算机专业难道就不能成为程序员了吗? 01 学编程需要什么基础? 1.数学基础 从计算机发展和应用的历史来看计算机的 ...

  2. 【0基础学爬虫】爬虫基础之抓包工具的使用

    大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶.逆向相关文章,为实现从易到难全方位覆盖,特设[0基础学爬 ...

  3. 零基础学python-如何零基础开始自学Python编程

    转载--原作者:赛门喵 链接:https://www.zhihu.com/question/29138020/answer/141170242 0. 明确目标 我是真正零基础开始学Python的,从一 ...

  4. 零基础学python实战-零基础学习python_类和对象(36-40课)

    今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...

  5. 零基础学oracle pdf_零基础怎么学手绘插画!

    零基础学手绘插画怎么学画插画,想要画好插画需要学习的内容真的很多,学画画的过程从来不是单纯的去学,它涉及到的东西让你完全想不到有多么的广阔无际.例如透视是数学和物理及生理的综合,素描是依靠庞大的训练量 ...

  6. 零基础学oracle pdf_零基础学动漫插画详细步骤大全

    零基础学动漫插画详细步骤大全!学插画动漫大家都去轻微课,轻微课是国内最大的插画动漫在线学习平台,轻微课网站上面有大量的插画动漫视频教程.插画动漫培训课程.插画动漫图文教程.插画动漫摹素材.插画动漫大师 ...

  7. 零基础学python难_0基础学python有多难

    相对于其他编程语言来说,Python并不是很难,入门简单,容易上手,对于零基础的人来说,入门Python是不难的,但是想要学精学通,则要花费一定的时间和精力.Python是主流的编程语言,应用性非常高 ...

  8. linux需要什么基础,学linux需要什么基础?

    近几年来,随着计算机网络的发展,越来越多的人学习 linux.对于想要从事运维工作或者从事智能开发方面的同学来说,学习 linux 是必要的.linux 的学习并不简单,那么这篇文章 w3cschoo ...

  9. 学python需要什么基础-学Python需要什么基础知识?零基础可以学Python吗?

    学Python需要什么基础知识?一般来说,想要学Python最好具备一定的计算机专业知识,尤其是数学和英语不错的话,对学Python也有一定的帮助.但是零基础的学习者就不能学Python了吗?当然不是 ...

  10. 零基础学python电子书-零基础学Python

    准备自学Python朋友,不放来看看<零基础学Python>吧!小编这里为各位送上的是这本书的全彩PDF版,该书从初学者角度出发,通过通俗易懂的语言.流行有趣的实例,详细地介绍了使用IDL ...

最新文章

  1. 《数学之美》第20章 不要把鸡蛋都放到一个篮子里--谈谈最大熵模型
  2. 简单好用!利用Spring AOP技术10分钟实现一个读写分离方案
  3. Windows 下 OpenGL ES 开发环境搭建
  4. 在进行数据插入数据库操作时,对于id的处理
  5. 【数论】[CF258C]Little elephant and LCM
  6. 微软任命LinkedIn高级副总裁为首席技术官
  7. noj数据结构稀疏矩阵的加法十字链表_数据结构之:图
  8. 失败 php_PHP+Mysql 实现数据库增删改查
  9. 2个YUV视频 拼接技术
  10. JAVA对象,直接新建跟反射新建,有区别
  11. CMD操作查看电脑IP
  12. 这样能收录,原理是用的凤凰新闻采集工具
  13. ElasticSearch常用搜索命令整理(长期更新...)
  14. C51 (矩阵键盘密码锁)
  15. tomcat8.5集群修改端口,发生临时 dns 错误,请尝试刷新页面
  16. MLE, MAP and LSM
  17. 小程序中使用web-view链接H5网页
  18. SPSS分析技术:时间序列分析的ARIMA模型;考虑各种促销因素的服装销售额预测
  19. 成为测试/开发程序员,小张:现实就来了个下马威......
  20. 菌外膜囊泡包载的阿霉素纳米粒|巨噬细胞膜囊泡包四氧化三铁二氧化硅纳米粒

热门文章

  1. 欧姆龙NJ 中大型PLC高端型搭载欧姆龙NB触摸屏
  2. MySQL最大建议行数2000w, 靠谱吗?
  3. 多玩YY瞄准在线教育
  4. 读书笔记_打开量化投资的黑箱05
  5. Ae:时间轴面板(图层控制区)
  6. oracle财务系统表,Oracle ERP 财务模块表结构.ppt
  7. 用计算机算加班,加班工资计算器
  8. netsetman使用教程_人性化的IP切换工具—NetSetMan
  9. codeblock 添加 .lib 文件
  10. High-Dimensional Statistics A Non-Asymptotic Viewpoint by Martin J. Wainwright Exercise7.3