查询基础

2.2 算数运算符和比较运算符

2.2.1算数运算符

+ - * /

需要注意NULL

  • 5 + NULL
  • 10 - NULL
  • 1 * NULL
  • 4 / NULL
  • NULL / 9
  • NULL / 0
    以上运算结果全都是NULL,实际上所有包含NULL的运算,结果肯定是NULL。

2.2.2比较运算符

1.

运算符 含义
= 和~相等
<> 和~不相等
>= 大于等于~
> 大于~
< 小于~
<= 小于等于~

2.对字符串使用不等号时的注意事项
字符串类型的数据原则上按照字典进行排序
例如:
11 > 2
但是 '11'<'2'
3.不能对NULL使用比较运算符
希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符;希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL 运算符。

2.2.3逻辑运算符

1.SQL中的逻辑运算包含对真、假和不确定进行运算的三值逻辑。

运算符 含义
NOT 否定某一条件
AND 并且
OR

2.AND优先级高于OR,优先执行OR可以使用括号。
3.三值逻辑中的AND和OR真值表
AND

P Q P AND Q
不确定 不确定
不确定
不确定 不确定
不确定
不确定 不确定 不确定

OR

P Q P OR Q
不确定
不确定 不确定
不确定
不确定 不确定
不确定 不确定 不确定

3.聚合与排序

3.1 对表进行聚合查询

1.聚合函数(集合函数):计算之前已经将NULL排除在外。

函数 含义
COUNT 计算表中的记录数(行数)
SUM 计算表中数值列中数据的合计值
AVG 计算表中数值列中数据的平均值
MAX 求出表中任意列中数据的最大值
MIN 求出表中任意列中数据的最小值

2.COUNT函数的结果根据参数的不同而不同
COUNT(*)包含NULL的数据行数
COUNT(<列名>)NULL之外的数据行数
3.
MAX/MIN函数几乎适用于所有数据类型的列
SUM/AVG只适用于数值类型的列
4.使用聚合函数删除重复值
COUNT( DISTINCT *)

3.2对表进行分组

1.GROUP BY子句

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

FROM <表明>

GROUP BY <列名1>,<列名2>,<列名3>,...;
聚合键中包含NULL时,在结果中会以"不确定"行(空行)的形式表现出来。
2.与聚合函数和GROUP BY子句有关的常见错误
常见错误①——在SELECT子句中书写了多余的列(MYSQL 支持)
使用聚合函数时,SELECT子句只能存在以下三种元素

  • 常数
  • 聚合函数
  • GROUP BY 子句指定的列名(也就是聚合键)

常见错误②——在GROUP BY子句中写了列的别名
下列语句会发生执行错误:
SELECT product_type AS pt,count(*)
FROM product
GROUP BY pt;
这是因为SQL在DBMS中的执行顺序造成的——SELECT子句在GROUP BY子句之后执行。

常见错误③——GROUP BY子句结果能排序吗
GROUP BY 子句结果的显示是无序的。

常见错误④——在WHERE子句中使用聚合函数
只有SELECT子句和HAVING子句(以及ORDER BY子句)中能够使用聚合函数。

3.3为聚合结果指定条件

1.HAVING子句为集合(组)指定条件。
HAVING可以使用3中要素:
常数
聚合函数
GROUP BY子句中指定的列名(聚合键)

2.相对于HAVING子句,更适合写在WHERE 子句中的条件
聚合键所对应的条件不应写在HAVING子句当中,而应写在WHERE子句中。
原因:
①:WHERE子句 = 指定行所对应的条件;
HAVING子句 = 指定组所对应的条件
②:WHERE执行速度快,使用COUNT函数等对表中数据进行聚合操作时,DBMS内部会进行排序处理,尽可能减少排序的行数,才能增加处理速度。WHERE在排序前过滤,减少了排序行数。HAVING在排序之后进行过滤。

3.4 对查询结果进行排序

1.使用ORDER BY对查询结果进行排序。
2.在ORDER BY 子句中列名的后面使用关键字ASC 可以进行升序排序;使用DESC关键字可以进行降序排序。
3.ORDER BY子句中可以使用多个排序键。
4.排序键包含NULL时,会在开头或末尾进行汇总。
5.在ORDER BY子句中可以使用SELECT子句中定义的别名。这是因为SELECT的执行顺序:
FROM——>WHERE——>GROUP BY ——>HAVING ——>SELECT ——>ORDER BY
6.在ORDER BY子句中可以使用SELECT子句中未使用的列和聚合函数。

SQL基础教程读书笔记-1的更多相关文章

  1. SQL基础教程读书笔记-2

    4 数据更新 4.1数据的插入 1.清单{①列清单 ②值清单列清单和值清单的数量必须保持一致.原则上,执行一次INSERT语句会插入一行数据对表进行全列INSERT时,可以省略表名后的列清单2.插入默 ...

  2. SQL基础教程读书笔记-3

    5 复杂查询 5.1 视图 1.表和视图的区别表:保存的是实际的数据视图:保存的是SELECT语句.从视图读取数据时,视图会在内部执行该SELECT语句并创建出一张临时表. 2.视图的优点① 无需保存 ...

  3. SQL Server2012 T-SQL基础教程--读书笔记(1-4章)

    SQL Server2012 T-SQL基础教程--读书笔记(1-4章) SqlServer T-SQL 示例数据库:点我 Chapter 01 T-SQL 查询和编程背景 1.3 创建表和定义数据的 ...

  4. SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章)

    SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章) 示例数据库:点我 CHAPTER 08 数据修改 8.1 插入数据 8.1.1 INSERT VALUES 语句 8.1 ...

  5. SQL Server2012 T-SQL基础教程--读书笔记(5-7章)

    SQL Server2012 T-SQL基础教程--读书笔记(5-7章) SqlServer T-SQL 示例数据库:点我 Chapter 05 表表达式 5.1 派生表 5.1.1 分配列别名 5. ...

  6. 【索引】Objective-C基础教程-读书笔记

    第1章 启程 http://www.cnblogs.com/duxiuxing/p/5492219.html 第2章 对C的扩展 第3章  面向对象编程的基础知识 第4章 继承 第5章 复合 第6章 ...

  7. 《Python基础教程读书笔记》

    第1章 快速构造:基础知识 1.2交互式构造器 不强制分号,一行就是一行.可以加上分号 1.4数字和表达式 加.减.乘.除.整除.求余.指数.取反(-例如-2**2,**的优先级比-大) from _ ...

  8. 【Objective-C基础教程-读书笔记】第1章 启程

    在第1章里面,作者主要以一种站在世界中心呼唤爱的姿态,给读者们打打鸡血洗洗脑,鼓励大家,投入时间学习Objective-C,值得啊! 首先,Objective-C既能用来开发OS X平台上的APP,又 ...

  9. Objective-C基础教程读书笔记(6)

    第6章 源文件组织 到目前为止,我们讨论过的所有项目都是把源代码统统放入main.m文件中.类的main()函数,@interface和@implementation部分都被塞入同一个文件里.这种结构 ...

随机推荐

  1. Boolean 相关

    Boolean(something) 会把里面的变量转化为布尔型   当我们用if(something)判断的时候,相当于调用了这个函数   转化规则如下 DATA TYPE VALUES CONVE ...

  2. 让普通 Java 类自动感知 Activity Lifecycle

    背景 在 Android 开发中,我们都很熟悉 Activity 的 Lifecycle,并且会在特定的 Lifecycle 下执行特定的操作.当然,我们清楚 Lifecycle 本身是带有 Andr ...

  3. Input类型是checkbox时checked属性获取

    记录一下checkbox 的 checked 属性的获取办法,以备忘记: 假如你的一个HTML页中有这么一段代码: <input name="chbRem" id=" ...

  4. Spring面试题目

    问题清单: 1. 什么是Spring框架?Spring框架有哪些主要模块? 2. 使用Spring框架有什么好处? 3. 什么是控制反转(IOC)?什么是依赖注入? 4. 请解释下Spring中的IO ...

  5. maven项目打包运行出错问题汇总

    maven项目打包时总会出现莫名其妙的错误,现总结一下. 打包方式:在maven项目底下运行cmd,输入mvn clean package,会自动按pom.xml的配置打成包.使用java -jar ...

  6. Python之程序执行时间计算

    import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.now() ...

  7. Django 入门案例开发(下)——创建项目应用及模型类

    前面两章是在已经开发好的项目上用来描述环境和业务,这一章创建一个全新的项目来用作开发,你可以跟着我的步骤进行开发,如果有不理解的地方可以给我留言. 今天的任务是创建好项目和用户(users)应用及让它 ...

  8. AutoCAD.net支持后台线程-Socket服务端

    最近因为公司项目的需求,CAD作为服务端在服务器中常驻运行,等待客户端远程发送执行任务的指令,最终确认用Socket-tcp通讯,CAD需要实时监听客户端发送的消息,这时就需要开启线程执行Socket ...

  9. kafka 集群搭建

    环境:ubuntu14.04 版本:jdk1.8,zookeeper 3.4.10,kafka 2.11 搭建步骤: 1. 搭建zookeeper集群 参考链接:zookeeper集群搭建 2. 下载 ...

  10. A:分段函数-poj

    A:分段函数 总时间限制:  1000ms 内存限制:  65536kB 描述 编写程序,计算下列分段函数y=f(x)的值. y=-x+2.5; 0 <= x < 5 y=2-1.5(x- ...