<SQL必知必会>读书笔记

查询

  1. 慎用“*”检索所有列:

一般而言,除非你确实需要表中的每一列,否则最好别使用*通配符。虽然使用通配符能让你自己省事,不用明确列出所需列,但检索不需 要的列通常会降低检索和应用程序的性能。

使用通配符有一个大优点。由于不明确指定列名(因为星号检索每一列),所以能检索出名字未知的列。
2. 关于Distinct

不能部分使用DISTINCT
DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。例如,你指定SELECT DISTINCT vend_id, prod_price,除非指定的两列完 全相同,否则所有的行都会被检索出来。

  1. 限定行数

SQL Server和Access中使用SELECT时,可以使用TOP关键字来限制最多返回多少行

Oracle:SELECT prod_name FROM Products WHERE ROWNUM <=5;

MySQL、MariaDB、PostgreSQL或者SQLite:SELECT prod_name FROM Products LIMIT 5;

  1. 通配符

在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的

5 xxtrim()去除空格

支持RTRIM()(正如刚才所见,它去掉字符串右边的空格)、LTRIM()(去掉字符串左边的空格)以及TRIM()(去掉字符串左 右两边的空格)。

聚合函数

1.count

使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。

子查询

  1. 子查询返回单列

作为子查询的SELECT语句只能查询单个列。企图检索多个列将返回错误。

  1. 用于统计数量字段的子查询
SELECT cust_name, cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id) AS orders
FROM Customers ORDER BY cust_name;

该子查询对检索出的每个顾客执行一次

组合查询

  1. union使用规则
    • UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果组合四条SELECT语句,将要使用三个UNION关 键字)。
    • UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过,各个列不需要以相同的次序列出)。
    • 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含转换的类型(例如,不同的数值类型或不同的日期类型)。
    • 排序:在用UNION组合查询时,只能使用一条ORDER BY子句,它必须位于最后一条SELECT语句之后

union会自动取消重复的行 union all则不会取消重复行。

删除

  1. 删除所有行

如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,而速度更快(因为不记录数据的变动)。

update和delete原则

  1. 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。
  2. 保证每个表都有主键(如果忘记这个内容,请参阅第12课),尽可能像WHERE子句那样使用它(可以指定各主键、多个值或值的范围)。
  3. 在UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。
  4. 使用强制实施引用完整性的数据库(关于这个内容,请参阅第12课),这样DBMS将不允许删除其数据与其他表相关联的行。 5. 有的DBMS允许数据库管理员施加约束,防止执行不带WHERE子句的UPDATE或DELETE语句。如果所采用的DBMS支持这个特性,应该使用 它。

事务

  1. 事务用来管理INSERT、UPDATE和DELETE语句。不能回退SELECT语句(回退SELECT语句也没有必要),也不能回退CREATE或DROP操作。
  2. mysql和oracle事务区别
    • oracle中事务从上一个commit或rollback开始;
    • MySQL中事务的开始必须要有START TRANSACTION;这才标志着一个事物的开始,否则使用rollback是无法回滚数据的。
      即Oracle事务不需要显示说明开启事务的,针对dml语句,当你设置保存点,接下来的步骤如上返回到保准点同样的用commit提交事务。

游标

  1. 游标:(cursor)是一个存储在DBMS服务器上的数据库查询,
    它不是一条SELECT语句,而是被该语句检索出来的结果集。
  2. 作用:可以在检索出来的行中前进或后退一行或多行。

索引、分页、主键

1、主键,Oracle不可以实现自增,mysql可以实现自增。

oracle新建序列,SEQ_USER_Id.nextval

2、索引:

mysql索引从0开始,Oracle从1开始。

3、分页,

mysql: select * from user order by desc limit n ,m.

表示,从第n条数据开始查找,一共查找m条数据。

Oracle:select * from user
select rownum a * from ((select * from user)a)
select * from (select rownum a.* from (select * from user) a )
where r between n , m .

表示,n表示从第n条数据查询,查找到m条数据

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值