SQL基本表查询基本表、索引与视图的定义、删除和修改课程设计
sql语言和查询视图详细说明
3.3.1单表查询
一、选择表中的若干列 1、查询指定
例1:查询全体学生的学号与姓名
SELECT xh,xm FROM Student <目标列表达式> 中各个列的先后顺序可以与表中的 顺序不一致。也就是说,用户在查询时可以根据应用 的需要改变列的显示顺序。
例2:查询全体学生的姓名、学号、所在系
图3.1SQL对关系数据库模式的支持
1.2 SQL的基本概念
• • • 基本表是本身独立存在的表,在SQL中一个关系就 对应一个表。一些基本表对应一个存储文件,一个 表可以带若干索引,索引也存放在存储文件中。 存储文件的逻辑结构组成了关系数据库的内模式。 存储文件的物理文件结构是任意的。 视图是从基本表或其他视图中导出的表,它本身不 独立存储在数据库中,也就是说数据库中只存放视 图的定义而不存放视图对应的数据,这些数据仍存 放在导出视图的基本表中,因此视图是一个虚表。 用户可以用SQL语言对视图和基本表进行查询。在 用户眼中,视图和基本表都是关系,而存储文件对 用户是透明的。
int,smallint,bigint,tinyint(0~255),bit(0或1)
小数 number(m,n) m位数字,其中n位为小数、 decimal 日期 Datetime、smalldatetime(精确到秒)、timestamp 字符型 char 固定长度、varchar 变长字符、text
3.2.1定义、删除与修改基本表
例2: 检查约束
create table student (xh char(10) not null ,xm char(8),xb char(2),nl tinyint,xi char(15), check (nl>0)) --创建检查约束
实验1数据库定义实验 一 实验内容 1、数据库的创建、修改和删除 2、基本表的定义
实验1数据库定义实验一实验内容1、数据库的创建、修改
和删除2、基本表的定义
一、实验内容
1. 数据库的创建、修改和删除
- 创建名为`TestDB` 的数据库
```sql
CREATE DATABASE TestDB;
```
- 修改数据库的属性,例如增加日志文件大小
```sql
ALTER DATABASE TestDB
MODIFY FILE (NAME = TestDB_Log, SIZE = 50MB);
```
- 删除数据库
```sql
DROP DATABASE TestDB;
```
2. 基本表的定义
- 创建名为`Employees` 的表,包含员工编号(`ID`)、姓
名(`Name`)和工资(`Salary`)列
```sql
CREATE TABLE Employees (
ID INT PRIMARY KEY,
Name VARCHAR(50),
Salary DECIMAL(10, 2)
);
```
- 修改表结构,添加部门(`Department`)列
```sql
ALTER TABLE Employees
ADD Department VARCHAR(50);
```
- 删除表
```sql
DROP TABLE Employees;
```
二、总结
通过这个实验,你应该学会了如何使用SQL 语句创建、修改和删除数据库,以及定义基本表的结构。
数据库应用第5章-1_结构化查询语言SQL_V08_2
第5章 结构化查询语言SQL数据库系统应用Data Base System Application张建国哈工大计算机科学与技术学院2008-10-7哈工大计算机学院 张建国 Slide 5-1第5章 结构化查询语言SQL2008-10-72第5章 结构化查询语言SQL本章主要内容SQL概述 基本表的定义、修改与删除 SQL的数据更新 数据记录的插入 数据记录的修改 数据记录的删除 SQL的数据查询 索引的建立与删除 T-SQL语言2008-10-7哈工大计算机学院 张建国Slide 5-3第5章 结构化查询语言SQL5.1 SQL概述1. SQL的发展 SQL(Structured Query Language)意为结构化查询语言. 1974年由Boyce和Chamberlin提出来. 最初在System R关系数据库中实现.该语言功能丰富、语言简捷、使用灵活方便、深受各界欢迎.1986年成为美国国家标准. 1987年成为国际标准SQL86. 1989年,ISO颁布了增强完整性特征的SQL89标准. 1993年,ISO对SQL89标准进行了大量的修改和扩充,推出 SQL2(SQL92).2008-10-7哈工大计算机学院 张建国 Slide 5-4第5章 结构化查询语言SQL5.1 SQL概述(Cont.)SQL是一种通用的、功能极强的关系数据库语言. 各数据库厂家纷纷推出各自支持SQL的软件或与SQL 接 口软件,使自己的数据库可以运行SQL. 许多其他软件(例如图形处理、人工智能、软件工程工具 、软件开发工具等)也利用SQL语言的数据查询功能,作为 自身的一部分,使其数据查询功能更强大. 许多程序设计语言中也都引入了SQL.2008-10-7哈工大计算机学院 张建国Slide 5-5第5章 结构化查询语言SQL5.1 SQL概述(Cont.)2. SQL的特点 (1) 一体化 非关系模型的数据语言 模式数据定义语言:Schema DDL 外模式(子模式)数据定义语言:SubSchema DDL 存储模式数据定义语言: DSDL(Data Storage Definition Language) 数据操纵语言:DML SQL语言 SQL将数据定义语言DDL、数据操纵语言DML和数据控 制语言DCL集成在一起,各种语言风格统一.2008-10-7哈工大计算机学院 张建国 Slide 5-6第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(2) 高度非过程化 非关系语言 通过存取路径存取数据. SQL语言 SQL是一种面向问题的语言,只需提出“做什么”,不必指出“ 怎么做”.存取路径的选择和SQL的操作过程是由系统自动 完成的. (3) 面向集合的操作方式 非关系语言 一次一个记录 SQL 采用集合操作,操作对象和操作结果都是元组的集合.2008-10-7哈工大计算机学院 张建国 Slide 5-7第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(4) 两种使用方式、统一的语法结构 SQL既是自含式语言,又是嵌入式语言. 自含式语言 能独立地在联机方式下使用(命令方式),用户可以在终端键 盘上直接输入SQL命令对DB进行操作. 嵌入式语言 嵌入到高级语言(VB、PB、Java等)程序中,利用主语言(高 级语言)进行计算处理、利用DB语言进行数据管理. 同一条命令在两种操作方式中的语法结构基本一致.2008-10-7哈工大计算机学院 张建国Slide 5-8第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(5) 语言简捷、易学易用 SQL具有很强的功能,但由于其设计巧妙,使得语言十分简捷. 完成其核心功能只用9个动词:数据查询:SELECT(查询) 数据定义:CREATE(创建表、索引、视图) DROP(删除表、索引、视图) ALTER(修改表) 数据操纵:INSERT(插入) DELETE(删除) UPDATE(修改) 数据控制:GRANT(授权) REVOKE(收回授权)2008-10-7哈工大计算机学院 张建国 Slide 5-9第5章 结构化查询语言SQL5.1 SQL概述(Cont.)3. SQL支持三级模式结构 外模式 外模式对应于视图View和部分基本表Base Table 用户可以用SQL语言对基本表和视图进行操作 从用户的观点看基本表和视图是一样的 模式 模式对应于基本表 基本表是独立存在的表 每个基本表对应一个关系2008-10-7哈工大计算机学院 张建国Slide 5-105.1 SQL概述(Cont.)内模式内模式对应于存储文件存储文件是在计算机存储介质中存放的文件形式一个或若干个基本表对应一个存储文件视图视图是从一个或几个基本表或其他视图导出的表视图并不存放实际的数据,仅保存视图的定义使用视图时,根据视图定义,从基本表中取数据因此,视图实际上是一个虚表5.1 SQL 概述(Cont.)SQL 用户2视图3视图2视图1基本表3基本表2基本表1存储文件3存储文件2存储文件1基本表4外模式模式内模式SQL 用户1SQL 用户35.2 基本表的定义、修改与删除1. 基本表的定义格式:CREATE TABLE 表名(列名1 数据类型1 [列级完整性约束条件1][,列名2 数据类型2 [列级完整性约束条件2]]…[,列名n 数据类型n [列级完整性约束条件n]]);表名:基本表的表名列名:属性名数据类型:属性的数据类型,可参考具体数据库系统的数据类型5.2 基本表的定义、修改与删除列级完整性约束条件:相应属性的完整性约束条件NULL/NOT NULL: 该项是否可以取空值UNIQUE: 该项是否具有唯一性CHECK: 该项的取值范围PRIMARY KEY: 设置主码FOREIGN KEY: 设置外码5.2 基本表的定义、修改与删除(Cont.)例:建立一个”学生”表Student和一个”系”表.Student(Sno,Sname,Birthday,Score,Dno)Dpet(Dno,Dname,Dtel)设:学号Sno:CHAR(10),主码姓名Sname:CHAR(8)性别Sex: CHAR(2),取值范围:”男”或”女”出生日期Birthday:SMALLDATETIME考分Score:SMALLINT,取值范围:500~750系号Dno: CHAR(2),系的主码,学生的外码系名Dname: CHAR(30)系电话Dtel: CHAR(13)5.2 基本表的定义、修改与删除(Cont.) CREATE TABLE Dept(Dno CHAR(2) primary key,Dname CHAR(30),Dtel CHAR(13));CREATE TABLE Student (Sno CHAR(10),Sname CHAR(8),Sex CHAR(2) CHECK (Sex=‘男’or Sex=‘女’),Birthday SMALLDATETIME,Score SMALLINT CHECK(Score>=500 and Score<=750, Dno CHAR(2),PRIMARY KEY(Sno),FOREIGN KEY (Dno) REFERENCES Dept(Dno) );5.2 基本表的定义、修改与删除(Cont.)2. 修改基本表格式:ALTER TABLE 表名[ADD 列名数据类型[完整性约束条件]]| [DROP COLUMN 列名]| [ALTER COLUMN 列名数据类型];其中:ADD子句:增加新列及其完整性约束DROP子句:删除指定的列ALTER子句:修改列的定义,包括列名和数据类型5.2 基本表的定义、修改与删除(Cont.)例:在Student表中加入一列性别”民族”,6位字符.ALTER TABLE Student ADD Nation CHAR(6);例:将”民族”的数据类型改为bit.ALTER TABLE Student ALTER COLUMN NationCHAR(8);例:删除”民族”.ALTER TABLE Student DROP COLUMN Nation;5.2 基本表的定义、修改与删除(Cont.)3. 删除基本表格式:DROP TABLE 表名删除基本表时,该表的数据以及在此表上建立的视图及索引全部删除,因此执行删除操作时应特别小心.例:删除基本表Student.DROP TABLE Student;数据库实例设学生-课程数据库中包含三个表:Student(Sno ,Sname,Sex,Birthday,Score,Dname)SC(Sno,Cno ,Grade)Course(Cno ,Cname,CPno,Credit)其中:Sno: CHAR(10); Sname: CHAR(8); Sex: CHAR(2); Birthday: SMALLDATETIME; Score: INT; Dname: CHAR(30)Grade: SMALLINTCno: CHAR(6); Cname: CHAR(30); CPno: CHAR(6);credit: TINYINT学生课程选课分数m n5.3 SQL的数据更新插入数据插入单个元组插入子查询的结果数据修改修改一个元组的数据修改多个元组的数据根据查询结果修改删除数据删除一个元组删除多个元组删除子查询的结果5.3 SQL的数据更新(Cont.)1. 插入数据(1) 插入单个元组格式:INSERT INTO 表名[(列名1[,列名2>,…)]VALUES (常量1[,常量2],…);例:将一个新学生元组的全部属性插入到Student中.•INSERT INTO Student•VALUES('6053610301','李兰','女','1989-3-5',658,'实验学院');5.3 SQL的数据更新(Cont.)例:将一个新学生元组的部分属性插入到Student中. INSERT INTO Student(Sno,Sname,Dname)VALUES('1030310105','王芳','计算机系');未列出的属性列取空值.(2) 插入子查询结果INSERTINTO 表名([列名1[,列名2,……)]子查询;5.3 SQL的数据更新(Cont.)例:建立一个学生平均成绩表SG,包括学号Sno和平均成绩Gavg CREATE TABLE SG(Sno CHAR(10) NOT NULL UNIQUE, Gavg SMALLINT);INSERTINTO SG(Sno,Gavg)SELECT Sno, AVG(Grade)FROM SCGROUP BY Sno;(3) 插入应注意的问题对于表Student和SC若在SC中插入的记录的Sno在Student不存在,则系统不允许插入.5.3 SQL的数据更新(Cont.)2. 修改数据格式:UPDATE 表名SET 列名1=表达式1[,列名2=表达式2]……[WHERE 条件];对满足条件的元组中的指定列用相应的表达式的值修改.(1) 修改一个元组的值例:将学生“6053610301”的性别改为“男”.•UPDATE Student•SET Sex='男'•WHERE Sno='6053610301';5.3 SQL的数据更新(Cont.)(2) 修改多个元组的值例:将课号为“101001”的所有成绩提高10%. UPDATE SCSET Grade=Grade*1.1 Where Cno=‘101001’;例:计算每种商品的金额.UPDATE 商品SET 金额=单价*数量;例:将选修课号为“101001”的成绩每人提高10分. UPDATE SCSET Grade=Grade+10WHERE Cno=‘101001’;(3) 带子查询的修改例:将“计算机系”全体学生的成绩清零.UPDATE SCSET Grade=0WHERE ‘计算机系’= (SELECT DnameFROM StudentWHERE Student.Sno=SC.Sno);(4) 修改应注意的问题对于表Student和SC若修改Student中的Sno,而未修改SC中对应记录的Sno.若修改SC中的Sno,而未修改Student中对应的Sno.5.3 SQL的数据更新(Cont.)5.3 SQL的数据更新(Cont.)3. 删除数据格式:DELETEFROM 表名[WHERE 条件];删除满足条件的元组.(1) 删除一个元组例:删除“6053610301"的学生记录.DELETE FROM Student WHERE Sno=‘6053610301’;5.3 SQL的数据更新(Cont.)(2) 删除多个元组例:删除所有学生的选课记录.DELETEFROM SC;(3) 删除子查询的结果例:删除“计算机系”学生的全部选课记录.DELETEFROM SCWHERE ‘计算机系’=(SELECT DnameFROM StudentWHERE Student.Sno=SC.Sno);5.3 SQL的数据更新(Cont.)(4) 删除操作注意保持数据的一致性一个学生的各种数据可能存放在多个表中,但一个删除语句只能对一个表进行删除,这样可能会引起数据不一致问题.例:删除学生“6053610301”在Student表中的记录后,学生的基本数据被删除了.但在SC表中仍存在该学生的选课及成绩记录,若不删除,将会使数据不一致.解决办法:执行两次删除操作,既删除Student表中6053610301的记录,又删除SC表中6053610301的相关记录.为了保证数据的完整性和一致性,许多系统的DBMS都提供了相应的处理机制.当主表的记录被删除后,其参照关系的相关记录自动删除.5.4 SQL的数据查询查询功能是数据库系统的核心.格式:SELECT [ALL|DISTINCT] */目标列表达式[,目标列表达式2…]FROM 表名/视图名[WHERE 条件表达式][GROUP BY 列名1 [HAVING 条件表达式]][ORDER BY 列名2 [ASC/DESC]];5.4 SQL的数据查询(Cont.)其中:SELECT:表示查询ALL:显示所有满足条件的元组DISTINCT:消除重复元组*:所有列目标列表达式:查询结果,可以有函数运算FROM:从哪些表或视图中查询WHERE:查询条件GROUP BY:按指定的列分组,例如,计算每个学生平均成绩时,要按学号分组HAVING:GROUP BY分组的条件ORDER BY:输出时按指定列排序ASC:升序(缺省值)DESC:降序5.4 SQL的数据查询(Cont.)1. 单表查询(1) 查询指定列例:查询全体学生的学号和姓名.SELECT Sno,SnameFROM Student;在表Student对Sno,Sname进行投影相当于:Π(Student)Sno,SnameSnameSno5.4 SQL的数据查询(Cont.)(2) 按用户要求的顺序查询指定列例:查询全体学生的姓名,学号和所在系的系名. SELECT Sname,Sno,DnameFROM Student;查询结果列的顺序可以与表中列的顺序不一致.SnameSno Dname5.4 SQL的数据查询(Cont.)(3) 查询全部列例:查询全体学生的全部数据.方法1SELECT Sno,Sname,Sex,Birthday,Score,DnameFROM Student;方法2SELECT *FROM Student;5.4 SQL的数据查询(Cont.) (4) 查询经过计算的值例:查询全体学生的学号,姓名和出生年份.SELECT Sno,Sname,YEAR(Birthday)FROM Student;计算学生的年龄:SELECT Sno,Sname,YEAR(GETDATE( ))-YEAR(Birthday) FROM Student;计算学生出生的月份:SELECT Sno,Sname,MONTH(Birthday)FROM Student;5.4 SQL的数据查询(Cont.)(5) 消除取值重复的元组例:查询所有课程名称.SELECT DISTINCT CnameFROM Course;例:查询所有系名.SELECT DISTINCT DnameFROM Student;(6) 查询满足条件的元组查询条件可以通过WHERE 子句实现,其常用的条件有:IN, NOT IN 集合LIKE, NOT LIKE 字符匹配IS NULL,IS NOT NULL 空值AND,OR 多重条件BETWEEN AND, NOT BETWEEN AND 范围=, >, <, <=, >=, !=(<>), !<,!>比较谓词条件5.4 SQL 的数据查询(Cont.)5.4 SQL的数据查询(Cont.)1) 比较大小例:查询“计算机”系全体学生的学号和姓名.SELECT Sno,SnameFROM StudentWHERE Dname=‘计算机’;例:查询全体21岁以下学生的学号和姓名.SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)<=21;5.4 SQL的数据查询(Cont.)2) 在一个范围内查询例:查询全体年龄在20至23岁的学生的学号和姓名. SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)BETWEEN20 AND23;例:查询全体年龄不在20至23岁的学生的学号和姓名. SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)NOT BETWEEN20 AND23;5.4 SQL的数据查询(Cont.)3) 条件为一个集合例:查询“计算机”系和“电气工程”系全体学生的全部数据. SELECT *FROM StudentWHERE Dname IN(‘计算机’,’电气工程’);括号中的内容为一个集合,相当于:SELECT *FROM StudentWHERE Dname=‘计算机’OR Dname=’电气工程’;若查询不是上述系的学生,可用条件:WHERE Dname NOT IN(‘计算机’,’电气工程’);5.4 SQL的数据查询(Cont.)4)字符匹配用谓词LIKE表示字符串匹配,形式为:[NOT] LIKE ‘匹配串’[ESCAPE ‘换码字符’]匹配串中:%表示任意长度的字符串;_表示任意单个字符例:查询“本科生05级03系”学生的全部数据.SELECT *FROM StudentWHERE Sno LIKE‘10503%’;若查询除“本科生05级03系”学生的全部数据,则条件可改为:WHERE Sno NOT LIKE’10503%’;若查询全校“03系”学生的全部数据,则条件可改为:WHERE Sno LIKE’_ _ _03%’;5.4 SQL的数据查询(Cont.)例:查询姓名中有“伟”字的学生的全部数据.SELECT *FROM StudentWHERE Sname LIKE‘%伟%’;若查询所有姓“王”的且姓名仅为两个汉字的学生的全部数据WHERE Sname LIKE‘王_’;若查询的字符串中包含%或_,可用转意符ESCAPE‘<转换码>’例:查询名称为“DB_Design”课程的课号和学分.SELECT Cno,creditFROM CourseWHERE Cname LIKE‘DB\_Design’ESCAPE‘\’;其中:\为转换码,表示该字符码后面的‘\’或‘%’不再具有匹配符的意义,而表示该字符本身.5.4 SQL的数据查询(Cont.)5)空值查询例:查询所有选课但未参加考试学生的学号和课号. SELECT Sno,CnoFROM SCWHERE Grade IS NULL;成绩为空值若查询所有有成绩的学生的学号和课号:WHERE Grade IS NOT NULL;6)多重条件查询例:查询“计算机”系年龄在21岁以下的学生的学号和姓名. SELECT Sno,Sname FROM StudentWHERE Dname=‘计算机’AND YEAR(GETDATE())-YEAR(Birthday) <=21;5.4 SQL的数据查询(Cont.)(7) 对查询结果排序用ORDER BY子句,ASC表示升序,DESC表示降序.例:查询选修了“101001”号课程的学生学号和成绩,并按成绩从高到低排序.SELECT Sno,GradeFROM SCWHERE Cno=‘101001’ORDER BY Grade DESC;若先按成绩从高到低排序,成绩相同者按学号从小到大排序.ORDER BY Grade DESC,Sno;5.4 SQL的数据查询(Cont.)(8) 集函数统计元组个数:COUNT([DISTINCT|ALL]|*)统计一列中值的个数:COUNT([DISTINCT|ALL]<列名>) 对一列求和:SUM([DISTINCT|ALL]<列名>)对一列求平均值:AVG([DISTINCT|ALL]<列名>)求一列中最大值:MAX([DISTINCT|ALL]<列名>)求一列中最小值:MIN([DISTINCT|ALL]<列名>) DISTINCT: 消除重复元组ALL: 所有元组,缺省值例:统计学生总数.SELECT COUNT (*) FROM Student;例:统计男生人数.SELECT COUNT (*) FROM Student WHERE Sex=‘男’;例:统计选修了课程的学生人数.SELECT COUNT (DISTINCT Sno) FROM SC;在SC 中对Sno 投影,然后统计去掉重复元组后的记录个数.例:查找选修“101001”号课程的学生最高分.SELECT MAX (Grade) FROM SCWHERE Cno=‘101001’;5.4 SQL 的数据查询(Cont.)怎样获得尚未选课的学生人数?怎样获得女生人数?例:计算选修“101001”号课程的学生平均成绩.SELECT AVG (Grade) FROM SC WHERE Cno=‘101001’;若显示课号及平均成绩,则:SELECT Cno,AVG (Grade) FROM SCWHERE Cno=‘101001’GROUP BY Cno;例:统计每个学生的平均成绩.SELECT Sno, AVG (Grade) FROM SCGROUP BY Sno;按课号分组5.4 SQL 的数据查询(Cont.)5.4 SQL的数据查询(Cont.)(9) 对查询结果分组分组方法用GROUP BY子句将查询结果按某一列或多列值分组,值相等的为一组.分组的目的进一步细化集函数的作用对象.例:求各门课程的课号及其选修该课的人数.SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;例:求每一个学生的平均成绩.SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;5.4 SQL的数据查询(Cont.)若分组后还要按一定条件进行筛选, 可以用HAVING短语指定筛选条件.例:查询选修了3门以上课程的学生学号.SELECT Sno FROM SC GROUP BY SnoHAVING COUNT(*)>=3;先用GROUP语句进行分组,对每组用COUNT统计元组个数,对于每组元组个数大于等于3的学号进行输出.注意WHERE与HAVING语句的区别WHERE:作用于基本表或视图,选择满足条件的元组HAVING:作用于GROUP分成的子组,选择满足条件的组。
第二章 内容补充(视图和索引)
例2-18 在Course表上创建一个名cs_index的 非聚簇复合索引,索引关键字为Cno和CTno, 升序排列。
CREATE nonclustered INDEX cs_index
ON Course (CNo ASC, CTno ASC)
数据库原理与设计
在Course表CNo上创建一个唯一性的聚簇索引, 索引排列顺序为降序。
V_WANG(显示学号姓名
WHERE SName LIKE '王%'
视图的分类
行列子集视图
若视图是从单表中导出,只是去掉了基本表的 某些行和列,但保留了码,称这类视图为行列子 集视图。v_boy 和v_wang都是行列子集视图。
多表视图
多表视图是建立在多个表之上的。例如,建 立一个视图V_cjd,通过视图查看到学生的学号、 姓名、课程名和成绩。
视图的更新和维护 删除视图 DROP VIEW <视图名> 更新视图
是指通过视图来插入、删除和修改数据,对视 图的更新,要转化为对基本表的更新。 例如:删除男生视图v_boy中学号为03003的记录。 DELETE FROM v_boy WHERE Sno='03003'
视图受限更新
1.把S_G视图中,学号03002的学生平均成绩改为90
加密视图
对视图加密。就是永久隐藏视图定义文本。 注意 :该操作是不可逆的,加密后,不能修改视图
Create View cs WITH ENCRYPTION AS Select * from course
查询视图:
DBMS实现视图查询的方法: 实体化视图 视图消解法:把视图定义中的查询与用户 查询结合,转换成等价的对表的查询
数据库原理与设计
数据库SQL语句实验报告
数据库SQL语句实验报告《数据库原理及应⽤》实验报告SQL语句部分总成绩:实验⼀熟悉SQL SERVER,数据定义实验实验⼀成绩:⼀、实验⽬的1、利⽤查询分析器创建数据库2、利⽤查询分析器⽤SQL语⾔定义基本表、索引并进⾏相关操作⼆、实验步骤及内容在以下实验中,使⽤学⽣-课程数据库,它描述了学⽣的基本信息、课程的基本信息及学⽣选修课程的信息。
1.创建学⽣课程数据库5.将以上创建表S、C、SC的SQL命令以.SQL⽂件的形式保存在磁盘上。
6、在表S上增加“出⽣⽇期”属性列。
7、删除表S的“年龄”属性列。
8、删除S姓名列的唯⼀值约束。
9、修改SC表成绩属性列为精确数字型。
10、在表S上,按“Sno”属性列的唯⼀值⽅式建⽴索引。
11、删除表SC,利⽤磁盘上保存的.SQL⽂件重新创建表SC。
12、创建教材P74页习题5中SPJ数据库中的四个关系:S、P、J、SPJ。
三、实验结果:1.创建学⽣课程数据库create database Studend;(Sno CHAR(9)PRIMARY KEY,Sname CHAR(20)UNIQUE,Ssex CHAR(2),Sage smallint,Sdept char(20),);3.创建课程关系表C :(Cno char(4)primary key,Cname CHAR(40),Cpno char(4),Ccredit SMALLINT,);(Sno char(9),Cno char(4),Grade smallint,);5.将以上创建表S、C、SC的SQL命令以.SQL⽂件的形式保存在磁盘上。
6、在表S上增加“出⽣⽇期”属性列。
alter table S add Sbirthday datetime;7、删除表S的“年龄”属性列。
alter table S drop column Sage;8、删除S姓名列的唯⼀值约束。
alter table S drop UQ__S__7D78A4E7;9、修改SC表成绩属性列为精确数字型。
第4章_结构化查询语言SQL-6学时
说明1:
SELECT S••F联Tro接Um条D短件E语:N:两T后.个学面表接号进多行,姓个联表名接时查,,性询两别的个前,表成提之是绩间一用;定逗有号“隔相开同。” FROM STUDENT,S的C字O段R名E。; WHERE 成•联绩接>的8方0法A:如N:D表“名Ss1Tt.u字Ud段eDn名tE.学=N表号T名=.学s2c.字o号r段e.=学名S号C”ORE.学号
无条件查询小结:
6)结果排序 【例】查询显示COURSE表中的所有信息,并按学分 升序排序。
SELECT * FROM COURSE ORDER BY 学分
2、单表条件查询----SELECT … FROM …WHERE …
【格式】SELECT [ALL | DISTINCT] <字段列表> FROM <表> [WHERE <条件表达式> ]
1975~1979,IBM San Jose Research Lab的关系数据库管 理系统原型System R实施了这种语言
SQL-86是第一个SQL标准
(ANSI)
SQL-89、SQL-92(SQL2)、SQL-99(SQL3) (ANSI)
●现状:大部分DBMS产品都支持SQL,成为操作数据库的标 准语言
第四章 结构化查询语言SQL
本章主要内容
4.1 数据查询 4.2 数据操作 4.3 数据定义 本章作业
SQL语言的基本概述
●SQL:Structured Query Language 缩写
结构化查询语言,目前关系型数据库的通用语言。
●SQL的发展
1974年,由Boyce和Chamberlin提出
数据库T-SQL语言操作(T-SQL语句、数据库、表、视图、索引)
数据库T-SQL语⾔操作(T-SQL语句、数据库、表、视图、索引)T-SQL语⾔按⽤途分四部分1. 数据定义语⾔(CREATE,DROP,ALTER)2. 数据操作语⾔(INSERT,DELETE,UPDATE)3. 数据查询语⾔(SELECT)4. 数据控制语⾔(GRANT,REVOKE,DENY)数据类型1. 系统数据类型2. ⽤户⾃定义数据类型(建⽴⽅式:a.图形化⽅式 b.命令⽅式)1use TEST2EXEC sp_addtype sno,'varchar(10)','nonull'3EXEC sp_droptype sno变量命名规则:字母、下划线、@或#开头,但不能全为下划线、@或#不能为“关键字”,不能嵌⼊空格及其他特殊字符,如需使⽤则需要双引号或⽅括号括起1.局部变量:由⽤户声明,必须以@开头,只在定义该变量的过程中有效,局部变量必须先声明后使⽤注意:第⼀次声明变量时,其值设置为NULL。
局部变量不能使⽤“变量=变量值”的格式进⾏初始化,必须使⽤SELECT或SET语句来设置其初始值。
如果声明字符型的局部变量,⼀定要在变量类型中指明其最⼤长度,否则系统默认其长度为1。
若要声明多个局部变量,请在定义的第⼀个局部变量后使⽤⼀个逗号,然后指定下⼀个局部变量名称和数据类型。
1USE student2DECLARE@var1char(10),@var2int3SET@var1='number'4select@var2=cgrade5from sc6where sno='201810010'78print@var1+"s"2.全局变量:由系统定义,供SQL server系统内部使⽤的变量,任何程序任何时间都可以调⽤。
通常以“@@”开头。
T-SQL语句1.注释语句(1) --(2) /*……*/2.批处理--GO3.控制流程语句(1) begin...end语句(相当于C语⾔中的{} )(2) if...else语句(可嵌套)(3)case语句(多条件选择语句)(4)print语句(屏幕输出语句)(5)while语句(有条件的循环语句)(6)goto语句(⽆条件跳转语句)(7)break语句(8)continue语句4.常⽤函数(系统函数、⽤户⾃定义函数)⼀些系统函数:(1)字符串函数(2)数学函数(3)⽇期和时间函数(4)聚合函数注意:⽤户⾃定义函数:1.分类:标量值函数:返回单个值内联表值函数:返回可更新的表多语句表值函数:返回不可更新的表2.标量值函数命令⽅式创建1CREATE FUNCTION f2(@a real,@b real) 2RETURNS real3AS4BEGIN5IF@a>=@b6RETURN@a7RETURN@b8END910PRINT'最⼤值为'11PRINT dbo.f2(77,56)1CREATE FUNCTION f3(@n real)2RETURNS real3AS4BEGIN5DECLARE@i real,@sum real6SET@i=07SET@sum=08WHILE@i<@n9BEGIN10SET@i=@i+111SET@sum=@sum+@i12END13RETURN@sum14END1516PRINT dbo.f3(10)3.⾃定义函数的调⽤(1)标量值函数可以使⽤select、print、exec调⽤(2)表值函数只能⽤select调⽤4.删除⽅式drop function 函数名数据库数据库概述1.数据库常⽤对象:表、数据类型、视图、索引、存储过程、触发器系统数据库:master、model、tempdb、msdb2.数据库存储结构(数据库⽂件、数据库⽂件组):数据库⽂件:存放数据库数据和数据库对象的⽂件。
sql课程设计
4. SQL注入防护:了解SQL注入的原理,学习编写安全的SQL代码,防止数据库被攻击;
5.数据库规范与文档编写:掌握数据库命名规范,学习编写清晰的数据库文档,提高数据库可维护性;
6. SQL编程规范:学习编写规范、易读的SQL代码,遵循编码最佳实践;
3、教学内容
本节SQL课程设计将重点拓展以下教学内容:
1.高级SQL特性:窗口函数、公共表表达式(CTE)、递归查询;
2.数据库设计原则:第三范式、BCNF范式、规范化与反规范化;
3. SQL与NoSQL数据库的对比:关系型数据库与文档型、键值对、列存储、图形数据库的区别;
4.备份与恢复策略:全备份、差异备份、事务日志备份;
8.实战项目挑战:参与模拟实际工作场景的项目挑战,如构建高并发下的数据查询服务,提升应对复杂场景的能力。
sql课程设计
一、教学内容
本节SQL课程设计基于教材《数据库原理与应用》第七章“SQL语言及其应用”,内容包括:
1. SQL语言基础:数据定义、数据操纵、数据查询、数据控制;
2. SQL语句编写:SELECT语句、INSERT语句、UPDATE语句、DELETE语句;
3.常用函数:COUNT()、SUM()、AVG()、MAX()、MIN();
4.连接查询:内连接、外连接(左连接、右连接、全连接);
5.子查询与联合查询;
6.视图的创建、修改和删除;
7.索引的创建、修改和删除;
8.事务处理:COMMIT、ROLLBACK、SAVEPOINT。
本课程设计旨在帮助学生掌握SQL语言的基本用法,熟练运用SQL语句进行数据库的操作和查询,培养学生解决实际问题的能力。
实验5 索引和视图
实验5 索引和视图一、实验目的1.掌握索引的使用方法2.掌握数据完整性的实现方法3.熟悉视图的概念和作用4.掌握视图的创建方法5.掌握如何查询和修改视图二、实验准备1.了解索引的作用与分类2.掌握索引的创建方法3.了解视图的概念4.了解创建视图的方法5.了解对视图的操作三、实验内容及要求1.创建索引1)在Employees表的Name列和Address列上建立复合索引。
2)对Departments表上的DepartmentName列建立唯一性索引。
3)使用CREATE INDEX语句能创建主键吗?4)向Employees表中的出生日期列添加一个唯一性索引,姓名列和性别列上添加一个复合索引。
5)假设Departments表中没有主键,使用ALTER TABLE语句将DepartmentID列设为主键。
6)添加主键和添加普通索引有什么区别?7)创建与Departments表相同结构的表Departments1,将DepartmentName设为主键,DepartmentsID上建立一个索引。
2.删除索引1)使用DROP INDEX语句删除表Employees上的索引depart_ind。
2)使用ALTER TABLE语句删除Departments上的主键和索引Dep_ind。
3.创建视图1)创建YGGL数据库上的视图DS_VIEW,视图包含Departments表的全部列。
2)创建YGGL数据库上的视图Employees_view,视图包含员工号码、姓名和实际收入。
4.查询视图1)从视图DS_VIEW中查询出部门号为3的部门名称。
2)从视图Employees_view查询出姓名为“王林”的员工的实际收入。
5.更新视图1)向视图DS_VIEW中插入一行数据:6,广告部,广告业务。
2)执行完该命令使用SELECT语句分别查看视图DS_VIEW和基本表Departments中发生的变化。
3)尝试向视图Employees_view中插入一行数据,看看会发生什么情况。
数据的基本操作(定义--视图)
SQL语言1.1 数据定义1.实验目的:熟悉SQL的数据定义语言,能够熟练地使用SQL语句来创建和更改基本表,创建和取消索引。
2.实验内容:这一节实验的主要内容包括:z使用CREATE语句创建基本表。
z更改基本表的定义,增加列,删除列,修改列的数据类型。
z创建表的升降序索引。
z取消表、表的索引或表的约束。
3.实验步骤要求:(1)使用SQL语句创建关系数据库表:人员表PERSON(P#,Pname,Page,Pgender),房间表ROOM(R#,Rname,Rarea),表P-R(P#,R#,Date)。
其中P#是表PERSON的主键,具有唯一性约束,Page具有约束:大于18;R#是表ROOM的主键,具有唯一性约束。
表P-R中的P#,C#是外键。
(2)更改表PERSON,增加属性Ptype(类型是CHAR,长度为10),取消Page大于18的约束。
把表ROOM中的属性Rname的数据类型改成长度为30。
(3)删除表ROOM的一个属性Rarea。
(4)取消表PR。
(5)为ROOM表创建按R#降序排列的索引。
(6)为PERSON表创建按P#升序排列的索引。
(7)创建表PERSON的按Pname升序排列的唯一性索引。
(8)取消PERSON表P#升序索引。
4.自我实践(1)创建数据库表CUSTOMERS(CID,CNAME,CITY,DISCNT),数据库表AGENTS(AID,ANAME,CITY,PERCENT,数据库表PRODUCTS(PID,PNAME)。
其中,CID,AID,PID分别是各表的主键,具有唯一性约束。
(2)创建数据库表ORDERS(ORDNA,MONTH,CID,AID,PID,QTY,DOLLARS)。
其中,ORDNA是主键,具有唯一性约束。
CID,AID,PID分别是外键引用自表CUSTOMERS,表AGENTS,表PRODUCTS。
(3)增加表数据库表PRODUCTS三个属性列:CITY,QUANTITY,PRICE。
SQL的数据定义功能
• ቤተ መጻሕፍቲ ባይዱ如:ALTER TABLE S ADD ADDRESS CHAR(30);
该例为S表增加了一个ADDRESS(地址)列。
尽管SQL提供了为一个表增加一列的语句, 它并没有提供删除表的列、改变列名或改变列 的数据类型的语句。因此,如果要这么做,那 就必须生成一个新的表。
1.1 基本表的定义、修改和删除
• 视图名是要定义的视图的名字,同表名一样,要经 常用到。
• 语句中的SELECT语句作为子查询将以虚拟表的形 式得出结果。SELECT子查询中不能使用ORDER BY子句,也不能包含UNION(合并有类似结构的 表的关系代数并操作符)操作,子句FROM <表名 >中的表名既可以是表,也可以是视图,即视图既 可以根据表,也可以根据其他视图来定义。
数据。 • 视图机制对机密数据提供了自动的安全保护功能。
1.3 索引
• 索引是关系数据库非常重要的部分。它们被用作包含所关心 数据的表指针。通过一个索引,能从表中直接找到一个特定 的记录,而不必连续顺序地扫描这个表,一次一个记录地去 查找。对于大的表来说,索引是必要的。没有索引,要想得 到一个结果可能要等好几个小时、好几天,而不是几秒钟时 间。
1.1 基本表的定义、修改和删除
• 定义基本表的语句格式 CREATE TABLE <表名>(<列名1> < 数据类型1> [NOT NULL] [,<列名2> <数据类型2> [NOT NULL]……])
[其他参数];
其中CREATE TABLE后跟要定义的表 的名称,列名和数据类型中给出表的逻辑 数据结构定义,即表中的列命名、数据类 型选择并给出是否允许空值。各列名信息 之间用逗号相隔,列名与类型说明之间、 类型说明与是否允许空值之间用空格相隔。 任选项“其他参数”与具体系统有关,这 里不作说明。
实现SQL Server数据库中的视图和查询
§3 管理视图 1、使用系统存储过程查看视图信息
sp_help 表/视图 sp_helptext 表/视图 sp_depends 表/视图
2、使用T-SQL语句修改视图 ALTER VIEW语句的语法格式为: ALTER VIEW [<数据库名>.][<所有者>.]视图 名[(列名[,...n])] [WITH {ENCRYPTION|SCHEMABINDING|VIEW_METADATA}] AS SELECT查询语句 [WITH CHECK OPTION] 参数说明同CREATE VIEW相同。
(5)在CREATE VIEW语句中,对于SELECT 查询语句有如下限制: 创建视图的用户必须对该视图所参照或引用 的表或视图具有适当的权限。 在查询语句中,不能包含ORDER BY(如果 要包含的话SELECT子句中要用TOP n [percent])、 COMPUTE或COMPUTE BY关键字。也不能包 含INTO关键字。 不能在临时表中定义视图(不能引用临时表)。
FROM { 表名|视图名 } [ ,...n ]
当有多个数据源时,可以使用逗号“,”分隔, 但是最多只能有16个数据源。数据源也可以像 列一样指定别名,该别名只在当前的SELECT语 句中起作用,方法为:数据源名 AS 别名,或 者数据源名 别名。指定别名的好处在于以较短 的名字代替原本见名知意的长名。
(8)SCHEMABINDING:将视图绑定到架 构上。指定 SCHEMABINDING 时,SELECT 查询语句必须包含所引用的表、视图或用户定 义函数的两部分名称 (owner.object)。不能除去 参与用架构绑定子句创建的视图中的表或视图, 除非该视图已被除去或更改,不再具有架构绑 定。否则,SQL Server 会产生错误。另外,如 果对参与具有架构绑定的视图的表执行 ALTER TABLE 语句,而这些语句又会影响该架构绑定 视图的定义,则这些语句将会失况: ①只能在当前数据库中创建视图。 ②视图中最多只能引用1024列。 ③如果视图引用的基表或者视图被删除, 则该视图不能再被使用,直到创建新的基表或 者视图。 ④如果视图中某一列是函数、数学表达式、 常量或者来自多个表的列名相同,则必须为列 定义名称。
SQL最全基础教程
索引优化原理及实践指南
索引原理
索引是一种数据结构,可以提高数 据检索的速度。通过创建索引,数 据库系统可以快速定位到表中的特
定行。
索引优化
常见的索引类型包括B树索引、哈 希索引、位图索引等,不同类型的
索引适用于不同的场景和需求。
子查询分类
标量子查询、列子查询、行子查询和表子查询。标量子查询返回单个值,列子查询返回一列数据,行子查 询返回一行数据,表子查询返回多行多列数据。
嵌套使用技巧
子查询可以嵌套在SELECT、FROM和WHERE子句中。在SELECT子句中,子查询可以作为表达式的一部 分;在FROM子句中,子查询可以作为派生表使用;在WHERE子句中,子查询可以作为条件表达式的一 部分。
透明数据加密(TDE)
对数据库文件进行加密,保护静止数据的安全性。
审计跟踪记录访问行为
审计策略配置
配置审计策略以记录对数 据库对象的访问行为。
实时监控与报警
实时监控数据库访问行为, 并在检测到异常时及时报 警。
审计日志分析
分析审计日志以检测异常 访问行为或潜在的安全威 胁。
08
总结回顾与拓展学习资源
对查询结果进行排序。
排序顺序
升序(ASC)或降序(DESC),默认为升 序。
排序列
指定要排序的列名或列别名。
多列排序
可指定多个列进行排序,先按第一列排序, 再按第二列排序,以此类推。
分组聚合
01
02
03
04
05
GROUP BY子句 分组列 作用
聚合函数
HAVING子句作 分组条件 用
SQL基本表查询基本表索引与视图的定义删除和修改
SQL基本表查询基本表索引与视图的定义删除和修改实验二实验题目:SQL基本表查询基本表、索引与视图的定义、删除和修改指导老师:李萍专业班级:计算机科学与技术系1001班姓名:刘胜虎,2010100120,2012年 9月29日实验类型__验证型__ 实验室_软件实验室一__1一、实验题目SQL 基本表查询基本表、索引与视图的定义、删除和修改二、实验目的和要求使学生熟悉SQL Server的企业管理器的用法,初步了解SQL Server查询分析器的使用方法,熟悉SQL SERVER的常用数据类型,加深对SQL和SQL语言的查询语句的理解。
熟练掌握简单表、索引与视图的创建与修改。
三、实验内容1( 基本表的建立:a) 建立一个“学生表student”,它由学号xh、姓名xm、性别xb、年龄nl、所在系xi五个属性组成,其中学号属性为主属性,并且其值是唯一的。
b) 建立“课程course”包括课程号kch,课程名称kcmc,先修课程xxkc,学分xf,要求建立主键课程号c) 建立“选课表sc”包括学号xh,课程号kch,成绩grade,要求建立主键及与student及sc表联接的外键基本表的修改: 2(a) 在选课表中增加一列“任课教师rkjs”b) 删除选课表中rkjs一列c) 将student表的xm一列允许空值的属性更改成不允许为空,将列xm的长度由char(8)改为char(10)d) 建立一个临时表,再将其删除3(索引的建立与删除a)在学生表中以学生的姓名建立降序索引b)在课程表中以课程名建立升序,以学分建立降序索引c)删除以上索引四、实验步骤Create database schoolon(name='school',filename='e:\database\sschool.mdf')\database\school.ldf') log on(name='school1',filename='e: /新建数据库schooldrop database studentcreate table Student(xh char(9) primary key,xm char(20) ,xb char(2),nl smallint,/新建student表 xi char(20));create table Course(kch char(4) primary key,2kcmc char(40),xxkc char(4),xf smallint,) /新建Course表create table sc(xh char(9), kch char(4),Grade smallint,primary key (xh,kch),foreign key (xh) references Student(xh), /新建sc表 );alter table sc add xkjs char(20) alter table sc drop column xkjs; alter table student alter column xm char(20) not nullalter table student alter column xm char(10) /基本表的修改 create table Student1(xh char(9) primary key,xm char(20) ,xb char(2),nl smallint,xi char(20));drop table student1 /基本表的删除create unique index stu on student(xm desc)create unique index cou on Course(kcmc asc,xf desc)drop index stu on student drop index cou on course /索引的建立与删除CREATE VIEW C_StudentASSELECT xh, xm, nl, xiFROM StudentWHERE xi='数学'WITH CHECK OPTION /建立C_Student视图SELECT xm,nlFROM C_StudentWHERE nl<20;update C_Studentset xm='黄海'where xh='s05'deletefrom C_Student3where xh='s09'/更新视图drop view C_Student /删除视图命令效果图五、实验总结通过这次实验我能够熟的练使用命令语句建立数据库,能使用命令语句创建、修改和删除简单表、索引与视图。
数据库实验报告(2)
数据库原理及应用实验报告实验二实验题目:SQL基本表查询基本表、索引与视图的定义、删除和修改指导老师:李萍专业班级:计算机科学与技术系1106班姓名:李锋()2013年9月29日实验类型__验证__ 实验室_软件实验室一__ 一、实验题目:SQL 基本表查询基本表、索引与视图的定义、删除和修改二、实验目的和要求:熟悉SQL Server的企业管理器的用法,初步了解SQL Server查询分析器的使用方法,熟悉SQL SERVER的常用数据类型,加深对SQL和SQL语言的查询语句的理解。
熟练掌握简单表、索引与视图的创建与修改。
三、实验内容:(1)基本表的建立:a)建立一个“学生表student”,它由学号xh、姓名xm、性别xb、年龄nl、所在系xi五个属性组成,其中学号属性为主属性,并且其值是唯一的。
b)建立“课程course”包括课程号kch,课程名称kcmc,先修课程xxkc,学分xf,要求建立主键课程号c)建立“选课表sc”包括学号xh,课程号kch,成绩grade,要求建立主键及与student及sc表联接的外键(2) 基本表的修改:d)在选课表中增加一列“任课教师rkjs”e)删除选课表中rkjs一列f)将student表的xm一列允许空值的属性更改成不允许为空,将列xm的长度由char(8)改为char(10)g)建立一个临时表,再将其删除(3)索引的建立与删除a)在学生表中以学生的姓名建立降序索引b)在课程表中以课程名建立升序,以学分建立降序索引c)删除以上索引(4) 建立、删除和更新视图a)建立数学系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有数学系的学生,视图的属性名为Sno,Sname,Sage,Sdept。
CREATE VIEW C_Student AS SELECT Sno, Sname, Sage, SdeptFROM StudentsWHERE Sdept=’数学’ WITH CHECK OPTIONb)删除视图在数学系的学生视图C_Student中找出年龄(Sage)小于20岁的学生姓名(Sname)和年龄(Sage)。
《MySQL数据库技术与应用》项目4 索引和视图
• 2.安全性 • (1)在表中增加一个标志用户名的列。 • (2)建立视图,使用户只能看到标有自己用户名的行。 • (3)把视图授权给其他用户。 • 3.独立性 • (1)如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,
通过视图屏蔽表的变化,从而使应用程序可以不动。 • (2)如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过
• 三、查看索引 • 在 MySQL 中,可以使用 SHOW INDEX 语句查看表中创建的索引。
• 案例——查看book_sort表中的索引文件。
• 运行结果如图所示。
• 四、创建索引 • CREATE INDEX 语句用于在表中创建索引。在表中创建索引,以便更加快速
高效地查询数据。
案例——建立普通索引
•
在视图中添加数据
• 4.删除数据
查询视图
• 案例——在v_book_sort视图中删除数据。
• (1)修改数据。 • (2)查询视图。
•
在视图中添加数据
查询视图
• 五、修改和删除视图 • 1.修改视图 • 修改视图是指修改数据库中已存在的表的定义。当基本表的某些字段发生改变时,
可以通过修改视图来保持视图和基本表之间一致。 • 可以使用 ALTER VIEW 语句来对已有的视图进行修改。
• 3.查看视图状态信息
• 案例——查看vn_reader的视图状态信息。
• 4.查看视图定义
• 案例——查看v_fee的视图详细定义。
• 四、视图数据的查询与更新 • 1.查询视图数据 • 视图一经定义之后,就可以如同查询数据表一样,使用 SELECT 语句查询视图中的
数据,语法和查询基础表的数据一样。
sql数据库的查询和视图
第4章数据库的查询和视图一、数据的关系运算:运算的对象和结果都是表(表达方式)包括:选择、投影、连接1.选择(selection):单目运算从行方面分割表记:σF(R)其中:F为条件表达式 R为表例:σF(XS),F为性别=‘男’Λ专业名=‘计算机’2.投影(projection):单目运算从列方向分割表记:ΠA(R)其中:A为列名列表;R为表例:Π姓名,专业名,总学分(XS)3.连接(join):多目运算记:R F S 其中:F为条件表达式;R、S为表①自然连接:R S,按两表的共同属性连接例:XS XS_KC? XS XS_KC KC②条件连接:R F S,两表按下条件连接例:上例中的条件F二、数据库查询使用select 语句实现表的关系运算,用符合条件的数据构成结果表语法:select <select_list>into new_table_nameform table_sourcewhere search_conditiongroup by group_by_expressionhaving search_conditionorder by order_expression [ASC/DESC] 1.选择列①选择表中的列:select列名,列名,……(*)from表名where 条件②在结果表中使用文字串(增强检索结果的可读性)select‘串’,列名,‘串’,列名,……from表名where条件③改变结果列标题(结果表更个性化,可读性强)select列名AS新列标,列名AS 新列标,……(或新列标=列名,新列标=列名,……)from表名where条件④结果表数据替换(使检索结果更能反映出有用信息)select新列标=case when条件1 then‘串’(表达式)when条件2 then‘串’(表达式)……else表达式endfrom 表名where 条件⑤结果表中显示列计算值select表达式,表达式,……from表名⑥消除结果集中的重复行select distinct列名,列名……⑦限制结果集返回行数select top n 列名,列名……2、选择行(用where条件过滤)(紧在from之后)①表达式比较:(比较运算符)比较的表达式之一或两个为NULL时,返回unknown,否则返回true/false②模式匹配:(like谓词)[谓词:返回逻辑值的运算符、关键字]字符串表达式1 [not] like字符串表达式2 [escape‘不匹配字符’](可以使用通配符进行匹配)匹配通配符:%:任意一串字符例:select * from xs where 姓名 like‘王%’_:任意一个字符例:select * from xs where 姓名 like‘王_’[]:指定范围,如[a-z]、[0-9]、[abcde]……[^]:指定不属于范围,如[^a-z]、[^0-9]、[^abcde]③范围比较:表达式[not] between 表达式1 AND表达式2注:表达式1<=表达式2,包括表达式1和2表达式IN(表达式1,表达式2,……,表达式N)④空值比较表达式is [not] NULL⑤contains 谓词:在表中指定字符串的搜索(精确、模糊、加权匹配)contains(列/*,‘匹配串’)注:先为要操作的表建立全文索引(第六章Create Index,企业管理器)⑥freetext 谓词:与contains相似,不如contains精确freetext(列/*,‘匹配串’)⑦子查询:用另一个查询结果做为where条件的一部分,可嵌套★ IN:判断某个值是否在子查询结果中,只能返回一列数据。
数据库系统概论:第4章 关系数据库标准语言——SQL语言1
4)删除完整性约束
例:删除“Height”属性列上的CHECK约束。 ALTER TABLE Student DROP
CONSTRAINT Chk1;
27
5)删除属性列
例:删除Student表中新增加的“Height”属性列。 ALTER TABLE Student DROP COLUMN Height;
2
2、SQL语言应用情况
(1) Oracle、Sybase、Informix、Ingres、 DB2、SQL Server、Rdb等大型数据库管理系统 实现了SQL语言; (2) Dbase、Foxpro、Acess等PC机数据库管理 系统部分实现了SQL语言; (3)可以在HTML(Hypertext Markup Language, 超文本标记语言)中嵌入SQL语句,通过WWW访 问数据库; (4)在VC、VB、Delphi、PB也可嵌入SQL语句。
/*外键约束*/ Credit NUMBER);
21
例3:建立一个学生选课表SC,所有约束条件均为表
级完整性约束。
CREATE TABLE SC
( Sno CHAR(8),
Cno CHAR(8),
Grade NUMBER,
PRIMARY KEY(Sno,Cno),
/*主键约束*/
FOREIGN KEY(Sno) REFERENCES Student(Sno)
25
3)增加完整性约束
例:给Student表中“Height”属性列增加一 个CHECK约束,要求学生的身高要超过140厘 米才行。 ALTER TABLE Student ADD CONSTRAINT Chk1 CHECK(Height>140);
实验三 索引和视图
实验三索引和视图一、实验目的1.掌握利用SSMS和T—SQL语句创建和删除索引的两种方法。
2.掌握利用SSMS和T—SQL语句创建、查询、更新及删除视图的方法。
ssex char(3)constraint ssex_ch check (ssex in('男','女')),sage int not null constraint sage_ch check (sage between 15 and 30),sdept char(10))values('C02','数据结构','C05',2) insert into coursevalues('C03','数据库','C02',2) insert into coursevalues('C04','DB_设计','C03',3)insert into coursevalues('C05','C++',null,3)insert into coursevalues('C06','网络原理','C07',3)create table sc(sno char(5)not null,cno char(5)not null,grade int constraint grade_ch check(grade between 0 and 100),primary key(sno,cno),constraint fk_sno foreign key (sno)references student(sno),constraint fk_cno foreign key (cno)references course(cno))insert into scvalues('S01','C01',92)insert into scvalues('S01','C03',84)insert into scvalues('S02','C01',90)insert into scvalues('S02','C02',94)insert into scvalues('S02','C03',82)insert into scvalues('S03','C01',72)insert into scvalues('S03','C02',90)insert into scvalues('S04','C03',75)2.索引的建立、删除①用SSMS的方式为Student表按Sno(学号)升序建唯一索引②用T—SQL语句为Course表按Cno(课程号)升序建唯一索引,create unique index course_cnoon course(cno asc)③用T—SQL语句为SC表按Sno(学号)升序和Cno(课程号)号降序建唯一索引。
结构化查询语言SQL(2)——数据定义语言
例2:建立一个“学生”表Student,它由学号 :建立一个“学生” ,它由学号Sno、姓名 、姓名Sname、 、 性别Ssex、年龄 五个属性组成。 性别 、年龄Sage、所在系 、所在系Sdept五个属性组成。其中学号不 五个属性组成 能为空,姓名取值唯一。 能为空,姓名取值唯一。 CREATE TABLE Student(Sno CHAR(5) NOT NULL, ( ( ) Sname CHAR(8)UNIQUE, ( ) 表名 Ssex CHAR(2), 数据类型 ( ) Sage INT, 列名(字段名) 列名(字段名) Sdept CHAR(20)); ( ));
SQL的数据定义语句 的数据定义语句
操作对象 表 视图 索引
操作方式 创建 create table create view create index 删除 drop table drop view drop index 修改 alter table
定义数据库 创建、 创建、修改和撤消数据库 定义基本表 定义、 定义、修改与删除基本表 定义索引 建立与删除索引
例6:建立一个“成绩”表chengji,它由学号 、课程号 :建立一个“成绩” ,它由学号sno、课程号cno、 、 成绩cj三个属性组成 定义此表并定义相应的主键和外键。 三个属性组成。 成绩 三个属性组成。定义此表并定义相应的主键和外键。 CREATE TABLE chengji (sno CHAR(5), cno CHAR(3), cj INT, primary key (sno,cno), foreign key (sno) references student(sno), foreign key (cno) references cullum(cno) );
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库实验报告
课程设计
实验题目:教务辅助管理系统
指导老师:李萍
专业班级:计算机科学与技术系1001班
组长:陈嘉斌(2010100137)
组员:刘瑞(20101001)
陈振北(20101001)
陈才(20101001)
2012年12月25日
一、实验题目
教务辅助管理系统
二、实验目的和要求
学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库的目的。
三、实验内容
1、主要的数据表
教师基本信息表,课程表,教室资源表等
2、功能模块
1)对上课教师基本信息进行管理。
2)对全院开设的课程进行管理。
3)录入教师基本上课信息。
4)实现自动排课功能。
5)计算工作量
6)能够进行各种数据统计。
7)能够输出相应的报表。
8)具有数据备份和数据恢复功能。
四、实验步骤
1、数据库的ER图:
2.数据库的字段分析
登录表:
课程表:
部门表:
教师表:
中间表:
2.通过Powerdesigner创建数据库的模型,并建立关系,如图:
连接数据源:
3.连接数据库,因为本程序所用的是mysql数据库,所以这里只体现mysql的连接方式,生成一个.sql的文件,并把其导入mysql数据库,如图:
4.在程序中建立数据库的连接,这里所用的就是jdbc连库。
其主要实现代码为:配置文件c3p0-config.xml中的代码:
jdbc使用库中的代码为:
数据操作层的操作如下:
显示所有老师的信息,其中是采用多表连接查询:
对老师的信息进行修改:
对老师的信息进行增加:
对所有的部门和课程尽心查询:
对数据进行分页操作:
在model层,进行了对象的定义,以方便定义数据库的相关操作:
<1>分别定义了admin对象,并对实现了get 和set方法,其字段分别为:
private String name ;
private String password;
private int quanxian=1;
private String rolename=null;
<2>定义老师对象,其字段如下图,并对其进行各个字段的get和set方法的实现:
分页对象如下图所示,并对其字段进行get和set方法的实现:
在selvet中进行逻辑的判断,判断进入各个页面的方式:其中登录和修改,增加采用post方法,如图:
其他方法均采用get方法:
实现逻辑为:
在界面中显示如下:
登录界面:
进入系统后的显示界面:
添加用户界面:
对用户的增删改查按钮实现:
五、实验总结
本次课程设计,我们是基于java语言设计的,在实验中,我们主要应用的技术有:JDBC连库、xml文件的配置、cmv三层架构设计。
其中对于数据库的设计用到了powerdesgner的数据库建模工具。
通过本次试验,我们了解到写一个大的程序需要用团队合作,并且在团队合作中三层架构更容易实现团队的合作,能充分体现各个队员特长,并且其能更加简单的实现业务逻辑。