SQL基础查询与排行

一.SELECT语句基础

SELECT语句
SELECT <列名>, FROM <表名>;

SELECT子句中列举了希望从表中查询出的列的名称,而FROM子句则指定了选取出数据的表的名称。

WHERE语句

当不需要取出全部数据,而是选取出满足“商品种类为衣服”“销售单价在1000日元以上”等某些条件的数据时,使用WHERE语句

SELECT <列名>, …… FROM <表名> WHERE <条件表达式>;

比较这两个语句输出的不同指出

-- 用来选取product type列为衣服’的记录的SELECT语句

SELECT product_name, product_type

FROM product

WHERE product_type = '衣服';

-- 也可以选取出不是查询条件的列(条件列与输出列不同)

SELECT product_name

FROM product

WHERE product_type = '衣服';

相关法则^^*

1.星号(*)代表全部列的意思。

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

3.设定汉语别名是需要双引号('')括起来。

4.在SELECT语句中使用DISTINCT可以删除重复行。

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

二.算术运算符和比较运算符

算术运算符:+  加,-  减法,* 乘法,/ 除法。

比较运算符:

<> 和~不相等
>= 大于等于~
> 大于~
<= 小于等于~
< 小于~

常用法则

1.SELECT子句子可以使用常数或者表达式。

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

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

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

三.逻辑运算符

NOT运算符

想要表示“不是……”时,除了前文的<>运算符外,还存在另外一个表示否定、使用范围更广的运算符:NOT。

NOT不能单独使用

例如

-- 选取出销售单价大于等于1000日元的记录

SELECT product_name, product_type, sale_price

FROM product

WHERE sale_price >= 1000;

-- 向代码清单2-30的查询条件中添加NOT运算符

SELECT product_name, product_type, sale_price

FROM product

WHERE NOT sale_price >= 1000;

AND运算符和OR运算符

当希望同时使用多个查询条件时,可以使用AND或者OR运算符。

AND 相当于“并且”,类似数学中的取交集;

OR 相当于“或者”,类似数学中的取并集。

如下图所示:

AND运算符工作效果图

OR运算符工作效果图

可以通过括号优先处理

真值表

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

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

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

含有NULL时的真值

四.对表进行聚合查询

SQL中用与汇总的函数叫做聚合函数的。下面五个时常用的聚合函数:

1.COUNT:计算表中的记录数(行数)

2.SUM:计算表中数值列中数据的合计值

3.AVG:计算表中数值列中数据的平均值

4.MAX:求出表中任意列中数据的最大值

5.MIN:求出表中任意列中数据的最小值

使用聚合函数删除重复值

-- 计算去除重复数据后的数据行数

SELECT COUNT(DISTINCT product_type)

FROM product;

-- 是否使用DISTINCT时的动作差异(SUM函数)

SELECT SUM(sale_price), SUM(DISTINCT sale_price)

FROM product;

常用法则

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

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

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

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

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

五.对表进行分组

GROUP BY语句

进行分组汇总时使用

SELECT <列名1>,<列名2>, <列名3>,......,

FROM <表名>

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

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

GROUP BY书写位置

GROUP BY的子句书写顺序有严格要求,不按要求会导致SQL无法正常执行,目前出现过的子句书写****顺序为:

1**.**SELECT → 2. FROM → 3. WHERE → 4. GROUP BY

其中前三项用于筛选数据,GROUP BY对筛选出的数据进行处理

常见错误

在使用聚合函数及GROUP BY子句时,经常出现的错误有:

  1. 在聚合函数的SELECT子句中写了聚合健以外的列 使用COUNT等聚合函数时,SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名(也就是聚合键)。
  2. 在GROUP BY子句中使用列的别名 SELECT子句中可以通过AS来指定别名,但在GROUP BY中不能使用别名。因为在DBMS中 ,SELECT子句在GROUP BY子句后执行。
  3. 在WHERE中使用聚合函数 原因是聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,所以相互矛盾会引发错误。 如果想指定条件,可以在SELECT,HAVING(下面马上会讲)以及ORDER BY子句中使用聚合函数。

六.为聚合结果指定条件

1.用HAVING得到特定分组

这里WHERE不可行,因为,WHERE子句只能指定记录(行)的条件,而不能用来指定组的条件(例如,“数据行数为 2 行”或者“平均值为 500”等)。

可以在GROUP BY后使用HAVING子句。

HAVING的用法类似WHERE

2.HAVING特点

HAVING子句用于对分组进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名(聚合键)。

七.对查询结果进行排序

1.ORDER BY

SQL中的执行结果是随机排列的,当需要按照特定顺序排序时,可已使用ORDER BY子句

默认为升序排列,降序排列为DESC

2.ORDER BY中列名可使用别名

前文讲GROUP BY中提到,GROUP BY 子句中不能使用SELECT 子句中定义的别名,但是在 ORDER BY 子句中却可以使用别名。为什么在GROUP BY中不可以而在ORDER BY中可以呢?

这是因为SQL在使用 HAVING 子句时 SELECT 语句的执行****顺序为:

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

其中SELECT的执行顺序在 GROUP BY 子句之后,ORDER BY 子句之前。也就是说,当在ORDER BY中使用别名时,已经知道了SELECT设置的别名存在,但是在GROUP BY中使用别名时还不知道别名的存在,所以ORDER BY中可以使用别名,但是在GROUP BY中不能使用别名****。

总结

我觉得每个部分讲的挺细致的,很通透,看第一遍时看不懂,多看几遍就能很好理解,把我上课没听懂的内容讲透了,很好的一篇文章。

本笔记为阿里云天池龙珠计划SQL训练营的学习内容 task 2相关推荐

  1. 本笔记为阿里云天池龙珠计划SQL训练营的学习内容 TASK 6

    下载相关创建表格和插入数据脚本 大家下载好脚本后,先在MySQL环境中运行create_table.sql脚本,创建数据表,然后解压下载好的data.zip,解压后目录如下: 8-10ccf_offl ...

  2. 本笔记为阿里云天池龙珠计划SQL训练营的学习内容 TASK 5

    一.窗口函数 概念:窗口函数也称为OLPA函数.OLAP 是OnLine AnalyticalProcessing 的简称,意思是对数据库数据进行实时分析处理. 语法:<窗口函数> OVE ...

  3. 本笔记为阿里云天池龙珠计划SQL训练营的学习内容 TASK 4

    一.表的加减法 表的加法-UNION UNION:UNION等集合运算符通常都会出去重复的的记录 UNION与OR谓词: 对于上边的练习题, 如果你已经正确地写出来查询, 你会发现, 使用 UNION ...

  4. 本笔记为阿里云天池龙珠计划SQL训练营的学习内容task 3

    复杂查询方法-视图.子查询.函数等 一.视图 视图是一个虚拟的表,不同于直接操作数据表,视图是依据SELECT语句来创建的(会在下面具体介绍),所以操作视图时会根据创建视图的SELECT语句生成一张虚 ...

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

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

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

    Task03:复杂查询方法-视图.子查询.函数等 3.1 视图 3.1.1 什么是视图 3.1.2 视图与表有什么区别 3.1.3 为什么会存在视图 3.1.4 如何创建视图 3.1.5 如何修改视图 ...

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

    一. 谓词 1.1 什么是谓词 谓词就是返回值为真值的函数.包括TRUE / FALSE / UNKNOWN. 谓词主要有以下几个: LIKE BETWEEN IS NULL.IS NOT NULL ...

  8. 本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql;Task4:集合运算-JOIN

    一. 连结(JOIN) 前一节我们学习了 UNION和INTERSECT 等集合运算, 这些集合运算的特征就是以行方向为单位进行操作. 通俗地说, 就是进行这些集合运算时, 会导致记录行数的增减. 使 ...

  9. 本笔记为阿里云天池龙珠计划SQL训练营的学习内容1

    第一个任务,DBMS有五个类型,本次课程学习的是关系数据库管理系统的的操作方法.SQL课程以DML为中心讲解.SQL有基本的书写法则,数据库的创建语法为:CREATE DATABASE<数据库名 ...

最新文章

  1. matlab2018无法使用qcat,解决Matlab 2018a源代码的中文支持问题
  2. 从人的角度分析进销存管理的需求
  3. php压制错误的代码,为什么要压制PHP错误?
  4. Android4.0 以后不允许在主线程进行网络连接
  5. Ralink5350开发环境搭建
  6. AOP和Spring AOP介绍
  7. GIT版本管理异常总结001---copssh安装后登录异常The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
  8. centos下eclipse的安装
  9. QQ自动登录 发消息给某人C++/C
  10. AxureShare太慢?尝试在内网架设Axure共享吧!
  11. SPSS干货:区分T检验与F检验
  12. 自制XILINX FPGA JTAG下载器
  13. Airdrop式社交:富友,你的airdrop没关
  14. Java选择题考试系统
  15. C语言牛客网(NowCoder)刷题篇
  16. Qt一条令人费解的错误
  17. JAVA网络编程知识学习
  18. 并口串口接口定义(LPT COM Interface)
  19. 目标检测到目标跟踪 -- Faster R-CNN 观测器
  20. 基于ZebraPrinter 的ZPL 命令 --Android篇

热门文章

  1. Word2016无法撤销解决方案-有效
  2. 服务器系统c盘只能压缩一半,关于操作系统分区只能压缩出一半的问题
  3. kernel learning for extrinsic classification of manifold features+CVPR13
  4. 吴恩达深度学习 | (12) 改善深层神经网络专项课程第三周学习笔记
  5. 年薪30万!看美和易思学子如何一路升级通关!
  6. 2021年 专插本考生 5万字精心整理 计算机基础与数据结构 笔记 建议直接收藏
  7. mysql proxies priv_Mysql 5.7.18 运用MySQL proxies_priv完成类似用户组管理案例分享
  8. 删除U盘文件显示 无法删除:目录不为空 解决办法
  9. CodeForces 670D Magic Powder
  10. 康拓123发卡软件使用