0基础学SQL-Task02 SQL基础查询与排序(共7节)
本笔记为阿里云天池龙珠计划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节)相关推荐
- 0基础学编程需要哪些基础?
程序员薪酬高.工作环境好,是很多同学向往的职业,让很多非计算机专业的同学羡慕不已.非计算机专业难道就不能成为程序员了吗? 01 学编程需要什么基础? 1.数学基础 从计算机发展和应用的历史来看计算机的 ...
- 【0基础学爬虫】爬虫基础之抓包工具的使用
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶.逆向相关文章,为实现从易到难全方位覆盖,特设[0基础学爬 ...
- 零基础学python-如何零基础开始自学Python编程
转载--原作者:赛门喵 链接:https://www.zhihu.com/question/29138020/answer/141170242 0. 明确目标 我是真正零基础开始学Python的,从一 ...
- 零基础学python实战-零基础学习python_类和对象(36-40课)
今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...
- 零基础学oracle pdf_零基础怎么学手绘插画!
零基础学手绘插画怎么学画插画,想要画好插画需要学习的内容真的很多,学画画的过程从来不是单纯的去学,它涉及到的东西让你完全想不到有多么的广阔无际.例如透视是数学和物理及生理的综合,素描是依靠庞大的训练量 ...
- 零基础学oracle pdf_零基础学动漫插画详细步骤大全
零基础学动漫插画详细步骤大全!学插画动漫大家都去轻微课,轻微课是国内最大的插画动漫在线学习平台,轻微课网站上面有大量的插画动漫视频教程.插画动漫培训课程.插画动漫图文教程.插画动漫摹素材.插画动漫大师 ...
- 零基础学python难_0基础学python有多难
相对于其他编程语言来说,Python并不是很难,入门简单,容易上手,对于零基础的人来说,入门Python是不难的,但是想要学精学通,则要花费一定的时间和精力.Python是主流的编程语言,应用性非常高 ...
- linux需要什么基础,学linux需要什么基础?
近几年来,随着计算机网络的发展,越来越多的人学习 linux.对于想要从事运维工作或者从事智能开发方面的同学来说,学习 linux 是必要的.linux 的学习并不简单,那么这篇文章 w3cschoo ...
- 学python需要什么基础-学Python需要什么基础知识?零基础可以学Python吗?
学Python需要什么基础知识?一般来说,想要学Python最好具备一定的计算机专业知识,尤其是数学和英语不错的话,对学Python也有一定的帮助.但是零基础的学习者就不能学Python了吗?当然不是 ...
- 零基础学python电子书-零基础学Python
准备自学Python朋友,不放来看看<零基础学Python>吧!小编这里为各位送上的是这本书的全彩PDF版,该书从初学者角度出发,通过通俗易懂的语言.流行有趣的实例,详细地介绍了使用IDL ...
最新文章
- 《数学之美》第20章 不要把鸡蛋都放到一个篮子里--谈谈最大熵模型
- 简单好用!利用Spring AOP技术10分钟实现一个读写分离方案
- Windows 下 OpenGL ES 开发环境搭建
- 在进行数据插入数据库操作时,对于id的处理
- 【数论】[CF258C]Little elephant and LCM
- 微软任命LinkedIn高级副总裁为首席技术官
- noj数据结构稀疏矩阵的加法十字链表_数据结构之:图
- 失败 php_PHP+Mysql 实现数据库增删改查
- 2个YUV视频 拼接技术
- JAVA对象,直接新建跟反射新建,有区别
- CMD操作查看电脑IP
- 这样能收录,原理是用的凤凰新闻采集工具
- ElasticSearch常用搜索命令整理(长期更新...)
- C51 (矩阵键盘密码锁)
- tomcat8.5集群修改端口,发生临时 dns 错误,请尝试刷新页面
- MLE, MAP and LSM
- 小程序中使用web-view链接H5网页
- SPSS分析技术:时间序列分析的ARIMA模型;考虑各种促销因素的服装销售额预测
- 成为测试/开发程序员,小张:现实就来了个下马威......
- 菌外膜囊泡包载的阿霉素纳米粒|巨噬细胞膜囊泡包四氧化三铁二氧化硅纳米粒
热门文章
- 欧姆龙NJ 中大型PLC高端型搭载欧姆龙NB触摸屏
- MySQL最大建议行数2000w, 靠谱吗?
- 多玩YY瞄准在线教育
- 读书笔记_打开量化投资的黑箱05
- Ae:时间轴面板(图层控制区)
- oracle财务系统表,Oracle ERP 财务模块表结构.ppt
- 用计算机算加班,加班工资计算器
- netsetman使用教程_人性化的IP切换工具—NetSetMan
- codeblock 添加 .lib 文件
- High-Dimensional Statistics A Non-Asymptotic Viewpoint by Martin J. Wainwright Exercise7.3