zoukankan      html  css  js  c++  java
  • 《SQL必知必会》笔记

    SQL必知必会(第4版)

    作者:【美】Ben Forta

    本书介绍了sql在不同数据库工具(Oracle、SQLite、SQL server、MySQL、MariaDB、PostgreSQL...)是怎么写不同的sql语句。

    因工具的不同,对应的sql也有些变化,或者在这工具能用上,但是在另一个工具就用不上。

    看这本书,就相当于纵览各个工具的写sql语句不同之处。

    以下是我的一些摘抄,也许有些乱,请不要见外。

     限制结果中,发现了新大陆。

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

      SELECT TOP 5 prod_name  

      FROM Products;

    上面代码使用SELECT TOP 5语句,只检索前5行数据。

    如果你使用的是DB2,很可能习惯使用下面这一DBMS特定的SQL语句,像这样
      SELECT prod_name
      FROM Products
      FETCH FIRST 5 ROWS ONLY;

    如果你使用MySQL、MariaDB、PostgreSQL或者SQLite,需要使用LIMIT子句,像这样:
      SELECT prod_name
      FROM Products
      LIMIT 5;

    上述代码使用SELECT语句来检索单独的一列数据。LIMIT 5指示MySQL等DBMS返回不超过5行的数据。这个语句的输出参见下面的代码。
      LIMIT 5 OFFSET 5指示MySQL等DBMS返回从第5行起的5行数据。

    要注意的是:第一个被检索的行是第0行,而不是第1行。因此,LIMIT 1 OFFSET 1会检索第2行,而不是第1行。

     按列位置排序
      SELECT prod_id, prod_price, prod_name
      FROM Products
      ORDER BY 2, 3;

     指定排序方向
    如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。

    WHERE子句操作符
    确定值是否为NULL,不能简单地检查是否= NULL。SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。

    执行算术计算
    SELECT语句为测试、检验函数和计算提供了很好的方法。虽然SELECT通常用于从表中检索数据,但是省略了FROM子句后就是简单地访问和处理表达式,例如SELECT 3 * 2;将返回6,SELECT Trim(' abc ');将返回abc,SELECT Now();使用Now()函数返回当前日期和时间。现在你明白了,可以根据需要使用SELECT语句进行检验。

    提取字符串的组成部分
    Access使用MID();DB2、Oracle、PostgreSQL和SQLite使用SUBSTR();MySQL和SQL Server使用SUBSTRING()

    数据类型转换
    Access和Oracle使用多个函数,每种类型的转换有一个函数;DB2和PostgreSQL使用CAST();MariaDB、MySQL和SQL Server使用CONVERT()

    取当前日期
    Access使用NOW();DB2和PostgreSQL使用CURRENT_DATE;MariaDB和MySQL使用CURDATE();Oracle使用SYSDATE;SQL Server使用GETDATE();SQLite使用DATE()

    使用函数
    SOUNDEX考虑了类似的发音字符和音节,使得能对字符串进行发音比较而不是字母比较。虽然SOUNDEX不是SQL概念,但多数DBMS都提供对SOUNDEX的支持。

    这些函数很高效,它们返回结果一般比你在自己的客户端应用程序中计算要快得多。

     过滤分组

    说明:HAVING和WHERE的差别
    这里有另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。这是一个重要的区别,WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。

     创建组合查询
    EXCEPT(有时称为MINUS)可用来检索只在第一个表中存在而在第二个表中不存在的行;而INTERSECT可用来检索两个表中都存在的行。实际上,这些UNION很少使用,因为相同的结果可利用联结得到。

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

     创建表
    NULL值就是没有值或缺值。

     

    视图
    (嵌套视图可能会严重降低查询的性能,因此在产品环境中使用之前,应该对其进行全面测试)。

     为什么要使用存储过程(面试总会问)
    使用存储过程有三个主要的好处,即简单、安全、高性能

    事务处理
    事务处理用来管理INSERT、UPDATE和DELETE语句。不能回退SELECT语句(回退SELECT语句也没有必要),也不能回退CREATE或DROP操作。事务处理中可以使用这些语句,但进行回退时,这些操作也不撤销。

     游标
    游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。

     触发器
    一般来说,约束的处理比触发器快,因此在可能的时候,应该尽量使用约束。

  • 相关阅读:
    .net 实现 URL重写,伪静态
    jquery上传插件AjaxUpload使用示例
    事实上
    C# DataSet和DataTable详解
    当你累了,准备放弃时,看看这个吧!!!
    asp.net页面数据传递总结
    在Global.asax中根据请求路径判断是否可以访问。。。我没思路只好这样了
    今儿改的
    C 语言利用数组实现大数计算
    开始学习 类
  • 原文地址:https://www.cnblogs.com/zttjava/p/4999869.html
Copyright © 2011-2022 走看看