首页 > 数据库技术 > 详细

2018/07/26 《SQL 必知必会》 学习笔记

时间:2018-08-04 16:56:23      阅读:118      评论:0      收藏:0      [点我收藏+]

读书总结:

  《SQL 必知必会》是我系统学习数据库的第一本书。

  主要讲解了 常用的 SQL 语句写法和一些基本的注意点。

  并不涉及一些比较深入的知识点。

  作为初学或者是系统学习的查漏补缺我觉得还时不错的。

 

1:DISTINCT 用于去重,但是需要注意的是,它是用于所有列的,也就是说,除非指定的列全部相同,否则所有的行都会被检索出来。


2:ORDER BY 用于排序,但是应该注意的是,它因该是 SELECT 语句中出现的最后一条字句,如果不是,则报错。

 

3:在 WHERE 字句中出现多个 AND 和 OR 时候应该特别注意,因为和大多数语言一样,因为优先级不同(AND更大),所以在使用中 应该使用 ()来包住你需要的筛选条件。

 

4:IN 可以使用 WHERE / OR 实现,但是最大的不同是,IN 中可以包含 WHERE 字句

 

5:当使用 AS 重新命名之后,必须使用命名之后的名称。

SELECT `user.name` FROM `name` AS n;  // 报错,没有此字段
SELECT `n.name` FROM `name` AS n; // 正常,包括 WHERE 字句中也是如此 

 

6:WHERE 和 HAVING 的区别

  - HAVING 的删选条件只能是之前已经筛选出来的字段

  - WHERE  的使用是表中具体存在的字段

    - 例如

    1:having 和 where 都可以使用
    select
id,name form user where id = 1; // 正常
    select id,name form user having id = 1; // 正常,因为having的字段是之前已经 select 的字段
  
    2:只有where可以使用
    select name form user having id = 1; // 报错,因为having的字段并没有select出来

    3:只有having可以使用
    group by 字句后面
    聚合函数只有having能用

    select count(*) as count from users where count > 0 group by id; // 错误,count并不是表字段,而是算出来的值,where不认识
    select count(*) as count from users group by id where count > 0 ; // 正确

  - 总结来说

    where 可以使用的,是表里的具体字段,而聚合函数count(`field`)/avg(`field`)等等,它们算出来的都不是表里的字段,当然不能使用。

    而 having 的过滤条件是之前已经检索出来的数据。

 

7:当启动事务的时候,两条语句是相互不影响的

  - 比如在终端 A / B 中,启动了同样的一个事务。

    - 在 A 中修改了 user 的 name 为 李四 。

    - 这时候 A 终端查询这条记录的 name 是李四。

    - 但是在 B 终端中查询的 name 还是张三

  也就是说,未提交的事务是不会影响其他事务的。 

 

2018/07/26 《SQL 必知必会》 学习笔记

原文:https://www.cnblogs.com/25-lH/p/9372733.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!