您的位置:首页 > 数据库

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

2016-06-02 20:53 330 查看

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操作符搭配使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: