zoukankan      html  css  js  c++  java
  • 读书笔记之SQL必知必会

    1、主键的条件
    表中的任何列都可以作为主键,只要它满足以下条件:

    任意两行都不具有相同的主键值;
    每一行都必须具有一个主键值(主键列不允许NULL值);
    主键列中的值不允许修改或更新;
    主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)

    sql语句一般返回原始的、无格式的数据。数据的格式化是表示问题,而不是检索问题。

    检索出的数据并不是随机显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。但是,如果数据随后进行过更新或删除,那么这个顺序会受到DBMS重用回收存储空间方式的影响。因此,如果不明确控制的话,则最终的结果不能也不应该依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定家所处的数据的顺序有任何意义。

    distinct关键字必须直接放在列名的前面,作用于所有的列,不仅仅是跟在其后的那一列,distinct保证的行级别的一致,而不是一列
    如果想要对一列的数据去重,distinct关键字后面只能跟一个列名。

    通常,order by子句中使用的列将是为显示而选择的列,用非检索列排序数据也是完全合法的。
    order by 按多列排序,在前面的列不唯一的前提下,才对后面的列进行排序。
    order by子句,可按多列排序
    DESC降序排序,只应用在直接位于其前面的列名

    NULL与非匹配
    通过过滤选择不包含指定值的所有行时,不会返回含有NULL值的行。过滤数据时,一定要验证被过滤行踪含NULL的行确实出现在返回的数据中。

    检索过滤
    where子句中 默认顺序,AND操作符的优先级比OR高,应当使用小括号对操作符进行明确分组。
    IN 关键字功能类似于OR,比OR效率高
    NOT 用来否定其后面的关键字

    通配符
    LIKE是谓词,不是操作符。
    区分大小写需要看DBMS的配置
    % 百分号任意字符出现任意次数,不可以匹配NULL
    _ 下划线匹配单个字符,只能匹配1个
    [] 方括号通配符表示字符集,匹配一个字符,只有access与sqlserver支持,可用^来取反 [^AB]

    通配符效率较低。

    拼接字段

    || 连接
    RTRIM()去除字符串右边空格 LTRIM()左边 TRIM()两边
    AS 别名

    聚集函数
    AVG()返回某列的平均值,忽略列值为NULL的行
    COUNT()返回某列的行数,不在乎列的值
    MAX()返回某列的最大值,忽略列值为NULL的行
    MIN()返回某列的最小值,忽略列值为NULL的行
    SUM()返回某列的值之和,忽略列值为NULL的行


    分组
    group by 后可以跟任意数目的列,不能是聚集函数,NULL也是一个分组
    一般要与聚集函数联合使用

    WHERE过滤行,HAVING过滤分组
    where在数据分组前进行过滤,having在数据分组后进行过滤
    HAVING与GROUP BY组合使用

    SELECT子句顺序

    select 要返回的列或表达式
    from 从中检索数据的表
    where 行级过滤
    group by 分组说明,仅在改组计算聚集时使用
    having 组级过滤
    order by 对输出结果排序

    子查询
    作为子查询的select语句只能查询单个列,企图检索多个列将返回错误
    select语句中操作多个表,应使用完全限定列名来避免歧义。

    连接表JOIN

    内连接 INNER JOIN……ON,等值连接,两个表的相等测试
    自联结 同一张表多次使用
    自然连接 返回的结果中列只出现一次,手动选择select的列
    外联结 LEFT OUTTER JOIN ,RIGHT OUTTER JOIN, FULL OUTTER JOIN,以那边的表为基表,保留哪边表的数据

    组合查询
    UNION允许执行多个查询,与where子句能达到的效果相同
    UNION中的每个查询必须包含相同的列、表达式或聚集函数,次序没要求,数据类型不必完全相同,但是必须能兼容
    UNION有自动去重的功能
    UNION ALL 不去重,不取消重复的行
    不允许使用多个ORDER BY,只能在最后使用


    INSERT
    表数据复制 select * into A from B;

    delete from 而不是delect * from

    delete删除整行,删除列可以用 update set null操作

    视图
    create view as select 。。。

    存储过程

    我要把所有的坑都趟平!
  • 相关阅读:
    vmware linux虚拟机连接ip设置
    java图片转byte转string
    javaScript传递参数,参数变化问题
    path和classpath的区别
    本地jar在打包时打入到项目中去
    使用集合来排序
    Unity 学习笔记2
    Unity 学习笔记
    unity3d 基础知识点
    Unity3D中的多线程及使用多线程
  • 原文地址:https://www.cnblogs.com/loveling-0239/p/7264210.html
Copyright © 2011-2022 走看看