《SQL必知必会(第4版)》读书笔记【全22课】

本文是一份全面的SQL学习指南,涵盖了数据库基础、SQL查询、表操作、联结、子查询、事务处理等多个方面。通过22个章节深入浅出地介绍了SQL的使用,适合SQL初学者。内容包括数据检索、排序、过滤,以及创建、更新和删除数据,还涉及了视图、存储过程和事务处理等进阶主题。
摘要由CSDN通过智能技术生成

内容提要&相关资源

  • 本书由浅入深地讲解了 SQL的基本概念和语法,涉及数据的排序过滤分组,以及视图联结子查询游标存储过程触发器等内容,实例丰富,便于查阅。
  • 新版增加了针对 Apache Open Office BaseMariaDBSQLite 等 DBMS 的描述,并根据最新版本的 OracleSQL ServerMySQLPostgreSQL 更新了相关示例。
  • 本书适合SQL初学者
  • 英文原版勘误表: Errata: Sams Teach Yourself SQL in 10 Minutes (Fourth Edition).
  • 英文原版第5版:Sams Teach Yourself SQL in 10 Minutes (Fifth Edition)

正文

第1课 了解SQL

数据库基础

  • 数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件)。
  • 数据库软件:数据库管理系统(DBMS/Database Management System)。
    数据库是通过DBMS创建和操纵的容器。

  • 表(table):某种特定类型的结构化清单。
    数据库名和表名的组合是唯一的,即在相同数据库中表名唯一不可重复,但在不同数据库中可使用相同表名。
  • 模式(schema):关于数据库和表的布局及特性的信息。
    模式可用来描述数据库中特定的表,也可以用来描述整个数据库(和其中表的关系)。

  • 列(column):表中的一个字段。所有表都是由一个或多个列组成的。
  • 数据类型(datatype):所允许的数据的类型。每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。
    不同的DBMS中,相同的数据类型可能有不同的名称。
  • 行(row):表中的一个记录。

  • 主键(primary key):一列(或一组列),其值能够唯一标识表中的每一行。
    应该总是定义主键。
  • 主键需要满足的条件
  1. 任意两行都不具有相同的主键值(Not Null)
  2. 每一行都必须具有一个主键值
  3. 主键列中的值不允许修改或更新
  4. 主键值不能重用(如果删去某行,不可将它的主键赋给以后的新行)
    主键可以是多个列的组合,多列作为主键时,它们及它们的组合必须满足以上条件,它们的组合必须是唯一的,但单个列的值可以不唯一。
  • 外键

什么是SQL

SQL(sequel)是Structured Query Language(结构化查询语言)的缩写,是一种专门用来与数据库沟通的语言。




第2课 检索数据

检索单个列

SELECT prod_name
FROM Products;
  • 默认不排序
  • 以分号分隔多条SQL语句
  • SQL语句不区分大小写,但一般关键字大写,列名表名小写
  • 是否换行无影响,但分成多行更利于阅读调试

检索多个列

SELECT prod_id, prod_name, prod_price
FROM Products;
  • 选择多个列时,记得在列名间加上逗号,但最后一个列名后不加

检索所有列

SELECT *
FROM Products;
  • 通配符(*)

检索不同的值 DISTINCT

SELECT DISTINCT vend_id 
FROM Products;
  • DISTINCT作用于所有的列,不仅仅是跟在其后的那一列.

限制结果

  • SQL Server、 Access - TOP
SELECT TOP 5 prod_name 
FROM Products; 
  • DB2
SELECT prod_name 
FROM Products 
FETCH FIRST 5 ROWS ONLY; 
  • Oracle
SELECT prod_name 
FROM Products 
WHERE ROWNUM <=5; 
  • MySQL、MariaDB、PostgreSQL、SQLite - LIMIT
SELECT prod_name 
FROM Products 
LIMIT 6 OFFSET 5; 
-- 返回从第6行起的5行数据,即第7、8、9、10、11行
-- 在MySQL和MariaDB中,可省略OFFSET,即 LIMIT 5,6,逗号前的值对应OFFSET,逗号后的值对应LIMIT

/* 给代码加注释的方法 
SELECT prod_name, vend_id
FROM Products; */



第3课 排序检索数据 ORDER BY

  • 子句(clause): SQL语句由子句构成,有些子句是必需的,有些则是可选的。一个子 句通常由一个关键字加上所提供的数据组成。
  1. ORDER BY 必须是SELECT语句中的最后一条子句;
  2. 可用非检索的列排序数据;
  3. 可按照多个列排序,排序顺序按规定进行
  4. 可按照列位置排序:
SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY 2, 3;
-- 按照列的相对位置对应列排序,即按照SELECT中的第二列prod_price、第三列prod_name排序
-- 按照这种方法将无法按照不在SELECT清单中的列排序
-- 两种排序方法(实际列名、相对列位置)可以混合使用
  1. 默认升序ASC,可使用DESC关键字进行降序。DESC关键字之应用到直接位于其前面的列名,如果想在多个列上进行降序排序,必须对每一列制定DESC关键字;



第4课 过滤数据

搜索条件(search criteria)/ 过滤条件(filter condition)
WHERE
WHERE子句操作符

SELECT prod_name, prod_price 
FROM Products 
WHERE prod_price BETWEEN 5 AND 10; 

SELECT prod_name 
FROM Products 
WHERE prod_price IS NULL; 



第5课 高级数据过滤

  • 操作符(operator): 用来联结或改变 WHERE 子句中的子句的关键字,也称为逻辑操作符 (logical operator)。
操作符 定义
AND 用在 WHERE 子句中的关键字,用来指示检索满足所有给定条件的行
OR WHERE 子句中使用的关键字,用来表示检索匹配任一给定条件的行
注意 SQL默认优先处理AND,后处理OR;所以最好用括号明确分组操作符以避免错误。
IN WHERE 子句中用来指定要匹配值的清单的关键字,功能与 OR 相当
NOT WHERE 子句中用来否定其后条件的关键字
说明 MariaDB 中的 NOT MariaDB 支持使用 NOT 否定 IN、BETWEEN 和 EXISTS 子句。大多数 DBMS允许使用 NOT 否定任何条件。
SELECT prod_name, prod_price 
FROM Products 
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')
	   AND prod_price >= 10; 

SELECT prod_name, prod_price 
FROM Products 
WHERE vend_id IN ( 'DLL01', 'BRS01' ) 
ORDER BY prod_name; 

SELECT prod_name 
FROM Products 
WHERE NOT vend_id = 'DLL01' 
ORDER BY prod_name; 



第6课 用通配符进行过滤

  • 通配符(wildcard):用来匹配值的一部分的特殊字符。
    通配符本身实际上是 SQL的 WHERE 子句中有特殊含义的字符。
    通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用 通配符搜索。
  • 搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索条件。
    LIKE操作符
通配符 含义 注意
百分号(%) 表示任何字符出现任意次数 % 代表搜索模式中给定位置的0个、1个或多个字符; %不会匹配为 NULL 的行
下划线(_) 只匹配单个字符 _总是刚好匹配一个字符,不能多也不能少
方括号([]) 用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符 此通配符可以用前缀字符^(脱字号)来否定;只有微软的 Access 和 SQL Server 支持集合
SELECT prod_id, prod_name  
FROM Products  
WHERE prod_name LIKE 'Fish%';
-- 检索任意以Fish起头的词,%告诉 DBMS接受 Fish 之后的任意字符,不管它有多少字符。
-- 说明:Access 通配符如果使用的是 Microsoft Access,需要使用*而不是%。 
-- 说明:区分大小写 根据 DBMS的不同及其配置,搜索可以是区分大小写的。

SELECT prod_id, prod_name  
FROM Products  
WHERE prod_name LIKE '%bean bag%';  
-- 搜索模式'%bean bag%'表示匹配任何位置上包含文本 bean bag 的值,不论它之前或之后出现什么字符。 

SELECT prod_id, prod_name 
FROM Products 
WHERE prod_name LIKE '__ inch teddy bear'; -- 两个下划线
-- 这个 WHERE 子句中的搜索模式给出了后面跟有文本的两个通配符。
-- 结果只显示匹配搜索模式的行,如“12 inch teddy bear ”、“18 inch teddy bear ”,因为搜索模式要求匹配两个通配符。
-- 说明:DB2 通配符 DB2不支持通配符_。 
-- 说明:Access 通配符 如果使用的是 Microsoft Access,需要使用?而不是_。 

FROM Customers 
WHERE cust_contact LIKE '[JM]%' 
ORDER BY cust_contact; 
-- 此语句的WHERE子句中的模式为'[JM]%'。这一搜索模式使用了两个不同的通配符。
-- [JM]匹配方括号中任意一个字符,它也只能匹配单个字符。因此,任何多于一个字符的名字都不匹配。
-- [JM]之后的%通配符匹配第 一个字符之后的任意数目的字符,返回所需结果。 
  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  • 在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。
  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。



第7课 创建计算字段

  • 字段(field):基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常与计算字段一起使用。
    计算字段并不实际存在于数据库表中。计算字段是运行时在 SELECT 语句内创建的。
  • 拼接(concatenate):将值联结到一起(将一个值附加到另一个值)构成单个值。
DBMS 拼接
Access、SQL Server +
DB2、Oracle、PostgreSQL、SQLite、Open Office Base II
SELECT vend_name + ' (' + vend_country + ')' 
FROM Vendors 
ORDER BY vend_name; 

SELECT vend_name || ' (' || vend_country || ')' 
FROM Vendors 
ORDER BY vend_name; 

SELECT Concat(vend_name, ' (', vend_country, ')') --MySQL、MariaDB
FROM Vendors 
ORDER BY vend_name; 

去除值右边的所有空格 RTRIM()
许多数据库(不是所有)保存填充为列宽的文本值,而实际上你要的结果不需要这些空格。为正确返回格式化的数据,必须去掉这些空格。这可以使用 SQL的 RTRIM()函数来完成,如下所示:

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')' -- 去掉vend_name和vend_country中的多余空格
FROM
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL必知必会第4》是一本经典的SQL学习参考书籍,在300字的篇幅中,我将简要介绍该书的内容和脚本应用。 《SQL必知必会第4》主要分为5个部分:初识SQL、过滤数据、数据排序、数据聚合、数据联结。通过这些部分的学习,读者能够掌握SQL的基本语法和操作技巧。 书中的脚本是用来实践学习的具体例子,以帮助读者更好地理解SQL的应用场景。脚本应用主要包括创建数据库、表格、插入数据、查询数据、更新数据和删除数据等操作。通过脚本的实践,读者能够更深入地了解SQL的具体应用和实际操作。 例如,书中介绍了如何使用SQL创建数据库的脚本,包括CREATE DATABASE语句的使用方法、数据库名称的定义以及数据库选项的设置。在学习过滤数据的部分,书中提供了一些查询数据的脚本示例,包括使用WHERE子句进行条件过滤、使用LIKE操作符进行模糊查询等。 此外,《SQL必知必会第4》还涵盖了一些高级操作的脚本应用,如使用GROUP BY子句进行数据聚合、使用ORDER BY子句进行数据排序以及使用JOIN操作进行数据联结等。 总之,《SQL必知必会第4》的脚本应用是该书学习过程中不可或缺的一部分,通过实际的脚本操作,读者可以更好地理解和应用SQL的知识。同时,在实践过程中,读者还可以根据自己的实际需求进行修改和扩展,提升SQL的应用水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值