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前后的位置可互换。
空值检查
空值NULLSELECT 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操作符搭配使用
相关文章推荐
- mysql ERROR 1045 (28000): Access denied for user解决方法
- 解决重新安装sqlserver2008报错Reporting Services目录数据库文件存在的问题
- 解决重新安装sqlserver2008报错Reporting Services目录数据库文件存在的问题
- 拆书——SQL Server从入门到精通 (1)
- 准确计算oracle表分区记录数
- 微软发布正式版SQL Server 2016
- 完整java开发中JDBC连接数据库代码和步骤
- 数据库中的索引
- MySQL5.7修改数据库目录!
- MySQL5.7修改数据库目录!
- hive高阶1--sql和hive语句执行顺序、explain查看执行计划、group by生成MR
- hive高阶1--sql和hive语句执行顺序、explain查看执行计划、group by生成MR
- MySQL远程登录设置
- oracle 导出导入不含数据的空库
- oracle 导出导入不含数据的空库
- mysql update语句 无法实现数据库更改操作
- mysql 批量插入数据
- Windows Redis3 安装
- 数据库的组合查询和统计查询
- 《Redis设计与实现》[第二部分]单机数据库的实现-C源码阅读(二)