电子科大数据库复习PPT
VarChar(100)NOT NULL UNIQUE
);
实践练习: 创建STUDENT数据库表
列名 StudentID 类型 Char(10) 键 主键 是否非空 是 备注
StudentName
StudentGender BirthDay Major StudentPhone
VarChar(20)
SELECT TeacherID, TeacherName, TeacherTitle FROM TEACHER WHERE CollegeID IN (SELECT CollegeID FROM COLLEGE WHERE CollegeName=’计算机学院’);
例 若要找出STUDENT表中年龄最大和年龄最小的学生出生日期,其 查询SQL语句如下:
SELECT Min(Birthday) AS 最大年龄,Max(Birthday) AS 最小年龄 FROM STUDENT;
八、SQL内置函数和分组 在SQL语言中,可在查询结果集进行分组数据统计。这是通过在SEL ECT语句中加入Group By子语句来实现。 例 若要分专业统计 STUDENT 表中的学生人数。在 SELECT 语句中可 以使用GROUP BY分组子句完成统计,其查询SQL语句如下:
SELECT * FROM STUDENT ORDER BY Birthday DESC;
在默认情况下, SQL 查询的结果集是按指定列值的升序排列。 可以使用关键词ASC和DESC选定排序是升序或降序。
实践操作:执行上述SQL SELECT语句。
如果需要结果集按多个列排序,可以分别加入关键字ASC或DESC改变。 例 若要将STUDENT表查询数据,首先按出生日期降序排列,然后按 姓名升序排列,其数据查询SQL语句如下:
OfficePhone
CONSTRAINT );
Char(12)
DEPARTMENT_PK
NOT NULL,
PRIMARY KEY(DepartmentName )
例 创建PROJECT表中外键及其参照完整性约束
CREATE TABLE PROJECT( ProjectID Name Department MaxHours Int VarChar(30) Char(35) Numeric(6,2) NOT NULL IDENTITY(1,1), NOT NULL, NOT NULL, NOT NULL DEFAULT 100,
SELECT Major AS 专业, COUNT(StudentID) AS 学生人数 FROM STUDENT WHERE StudentGender=’男’ GROUP BY Major HAVING COUNT(*)>2;
九、使用子查询处理多个表 在实际应用中,通常需要关联多表才能获得所需的信息。在SELECT 查询语句中,可使用子查询方式实现多表关联查询。 例 在课程目录数据库中,希望能检索出“计算机学院”的教师名 单。该操作需要关联教师信息表TEACHER和学院信息表COLLEGE,才 能获得这些数据。这里可采用子查询方法实现两表关联查询,其查 询SQL语句如下:
第一章
第二章
2. 列约束条件 列约完整性约束关键词 PRIMARY KEY——主键
NOT NULL——非空值
NULL——空值 UNIQUE——值唯一 CHECK——有效性检查 DEFAULT——缺省值
例 雇员数据库表EMPLOYEE创建
列名
EmployeeNumber Name Int VarChar(30)
例 在学生信息表STUDENT中,学生“杨宾”的原有Email数据 为空,现需要修改为“yangbin@”。其数据修改的 SQL语句如下: STUDENT SET Email=’yangbin@’ WHERE StudentName=’杨宾’;
UPDATE
例 在学生信息表STUDENT中,删除姓名为 “张亮”的学生数据, 其数据删除的SQL语句如下:
NOT NULL UNIQUE, PRIMARY KEY(StudentID)
使用表约束定义主键的优点: 便于定义复合主键 可命名主键约束 便于定义代理键
例 项目数据库表PROJECT创建
列名 ProjectID Name Department Int Char(30) Char(35) 类型 否 否 键 主键 是否非空 是 是 是 备注 代理键100开始,增量10
SELECT * FROM STUDENT WHERE BirthDay BETWEEN ‘1995-04-01’ AND ‘1996-04-01’;
该语句执行后,其查询操作结果见下图所示。
例 若要从STUDENT表中查询邮箱域名为“@”的学生数 据。其数据查询SQL语句如下: SELECT * FROM STUDENT WHERE Email LIKE
SELECT * FROM STUDENT ORDER BY Birthday DESC , StudentName ASC;
例 若要统计STUDENT表中的学生人数,在SELECT语句中可以使 用COUNT()函数来计算,其查询SQL语句如下:
SELECT COUNT(*) AS 学生人数 FROM STUDENT;
ON DELETE CASCADE
);
CREATE TABLE ASSIGNMENT( ProjectID Int NOT NULL,
EmployeeNumber
HoursWorked CONSTRAINT
Int
NOT NULL,
Numeric(6,2) NULL, ASSIGNMENT_PK PRIMARY KEY(ProjectID,EmployeeNumber),
类型
主键 否
键
是否非空
是 是 代理键
备注
Department
Phone Email
Char(35)
Char(12) VarChar(100)
否
否 否
是
否 是
缺省值“人力资源”
要求取值唯一
CREATE TABLE EMPLOYEE(
EmployeeNumber Name Department Phone Email Int Char(35) Char(12) PRIMARY KEY IDENTITY(1,1), NOT NULL DEFAULT ‘人力资源’, NULL, VarChar(30) NOT NULL,
参照完整性约束
是否非空 是 是 是 是 否 备注 项目编号 项目名称 部门 最长工期 开始日期
EndDate
DateTime
否
否
结束日期
例 创建DEPARTMENT表
CREATE TABLE DEPARTMENT( DepartmentName DepartIntro OfficeNumber Char(35) VarChar(200) Char(15) NOT NULL, NOT NULL, NOT NULL,
StartDate
EndDate CONSTRAINT
DateTime
DateTime PROJECT_PK
NULL,
NULL, PRIMARY KEY(ProjectID),
CONSTRAINT
PROJ_DEPART_FK
FOREIGN KEY(Department)
REFERENCES DEPARTMENT (DepartmentName) ON UPDATE CASCADE
主键
否
是
是
OfficeNumber
OfficePhone
Text(15)
Text(12)
否
否
是
是
PROJECT表结构
列名 ProjectID Name Department MaxHours StartDate Int VarChar(30) Char(35) Numeric(6,2) DateTime 类型 主键 否 外键 否 否 键
SELECT Major AS 专业, COUNT(StudentID) AS 学生人数 FROM STUDENT GROUP BY Major;
实践操作:执行上述SQL SELECT语句。
在分组统计SQL查询语句中,还可以使用HAVING子句限定分组统 计的条件。 例 若要分专业统计STUDENT表中男生人数,但限定只显示人数大 于2的人数,其查询SQL语句如下:
EndDate
CONSTRAINT );
DateTime
PROJECT_PK
NULL,
PRIMARY KEY(ProjectID)
4、使用表约束定义外键
DEPARTMENT表结构
列名 类型 键 是否非空 备注
DepartmentName
DepartIntro
Text(35)
VarChar(200)
’%@’;
该语句执行后,其查询操作结果见下图所示。
六、对结果进行排序
在 SELECT查询语句返回的结果中,行的顺序是任意的。如 果需要结果集排序,可以在SELECT语句中加入ORDER BY关键字。
例 若要从 STUDENT 表中按学生出生日期降序输出学生数据,其数 据查询SQL语句如下。
StudentName
BirthDay
VarChar(30)
Date
NOT NULL,
NOT NULL, NOT NULL,
StudentGender Char(2)
Major
StudentPhone CONSTRAINT );
Varchar(30)
Char(11) STUDENT_PK
NOT NULL DEFAULT ‘软件工程’,