数据库系统概论第3章
外连接(2)
左外连接
列出左边关系(如本例Student)中所有的元组
右外连接
列出右边关系中所有的元组
全外连接
列出两个连接表中的所有元组
复合条件连接
复合条件连接:WHERE子句中含多个连接条件
查询选修2号课程且成绩在90分以上的所有学生 SELECT Student.Sno, Sname FROM Student, SC WHERE Student.Sno = SC.Sno AND o= ‘2’ AND SC.Grade > 90;
having子句
对分组后的数据进行筛选,选出满足条件的组
[例] 查询选修了3门以上课程的学生学号。
SELECT Sno
FROM SC GROUP BY Sno HAVING COUNT(*) >3;
问题
Select、from、where、order by、group by、 having子句在查询过程中的执行顺序?
DROP SCHEMA StuCourse RESTRICT
3.2.2 基本表的定义、删除与修改(1)
基本表的定义
CREATE TABLE <表名>
( <列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条 件>] ] …
[,<表级完整性约束条件> ]
索引的建立
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
CREATE CLUSTER INDEX Stusname
ON Student(Sname);
索引的删除
DROP INDEX Stusname;
3.3 数据查询
3.3.1 单表查询
3.3.2 连接查询
3.3.3 嵌套查询
3.3.4 集合查询
3.3.5 Select语句的一般形式
3.3.1 单表查询
查询仅涉及一个表:
选择表中的若干列 选择表中的若干元组 ORDER BY子句 聚集函数 GROUP BY子句 Having 子句
注意:当两个以上的表具有相同的列名时,一定
要再列名前加上表名作为限制
自身连接
查询存在间接先行课程的课程号及其间接先行课 程号
SELECT o,SECOND.Cpno pcno
FROM Course FIRST,Course SECOND
WHERE FIRST.Cpno = o;
3.3数据查询
SELECT [ALL|DISTINCT] <目标列表达式>
[,<目标列表达式>] … FROM <表名或视图名>[, <表名或视图名> ] … [ WHERE <条件表达式> ] [ GROUP BY <列名1> [ HAVING <条件表达式> ] ] [ ORDER BY <列名2> [ ASC|DESC ] ];
3.2.1 模式的定义与删除
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授 权定义子句>]
CREATE SCHEMA StuCourse AUTHORIZATION WANG;
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
Cpno是外码 被参照表是Course 被参照列是Cno
问题
下面建立一个“学生选课”表SC方法是否正确?
CREATE SC (Sno CHAR(9) PRIMARY KEY null, Cno CHAR(4) PRIMARY KEY , Grade SMALLINT null, FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno), );
选择表中的若干元组(1)
消除取值重复的行:DISTINCT SELECT DISTINCT Sno FROM SC;
选择表中的若干元组(2)
查询条件 比 较
谓 词 =,>,<,>=,<=,!=,<>,!>,!<; NOT+上述比较运算符 BETWEEN AND, NOT BETWEEN AND IN,NOT IN LIKE,NOT LIKE IS NULL,IS NOT NULL
连接查询的种类
一、等值与非等值连接查询 二、自身连接 三、外连接 四、复合条件连接
等值与非等值连接查询
查询学生的姓名及获得的成绩
SELECT Student.sname,SC.grade
FROM
Student, SC
问题:此查询有多 少条记录满足条件?
WHERE Student.Sno = SC.Sno
选择表中的若干列
[例1] 选择部分列 SELECT Sno,Sname FROM Student;
[例]选择所有列 SELECT * FROM Student [例]获得经过计算的列 SELECT Sname,2012-Sage FROM Student; [例]使用列别名 SELECT Sname,2012-Sage year-of-birth FROM Student;
3.3.2 连接查询
连接条件或连接谓词:用来连接两个表的条件
[<表1>.]<列1> <比较运算符> [<表2>.]<列2> [<表1>.]<列1> BETWEEN [<表2>.]<列2> AND [<表2>.]<列3>
连接操作的执行方法
嵌套循环法(NESTED-LOOP) 排序合并法(SORT-MERGE) 索引连接(INDEX-JOIN
第三章 关系数据库标准语言SQL
3.1 SQL概述 3.2 数据定义 3.3 数据查询 3.4 数据更新 3.5 视图
3.1 SQL概述
SQL(Structured Query Language)
结构化查询语言,是关系数据库的标准语言
数据查询 数据定义 数据操纵 数据控制
表 3.1 SQL 语言的动词 SQL 功 能 数 据 查 询 数 据 定 义 数 据 操 纵 数 据 控 制 动 词 SELECT CREATE, DROP, ALTER INSERT,UPDATE DELETE GRANT,REVOKE
ALTER TABLE <表名>
3.2.2 基本表的定义、删除与修改(Βιβλιοθήκη ) 删除基本表
DROP TABLE <表名>[RESTRICT| CASCADE]; 例:删除Student表,同时删除表上定义的索引等其 他对象 DROP TABLE Student CASCADE ;
3.2.3 索引的建立与删除
SELECT Sname FROM Student WHERE Sdept= 'CS' AND Sage<20;
ORDER BY子句
可以按一个或多个属性列排序
SELECT * FROM Student ORDER BY Sdept,Sage DESC;
当排序列含空值时
ASC:排序列为空值的元组最后显示
3.2.2 基本表的定义、删除与修改(2)
修改基本表 [ ADD <新列名> <数据类型> [ 完整性约束 ] ] [ DROP <完整性约束名> ] [ ALTER COLUMN<列名> <数据类型> ]; 例:向Student表增加“入学时间”列,其数据类 型为日期型。 ALTER TABLE Student ADD S_entrance DATE;
Unicode字符型 文本型 二进制型 日期时间类型 时间戳型 图像型
符号标识
nchar, nvarchar、 text, ntext binary, varbinary
datetime, smalldatetime, date, time
timestamp image
cursor, sql_variant, table, uniqueidentifier, xml
Cno Pcno
1
3 5
7
5 6
外连接(1)
查询每门课程号及其间接先行课程号(如果存在的话)
SELECT o ,SECOND.Cpno Second.cpno 1 OUT JOIN Course 7 FROM Course FIRST LEFT SECOND 2 null ON(o=SECOND.Cpno) 3 5 4 null 5 6 6 null 7 null
3.3.3嵌套查询
一个SELECT-FROM-WHERE语句称为一个查询块