SQL必知必会(第4版)学习笔记(20200731 第1课-第14课)

SQL必知必会第4版学习笔记

说明

本书实操关系表共包括下图所示(Access2016)的5个:
Customers, OrderItems, Orders, Products和Vendors。
分别对应:顾客表,订单清单,订单,产品和供应商。
Orders表包含收到的所有订单,OrderItems表包含每个订单中的各项物品
在这里插入图片描述
表关系如下图:
在这里插入图片描述

第1课 了解SQL

1.1 数据库基础

数据库 区分Database和DBMS。
数据库:保存有组织的数据的容器(通常是一个文件或一组文件)。
数据库管理系统:数据库软件

表(table) 表是一种结构化的文件,可用来存储某种特定类型的数据。(某种特定类型数据的结构化清单)
模式(schema) 关于数据库和表的布局及特性的信息。

列(column) 表中的一个字段。所有表都是由一个或多个列组成的。

行(row) 表中的一个记录。表中的数据是按行储存的。

主键(primary key) 一列(或一组列),其值能够唯一标识表中每一行。

  • 任意两行都不具有相同的主键值;
  • 每一行都必须具有一个主键值(主键列不允许NULL值);
  • 主键列中的值不允许修改或更新;
  • 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。

1.2 什么是SQL

发音 字母S-Q-L或sequel。
全称 Structured Query Language 结构化查询语言。

第2课 检索数据

2.1 SELECT语句

关键字(keyword) 作为SQL组成部分的保留字。关键字不能用作表或列的名字。

2.2 检索单个列

Access2016 中的Query窗口
输入↓

SELECT prod_name
FROM Products;

输出

2.3 检索多个列

输入↓

SELECT prod_name, prod_name, prod_price
FROM Products;

输出↓
在这里插入图片描述

2.4 检索所有列

输入↓

SELECT *
FROM Products;

输出↓
在这里插入图片描述

2.5 检索不同的值

SELECT DISTINCT vend_id
FROM Products;

在这里插入图片描述

2.6 限制结果

输入↓

SELECT TOP 5 prod_name
FROM Products;

Access语句–只检索前5行数据。

输出↓
在这里插入图片描述

第3课 排序检索数据

3.1 排序数据

ORDER BY子句

  • 位置:保证它是SELECT语句中最后一条子句
  • 可以用非检索的列对数据进行排序。

输入↓

SELECT prod_name
FROM products
ORDER BY prod_name;

输出↓
在这里插入图片描述

3.2 按多个列排序

首先按价格,然后按名称排序。

输入↓

SELECT prod_id, prod_price, prod_name
FROM products
ORDER BY prod_price, prod_name;

输出↓
在这里插入图片描述

3.3 按列位置排序

输入↓

SELECT prod_id, prod_price, prod_name
FROM products
ORDER BY 2,3;

输出↓
在这里插入图片描述

按列位置进行排序的优缺点:

优点: 不用重新输入列名;
缺点:

  • 不明确给出列名可能造成错用列名排序;
  • 在对SELECT清单进行改动时容易错误地对数据进行排序(忘记对ORDER BY 子句做相应的改动);
  • 如果进行排序的列不在SELECT清单中则不能使用。

3.4 指定排序方向

降序排序关键字DESC。
DESC是DESCENDING的缩写。

输入↓

SELECT prod_id, prod_price, prod_name
FROM products
ORDER BY prod_price DESC, prod_name;

输出↓
在这里插入图片描述
如图,可以发现prod_price列按降序进行排列;而prod_name列(在每个价格内)以升序进行排列(A-Z)。

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

第4课 过滤数据

4.1 使用WHERE子句

4.2 WHERE子句操作符

4.2.1 检查单个值

操作符 说明
= 等于
> 大于
>= 大于
< 小于
<= 小于等于

1. = 检验相等

需求:列出所有价格等于3.49美元的产品。

输入↓

SELECT prod_price, prod_name
FROM products
WHERE prod_price = 3.49;

输出↓
在这里插入图片描述
只返回prod_price值为3.49的行。

2.<
需求:列出所有价格小于10美元的产品。

输入↓

SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;

输出↓

在这里插入图片描述

3. <=
需求:检索所有价格小于等于10美元的产品。

输入↓

SELECT prod_name, prod_price
FROM Products
WHERE prod_price <= 10;

输出↓
在这里插入图片描述

4.2.2 不匹配检查

操作符 说明
!= 不等于
<> 不等于
!< 不小于
!> 不大于

需求:列出所有不是供应商DLL01制造的产品

输入↓

SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';

输出↓在这里插入图片描述

4.2.3 范围值检查

操作符 说明
BETWEEN 在指定的两个值之间

需求:检索价格在5美元和10美元之间的所有产品

输入↓

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

输出↓
在这里插入图片描述
范围值检查需要两个值,用AND关键字进行分隔。

4.2.4 空值检查

NULL:无值(no value),与字段包含0、空字符串或仅仅包含空格不同。

返回所有没有价格的产品。
输入↓

SELECT prod_name
FROM Products
WHERE prod_price IS NULL;

输出↓
表中没有这样的行,所以没有返回数据。
在这里插入图片描述
返回没有电子邮件的顾客姓名。
输入↓

SELECT cust_name
FROM Customers
WHERE cust_email IS NULL;

输出↓
在这里插入图片描述

第5课 高级数据过滤

5.1 组合WHERE子句

【概念】
操作符(operator):用来联结或改变WHERE子句中子句的关键字,也称为逻辑操作符(logical operator)。

5.1.1 AND操作符

需求:检索由供应商DLL01制造且价格小于等于4美元的所有产品的名称和价格。

输入↓

SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4

输出↓
在这里插入图片描述
△ 可以增加多个过滤条件,每个条件间都要使用AND关键字。
△ ORDER BY子句应放在WHERE子句之后。

5.1.2 OR操作符

OR: WHERE子句中使用的关键字,用来表示检索匹配任一给定条件的行。

需求:检索由任一个指定供应商DLL01/BRS01制造的所有产品的产品名和价格。

首先是错误示范(这也是我自己做的)
输入↓

SELECT prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' OR 'BRS01'

输出↓
在这里插入图片描述

然后是正确示范:

SELECT prod_price,prod_name
FROM Products
WHERE vend_id = 'DLL01' OR vend_id ='BRS01'

输出↓
在这里插入图片描述

错误和正确之间的区别在WHERE子句的OR操作符后半部分。
正确的写法应为:

WHERE vend_id = 'DLL01' OR vend_id ='BRS01'

错误的写法是:

WHERE vend_id = 'DLL01' OR 'BRS01'

我自己的理解是,单独的字符串’BRS01’在OR后是没有意义的。

5.1.3 求值顺序

圆括号>AND>OR

5.2 IN操作符

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。
IN取一组由逗号分隔、括在圆括号中的合法值。
功能与OR相当。

需求:检索由供应商DLL01和BRS01制造的所有产品。

输入↓

SELECT prod_name,prod_price
FROM Products
WHERE vend_id IN 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值