SQL必知必会(第3版)学习笔记【1-5章】

SQL必知必会(第3版)

Ben Forta 著
钟鸣, 刘晓霞等 译

第1章 了解SQL

  • 基础:数据库、数据库技术
数据库

区别于数据库软件(数据库管理系统,DBMS)

表(table)
  • 某种特定类型(类别)数据的结构化清单
  • 模式(shhema):关于数据库和表的布局及特性的信息。
列和数据类型
  • 列(colomn):表中的一个字段
  • 每个列都有相应的数据类型(datatype)
    • 数值、日期、文本、注释等
行(row)/记录(record)
  • 数据按行存储
主键(primary key)
  • 每一行应该有可以唯一标识自己的一列(或一组列)
  • 应该总是定义主键(即使不一定用到)
  • 作为主键的列应满足以下条件:
    • 任意两行都不具有相同的主键值
    • 每个行都必须具有一个主键值(主键列不允许NULL值)
    • 主键列中的值不允许修改或更新
    • 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)
什么是SQL
  • 结构化查询语言(Structured Query Language),用来与数据库通信的语言。
  • SQL由很少的词构成。

第2章 检索数据

SELECT语句
  • 从一个或多个表中检索信息
  • 关键字(keyword):SQL保留字
检索单个列
SELECT prod_name 
FROM Products;
注意
  • SQL语句并不区分大小写。
  • SQL语句可以分成多行,所有空格都被忽略
  • 多条SQL语句必须以分号分隔,单条SQL语句并不需要
检索多个列
SELECT prod_id, prod_name, prod_price
FROM Products;
检索所有列 *通配符
SELECT *
FROM Products;

第3章 排序检索数据

  • SELECT语句的 ORDER BY子句
排序数据

关系数据库设计理论认为:如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。

子句(clause)
  • ORDER BY子句取一个或多个列的名字,据此对输出进行排序
SELECT prod_name 
FROM Products
ORDER BY prod_name;
  • ORDER BY子句,应保证它是SELECT语句中最后一条子句。
  • 也可以通过非选择列进行排序
按多个列排序
SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY prod_price, prod_name;
按列位置排序
SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY 2, 3;
  • 分析:2, 3代表SELECT清单中的prod_price, prod_name
指定排序方向
  • 默认升序排序(A-Z)
  • 降序操作:DESC关键字
SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY prod_price DESC;
  • 多列排序
SELECT prod_id, prod_price, prod_name 
FROM Products 
ORDER BY prod_price DESC, prod_name;
  • 分析:DESC关键字只作用于直接位于其前面的列名,想在多个列上进行降序排序,必须对每个列指定DESC关键字。
  • DESC为DESCENDING的缩写,反义词是ASC(ASCENDING)

注意:排序时是否区分大小写要视DBMS而定。


第4章 过滤数据

  • WHERE子句(指定搜索条件(search criteria),即过滤条件(filter condition))
SELECT prod_name, prod_price
FROM Products 
WHERE prod_price = 3.49;
  • ORDER BY子句位于WHERE之后
WHERE子句操作符
  • != 不等于
  • BETWEEN 介于
  • IS NULL 为NULL值
检查单个值
SELECT prod_name, prod_price 
FROM Products 
WHERE prod_price < 10;
不匹配检查
SELECT vend_id, prod_name 
FROM Products 
WHERE vend_id <> 'DLL01';
  • Access中,不支持!=
  • ‘DLL01’不能用双引号
范围值检查
SELECT prod_name, prod_price 
FROM Products 
WHERE prod_price BETWEEN 5 AND 10;
  • BETWEEN包含两端的值。
  • 最小值和最大值在AND前后的位置可互换。
空值检查
  • 空值NULL
SELECT vend_id 
FROM Vendors 
WHERE vend_state IS NULL;

第5章 高级数据过滤

  • WHERE组合(AND, OR)
  • NOT
  • IN
AND操作符
SELECT prod_id, prod_price, prod_name 
FROM Products 
WHERE vend_id = 'DLL01' AND prod_price <= 4;
OR操作符
SELECT prod_name, prod_price 
FROM Products 
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';
计算次序
  • AND优先级要高
  • 必要时用括号()
IN操作符
SELECT prod_name, prod_price 
FROM Products 
WHERE vend_id IN ('DLL01', 'BRS01')
ORDER BY prod_name;
  • 类似于OR的组合
  • 优点:
    • 使用长的选项清单时,IN操作符清楚直观
    • 计算次序容易管理
    • 执行更快
    • 可以包含其他SELECT语句,能够更动态地建立WHERE子句
NOT操作符
SELECT prod_name 
FROM Products 
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;
  • 类似于<>不等于,但是在复杂语句中更强大
  • 与IN操作符搭配使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值