SQL基础知识点总结(一)

1. order by 默认是升序

2. count(*) count(字段)两者的区别就在于count函数不统计null

3. 通配符过滤使用LIKE关键字是一个二元操作符,左表达式为待匹配字段,右表达式为待匹配的通配符表达式表达式由通配符和普通字符组成

   (1)单字符匹配:_  单字符匹配在通配符表达式中可以出现多次 如: __b_d

   (2)多字符匹配:%  匹配任意次数(零或任意)

                              (_与%可以配合使用)

   (3)集合匹配:[] 方括号中包含一个字符集,匹配与字符集中任意一个字符相匹配的字符

                         '^':否定符来读集合取反 例: [^bt]%

                         集合匹配只适用于SqlServer,其他数据库可通过变通实现

   总结:   通配符过滤很强大,不过在检索数据是会进行全表扫描,所以速度非常慢,因此不要过分使用通配符过滤,在使用其他方式可以实现效果的时候就应该避免通配符过滤

4.空值检测使用 IS NULL 关键字  语法: "待检测字段 IS NULL" 不为空则使用IS NOT NULL 语法: "待检测字段 IS NOT NULL"

5.反义运算符 != 不等于 !< 不小于 !> 不大于 不过只支持SQLserver和DB2

  对应

  同义运算符 比如 "不大于"的同义词是"小于等于" 而"不小于"的同义词是"大于等于"同时SQL提供了通用的表示“不等于”的运算符“<>”,这样“不等于”、“不大于”和“不     小于”就分别可以表示成“<>”、“<=”和“>=”

6.not 运算符用来将一个表达式的值取反 真=>假 假=>真 使用方式: not(表达式)

    PS:       使用“!”运算符的方式由于只能运行在SQLServer和DB2两种数据库系统上,所以如果应用程序有移植到其他数据库系统上的需求的话,就应该避免使用这种方式;               使用同义运算符的方式能够运行在所有主流数据库系统上,不过由于粗心等原因,很容易将“不大于”表示成“<”,而忘记了“不大于”是包含“小于”和“等于”这两个意思的,这            样就会造成检索数据的错误,造成应用程序的Bug;而采用NOT运算符的方式能比较容易的表达要实现的需求,而且能够实现复杂的嵌套,最重要的是避免了潜在的应用            程序的Bug,所以除了“<>”这种方式之外,所以推荐使用NOT运算符的方式来表示“非”的语义。

7.(1)多值检测使用 in

  (2)范围检测使用 between and 用来检测一个值是否处于某个范围中(包括范围的边界值,也就是闭区间)。使用方法如下“字段名BETTWEEN 左范围值AND 右范围值”,

    PS:     数据库系统对“BETTWEEN AND”进行了查询优化,使用它进行范围值检测将会得到比其他方式更好的性能,因此在进行范围值检测的时候应该优先使“BETTWEEN               AND”。需要注意的就是“BETTWEEN AND”在进行检测的时候是包括了范围的边界值的(也就是闭区间),如果需要进行开区间或者半开半闭区间的范围值检测的话就必            须使用其他的解决方案了

8.         where 1=1 一般用来动态拼接sql,这样很可能会造成非常大的性能损失,因为使用添加了“1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将        被迫对每行数据进行扫描(也就是全表扫描)以比较此行是否满足过滤条件,当表中数据量比较大的时候查询速度会非常慢。因此如果数据检索对性能有比较高的要求就不       要使用这种“简便”的方式。

9. GROUP BY

    (1)        数据分组 group by 常常伴随聚合函数一起使用,gorup by子句负责将数据分成逻辑组,聚合还是这对每一个组进行统计计算,需要分组的所有列必须位于group by子句的          列名列表中没有出现在group by子句中的列(聚合函数除外)是不能放到select语句后的列名列表中的group by子句可以指定多个列,用逗号隔开即可,系统会按照分组顺序来逐         层分组,实现组中组的效果

    (2)        having语句用于对分组进行过滤, 聚合函数不能在where语句中使用,必须使用having子句来代替

                having语句也可以像where语句一样使用复杂的过滤条件,特别注意having语句中不能包含未分组的列名

10.  row_number()函数可以计算每一行数据在结果集中的行号(从1开始计数) 语法: row_number() over(排序规则)

       开窗函数只能出现在 select 或 order by 子句中

11.  抑制重复数据: distinct  所有数据库都支持的关键字

                              distinct是对整个数据集进行数据重复抑制的,而不是针对每一个

12.  数据处理函数

       (1)计算字符串长度的函数   LEN() MSSQL    LENGTH() MYSQL,Oracle,DB2

       (2)取得字符串的子串的函数 SUBSTRING(1,2,3) MSSQL MYSQL  SUBSTR(1,2,3) Oracle DB2 第一个参数为要取的主字符串 第二个参数为字串的起始位置 第三参数为字              串的长度

       PS:多个函数可以嵌套使用

       (3)SIN() 正弦函数 ABS() 绝对值函数

       (4)       字符串拼接函数 CONCAT() 支持一个或者多个参数 MSSQL与MYSQL不同 MSSQL可以直接使用"+"来拼接字符串,Oracle使用"||"进行字符串拼接使用方式和MSSQL             中的"+"一样,也支持CONCAT()函数,但是只支持两个参数,不支持两个以上字符串的拼接,进行多个字符串拼接时可以使用函数嵌套 

13.  计算字段的用途:不仅能在SELECT中使用计算字段可以在进行数据过滤,删除,更新的时候使用计算字段

14.  联合结果集:UNION可以连接多个结果集,就像"+"可以连接多个数字一样简单,只要在每个结果集之间加入UNION即可

       联合结果集的原则:

      不必受被联合的多个结果集之间的关系限制,使用UNION有两个基本原则要遵守:

      (1)每个结果集必须有相同的列数

      (2)每个结果集的列必须类型相容

      UNION和UNION ALL的区别:

      UNION 会将完全重复的数据合并为一条,如果联合结果集中返回所有数据而不管他们是否唯一,可以使用UNION ALL联合结果集在制作报表的时候经常用到

15.  函数部分

       日期时间函数:  数据库中的日期时间数据类型分为日期,时间,日期时间以及时间戳四种类型

                                  1.日期类型用来表示"年-月-日"信息的数据类型,精确到"日" 一般用Date来表示日期类型

                                  2.时间类型用来表示"小时:分:秒"信息的数据类型,精确到"秒"一般用Time表示时间类型

                                  3.日期时间类型用来表示"年-月-日 小时:分:秒"信息的数据类型,精确到秒,一般用DateTime来表示日期时间类型

                                  4.时间戳类型一般用TimeStamp来表示

         PS:    不同的数据库系统对日期、时间、日期时间与时间戳等数据类型的支持差异性非常大,有的数据类型在有的数据库系统中不被支持,而有的数据类型的表示精度则                和其类型名称所暗示的精度不同,比如MSSQLServer 中不支持Time 类型、Oracle 中的Date 类型中包含时间信息。数据库中的日期时间函数对这些类型的支持差别是               非常小的,因此在一般情况下我们将这些类型统一称为“日期时间类型”

        GETDATE() 获取当前日期时间的函数

        DATEADD() 用于进行日期时间的加法运算  DATEADD (datepart , number, date )

                             datepart取值: year(年份) quarter(季度) month(月份) dayofyear(当年度的第几天) day(日) week(当年度的第几天) weekday(星期几) hour(小时) minute(分)                               second(秒) millisecond(毫秒)

       Oracle可以通过"+,-"来对时间进行赋值

        DATEDIFF(datepart,startdate,enddate)  计算日期差额  datepart为计算差额使用的单位

        DATENAME(datepart,date) 计算一个日期是星期几 datepart:要返回的日期部分的参数   如果使用Weekday(或者使用别名dw)做为datepart参数调用DATENAME()函数                                                                                           就可以得到一个日期是星期几

        DATEPART(DATEPART,date) 返回一个日期的特定部分

        PS:      DATEPART()函数和DATENAME()函数完全一样,不过其实它们并不是只是名称不同的别名函数,虽然都是用来提取日期的特定部分的,不过DATEPART()函数的                返回值是数字而DATENAME()函数则会将尽可能的以名称的方式做为返回值

16.  类型转换

       MSSQLServer提供了名称为CASE()和CONVERT()两个函数用于进行类型转换

      参数格式 :CAST(expression AS data_type)和CONVERT(data_type,expression)

17.  空值处理

       COALESCE()函数,这个函数主要用来进行空值处理, 格式: COALESCE ( expression,value1,value2……,valuen)

       PS:      COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。COALESCE()函数将会返回包括expression在内的所有参数中的第一个非                空表达式。如果expression不为空值则返回expression;否则判断value1是否是空值,如果value1不为空值则返回value1;否则判断value2是否是空值,如果value2不                 为空值则返回value3;……以此类推,如果所有的表达式都为空值,则返回NULL

       COALESCE()函数的简化版: ISNULL()  只接受两个变量  格式: ISNULL(expression,value)

       NULLIF()函数  格式: NULLIF ( expression1 , expression2 )

       PS:      如果两个表达式不等价,则 NULLIF 返回第一个 expression1的值。如果两个表达式等价,则 NULLIF 返回第一个 expression1类型的空值。也就是返回类型与第                 一 个 expression 相同。

18.  流程控制函数

       CASE用法: case when then else end 和switch语句非常类似,在制作报表的时候非常有用

19.  开窗函数

       开窗函数在聚合函数后增加了一个OVER关键字  格式:函数名(列)OVER(选项)

原文地址:https://www.cnblogs.com/zcc0912/p/11976423.html