4.4学习总结
数据库原理第四章 数据操作语句
4.1数据查询
查询功能是SQL语言的核心功能
4.1.1查询语句的基本结构
查询语句基本格式:
SELECT 目标列名序列 --需要哪些列 FROM 数据表 --来自于哪些表 WHERE 检索条件 --根据什么条件 GROUP BY 分组依据列 HAVING 组提取条件 ORDER BY 排序依据列
4.1.2单表查询
选择表中若干列:
查询指定列:SELECT Sno, Sname FROM Student
查询全部列:SELECT * FROM Student
查询经过计算的列:SELECT Sname,2010 - Sage FROM Student
常量列:查询全体学生的姓名和出生年份所在系,并在出生年份列前加入一个列,此列的每行数据均为“出生年份”常量值。 SELECT Sname,'出生年份:', 2010-Sage FROM Student
改变列标题: 语法: 列名 | 表达式 AS 列标题 或: 列标题 =列名 | 表达式 例: SELECT Sname 姓名, 'Year of Birth' 出生年份, 2011 - Sage 年份 FROM Student
选择表中的若干元组:
消除取值相同的行:SELECT DISTINCT Sno FROM SC
查询满足条件的元组:
比较运算符:=, >, >=, <, <=, <>(或!=) NOT+比较运算符
确定范围:BETWEEN…AND, NOT BETWEEN…AND.
确定集合:IN, NOT IN
字符匹配:LIKE, NOT LIKE
空值:IS NULL, IS NOT NULL
逻辑谓词:AND, OR
字符匹配:
使用LIKE运算符 一般形式为: 列名 NOT LIKE 匹配串
匹配串中可包含如下四种通配符:
_:匹配任意一个字符;
%:匹配0个或多个字符;
[ ]:匹配[ ]中的任意一个字符;
对于连续字母的匹配,例如匹配[abcd],可简写为[a-d]
[ ^ ]:不匹配[ ]中的任意一个字符
对查询结果进行排序:
排序子句为: ORDER BY 列1名 ASC|DESC,列2名 ASC|DESC
按列名进行升序(ASC)(默认为升序)或降序(DESC)排序。
使用计算函数汇总数据:
SQL提供的计算函数有:
COUNT( * ):统计表中元组个数;
COUNT(DISTINCT 列名 ):统计本列值的个数;
SUM( DISTINCT 列名 ):计算本列值总和;
AVG( DISTINCT 列名 ):计算本列平均值;
MAX( DISTINCT 列名 ):求本列最大值;
MIN( DISTINCT 列名 ):求本列最小值。
注意: 除COUNT(*)外,其他函数均忽略NULL值。
对查询结果进行分组计算:
作用: 控制计算的级别:对全表还是对一组。
目的: 细化计算函数的作用对象。 分组语句的一般形式: GROUP BY 分组条件 HAVING 组过滤条件
使用HAVING:HAVING用于对分组自身进行限制,它有点象WHERE子句,但它用于组而不是对单个记录。
4.1.3 多表连接查询
若一个查询同时涉及两个或两个以上的表,则称之为连接查询。
连接查询包括内连接、外连接和交叉连接等。
连接基础知识:连接查询中用于连接两个表的条件称为连接条件或连接谓词。 一般格式为: 表名1.列名1 比较运算符 表名2.列名2(必须是可比的)
内连接:SQL-92 内连接语法如下: SELECT … FROM 表名 JOIN 被连接表 ON 连接条件
自连接:为特殊的内连接 相互连接的表物理上为同一张表。 必须为两个表取别名,使之在逻辑上成为两个表。
外连接:只限制一张表中的数据必须满足连接条件,而另一张表中数据可以不满足连接条件。 外连接的语法格式为: FROM 表1 left|right JOIN 表2 ON 连接条件
4.1.4使用TOP限制结果集
TOP n [ percent] [WITH TIES]
n为负整数
TOP n表示取查询的前n行数据
TOP n percent表示取查询的前n%行数据
WITH TIES 表示包括并列的结果
4.1.5 子查询
子查询:在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。 子查询是一个 SELECT 查询,它嵌套在语句的 WHERE 或 HAVING 子句内,或其它子查询中 子查询的 SELECT 查询总用圆括号括起来。
(1)使用子查询进行基于集合的测试:
使用子查询进行基于集合的测试的语句的一般格式为: 列名 NOT IN (子查询)
(2)使用子查询进行比较测试:
带比较运算符的子查询指父查询与子查询之间用比较运算符连接, 能确切知道内层查询返回的是单值时,可用>、<、=、>=、<=、<>运算符。
(3)带有ANY(SOME)或ALL谓词的子查询:
谓词语义 ANY:任意一个值 ALL:所有值
需要配合使用比较运算符:
> ANY 大于子查询结果中的某个值 > ALL 大于子查询结果中的所有值 < ANY 小于子查询结果中的某个值 < ALL 小于子查询结果中的所有值 >= ANY 大于等于子查询结果中的某个值 >= ALL 大于等于子查询结果中的所有值 <= ANY 小于等于子查询结果中的某个值 <= ALL 小于等于子查询结果中的所有值 = ANY 等于子查询结果中的某个值 =ALL 等于子查询结果中的所有值(没有实际意义) !=(或<>)ANY 不等于子查询结果中的某个值 !=(或<>)ALL 不等于子查询结果中的任何一个值
(4)使用子查询进行存在性测试:
EXISTS谓词: 带EXISTS谓词的子查询不返回查询的数据,只产生逻辑真值(有数据)和假值(没有数据)。
1. EXISTS谓词 存在量词带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”,判断有无结果。 若内层查询结果为空,则外层的WHERE子句返回假值 若内层查询结果非空,则外层的WHERE子句返回真值 因带EXISTS的子查询只返回true或false,给出列名无实际意义,通常都用* 。
2. NOT EXISTS谓词 若内层查询结果非空,则外层的WHERE子句返回假值 若内层查询结果为空,则外层的WHERE子句返回真值
注1:处理过程为:先外后内;由外层的值决定内层的结果;内层执行次数由外层结果数决定。
注2: 由于EXISTS的子查询只能返回真或假值,因此在这里给出列名无意义。所以在有EXISTS的子查询中,其目标列表达式通常都用*。
不同形式的查询间的替换:
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换。 所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。
4.1.6 集合查询
集合操作的种类 并操作 union 交操作 intersect 差操作 except 参加集合操作的各查询结果的列数必须相同; 对应项的数据类型也必须相同.
4.2数据更改
DBMS在执行更新语句时会检查所更新的元组是否破坏表上已定义的完整性规则: 实体完整性 参照完整性 用户定义的完整性 NOT NULL约束 UNIQUE约束 值域约束
4.2.1插入数据
插入单行记录的INSERT语句的格式为: INSERT INTO 表名 (列名表) VALUES (值表) 功能: 新增一个符合表结构的数据行,将值表数据按表中列定义顺序[或列名表顺序]赋给对应列名。
4.2.2 更新数据
用UPDATE语句实现。 格式: UPDATE 表名 SET 列名=新值 WHERE 更新条件
4.2.3 删除数据
用DELETE语句实现 格式: DELETE FROM 表名 WHERE 删除条件

浙公网安备 33010602011771号