zoukankan      html  css  js  c++  java
  • SQL 语句

    基础:

    增:insert into emp(empno, ename, job, mgr, hiredate, sal) values(9999, 'zhangsan', 'MANAGER', NULL, NULL, 200)

    删:delete from emp where comm is null;

    改:update 表名 set 字段名称1=需要修改的值1, 字段名称2=需要修改的值2 where …….

    查:select empno as 员工编号, ename 员工姓名, sal*12 年薪 from emp;

    1. Like中%和下划线的差别?     %匹配任意字符出现任意次数,下划线只匹配一个任意字符出现一次

    2. 查询“%”或者“_” 使用 “@%”escape @ 和 “@_”escape @

    3. mysql 中的 ifnull(sal,0)相当于oralce中的nvl(sal,0),若工资为null,在进行运算的时候,给值0

    4. Count(*)表示取得所有记录,忽略null,有null值也会取得

    5. distinct只能 出现在所有字段前面,后面出现的所有的字段联合去重。

    6. Group by中不能使用聚合函数,如果想对分组数据再进行过滤需要使用having子句

    7. 分组函数的执行顺序:1. 根据条件查询数据 2. 分组 3. 采用having过滤,取得正确的数据,

        原则:可以在where语句中过滤的数据,不要使用having过滤。

    8. SQL语句执行顺序:

        1). 首先执行where语句过滤原始数据

        2). 执行group by进行分组

        3). 执行having对分组数据进行操作

        4). 执行select选出数据

        5). 执行order by排序

    9. Sql92语法和sql99语法的区别:99语法可以做到表的连接和查询条件分离,特别是多个表进行连接的时候,会比sql92更清晰

    10. 左联接和右连接都是外连接,左连接以左面的表为准和右边的表比较,和右面表相等的不相等都会显示出来,右连接恰恰相反,

          以上左连接和右连接也可以加入outer关键字,但一般不建议这种写法

    11. 使用union操作必须保证多个查询结果结合需要具有相同列数

    12. mysql 不支持minus

    13. 取工资最高的前五条记录:

          mysql :select * from emp order by sal limit 5

          oracle : select empno, ename, sal from (select empno, ename, sal from emp order by sal desc) where rownum <=5

    14. 表内容的复制(克隆表只能克隆表的内容,约束无法克隆):

          create table emp_bak as select * from emp;

          create table my_table as select ename,sal from emp;

          以上的语句会自动创建一张表,将所有的数据复制到新表中

    15. 关于事务的回滚需要注意:只能回滚insert、delete和update语句,不能回滚select(回滚select没有任何意义),对于create、drop、alter这些无法回滚

    16. 事务从微观角度讲是不可再分的最小的工作单元。事务从宏观的角度讲是一个完整的不可再分的业务。

    17. 不同数据库增删字段语法不一定相同,例如:

           oracle : alter table t_student drop(contact_tel);

           mysql : alter table t_student drop column contact_tel;

    18. 索引的目的是提高查询数据的速度,索引一本书的目录一样,索引的建立原则,比较少的DML(insert、update、delete),

          经常出现在where语句中的字段,表数据比较庞大。

    19. 如经常根据birthday进行查询,并且遇到了性能瓶颈,首先查看程序是否存算法问题,再考虑对birthday建立索引

    20. 主键建立后,会相应的为主键建立索引,所以根据主键查询,通常比普通字段快

    21. 为什么使用视图?,因为需求决定以上语句需要在多个地方使用,如果频繁的拷贝以上代码,会给维护带来成本,视图可以解决这个问题

          创建视图举例:

           create view v_dept_avg_sal as select a.deptno, a.avg_sal, b.grade from (select deptno, avg(sal) avg_sal from emp group

           by deptno) a, salgrade b where a.avg_sal between b.losal and b.hisal;

    22. 视图的使用和表的使用是一致,但是视图不能进行增删改,因为视图是表的结果,采用视图主要是为了操作的方便性,重复使用的结果集

          考虑建成视图, 如果表的结构可能会频繁发生变化,那么最好设置视图

    23. 序列有两个属性:1). 取得下一个值:seq_name.nextval 2). 取得当前值:seq_name.currval

    24. 创建序列:create sequence my_seq_01 start with 100 minvalue 100 maxvalue 1000 increment by 10 cycle cache 10;

          使用序列:insert into t_student(student_id, student_name, sex, email, classes_id) values(SEQ_STUDENT_ID.nextval, '',

                           '女','zhangsan442@163.net', 10);

          删除序列:drop sequence SEQ_STUDENT_ID;

    25. 存储过程最直接的理解:就是保存了批量的sql(select,insert,if for),以后可以通过一个名字把这些批量的sql执行,使用存储过程在大批量

          数据查询或计算时会带来高性能,存储过程编写和调试比较复杂,不同数据库产品存储过程差异非常大,很难实现平滑移植

    26. 触发器是特殊的存储过程,它与数据库的insert、update和delete相关联,如定义完成触发器之后,会在insert、update或delete语句

          执行前或执行后自动执行触发器中的内容

    27. 三范式总结

          第一范式:有主键,具有原子性,字段不可分割。数据库表中不能出现重复记录,每个字段是原子性的不能再分。

          第二范式:完全依赖,没有部分依赖。第二范式是建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖

          第三范式:没有传递依赖。建立在第二范式基础上的,非主键字段不能传递依赖于主键字段。

          数据库设计尽量遵循三范式,但是还是根据实际情况进行取舍,有时可能会拿冗余换速度,最终目的要满足客户需求。

    28. INSERT INTO  T1 ……   select  *  from  T2  ; 将 T2的数据插入到 T1表中

  • 相关阅读:
    PHP 批量生成静态文件目录代码
    PHP 导出Excel 文档
    Samba Server 配置
    PHP curl超时问题
    php ci 2.0框架 ORM
    YII 的基本CURL操作
    PHP 操作socket 实现简易聊天室
    PHP simplexml_load_string 过滤<![CDATA[XXXX]]>
    PHP 获取当天 凌晨 时间戳常用代码
    2019年值得你使用的20大开发工具
  • 原文地址:https://www.cnblogs.com/Jtianlin/p/4393931.html
Copyright © 2011-2022 走看看