数据库原理-实验2-交互式SQL

更新时间:2024-04-19 19:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、 实验目的

1. 2. 3. 4. 5.

熟练掌握表的创建、修改和删除方法; 熟悉索引的创建和删除; 熟悉视图的创建和删除;

熟悉数据的各种更新(增、删改)操作;

熟悉各种数据查询(单表查询、连接查询、嵌套查询和集合查询)

二、实验环境

SQL Server 2008

三、实验准备知识 1.表的定义

1)表的创建

CREATE TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name (

{ /*列的定义*/

| column_name AS computed_column_expression [PERSISTED [NOT NULL]] /*定义计算列*/ }

[ ] [ ,...n ] /*指定表的约束*/ )

[ ON { partition_scheme_name ( partition_column_name ) | filegroup | \ /*指定分区方案和存储表的文件组*/

[ { TEXTIMAGE_ON { filegroup | \ /*指定存储text、ntext和image类型数据的文件组*/ [ ; ]

说明:database_name是数据库名,schema_name是新表所属架构的名称,table_name是表名,表的标识按照对象命名规则。如果省略数据库名则默认在

当前数据库中创建表;如果省略架构名, 则默认是“dbo?。

::= column_name data_type

/*指定列名、类型*/

/*指定排序规则*/

[ COLLATE collation_name ] [ NULL | NOT NULL ] [

/*指定是否为空*/

[ CONSTRAINT constraint_name ] [ DEFAULT constant_expression ]

/*指定默认值*/

| [ IDENTITY [ ( seed ,increment ) ] [ NOT FOR REPLICATION ] ]/*指定列为标识列*/ ]

[ ROWGUIDCOL ]

/*指定列为全局标识符列*/

/*指定列的约束*

[ [ ...n ] ]

2)表的修改

修改表结构可以使用“ALTER TABLE”语句。 语法格式:

ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name {

[ ALTER COLUMN column_name } ]

/*修改已有列的属性*/

{ new_data_type [ ( precision [ , scale ] ) ] [ COLLATE < collation_name > ] [ NULL | NOT NULL ]

| {ADD | DROP } [ ROWGUIDCOL | PERSISTED ]

| [ WITH { CHECK | NOCHECK } ] ADD /*添加列*/

{

| column_name AS computed_column_expression [PERSISTED

[NOT NULL]]

| } [ ,...n ]

| DROP

/*删除列*/

{ [ CONSTRAINT ] constraint_name [ WITH ( [ ,...n ] ) ] | COLUMN column_name } [ ,...n ]

| [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT { ALL | constraint_name [ ,...n ] } | { ENABLE | DISABLE } TRIGGER { ALL | trigger_name [ ,...n ] }

| SWITCH [ PARTITION source_partition_number_expression ] }

2. 数据操作

1)插入数据

TO [ schema_name. ] target_table

[ PARTITION target_partition_number_expression ]

插入记录使用INSERT语句。 语法格式:

[ WITH [ ,...n ] ] /*指定临时结果集,在SELECT语句中介绍*/

INSERT [ TOP ( expression ) [ PERCENT ] ] [INTO]

{ table_name /*表名*/ | view_name /*视图名*/

| rowset_function_limited /*可以是OPENQUERY 或 OPENROWSET 函数*/

*WITH (*…n+)+ /*指定表提示,可省略*/ }

{ [ (column_list)] /*列列表*/

[ ] /*OUTPUT子句*/

{ VALUES /*指定列值的子句*/ (,DEFAULT . NULL .expression- *,…n+) /*列值的构成形式*/ | derived_table /*结果集*/

| exectute_statement /*有效的EXECTUTE语句*/

} }

| DEFAULT VALUES

2)删除数据

/*所有列均取默认值*/

使用DELETE语句删除数据 语法格式:

[ WITH [ ,...n ] ] DELETE [ TOP ( expression ) [ PERCENT ] ] [FROM]

{ table_name /*从表中删除数据*/

| view_name /*从视图删除数据*/

| rowset_function_limited /*可以是OPENQUERY或OPENROWSET 函数*/

[WITH ( < table_hint_limited > [ ...n ] )] /*指定表提示,可省略*/ }

* FROM ,-*,…n++ /*从table_source删除数据*/ [ ] /*OUTPUT子句*/ [ WHERE { /*指定条件*/

|{ [CURRENT OF { {[GLOBAL] cursor_name} | cursor_variable_name}]} /*有关游标的说明,见第4章*/ }]

*OPTION (*,…n+)+ /*使用优化程序*/

3)修改数据

在T-SQL中,UPDATE语句可以用来修改表中的数据行。 语法格式:

[ WITH [ ,...n ] ] UPDATE [ TOP ( expression ) [ PERCENT ] ]

{ table_name WITH ( < table_hint_limited > [ ...n ] )/*修改表数据*/ | view_name /*修改视图数据*/ | rowset_function_limited /*可以是OPENQUERY或OPENROWSET函数*/ }

SET /*赋予新值*/

{ column_name = { expression | DEFAULT | NULL } /*为列重新指定值*/ | @variable = expression /*指定变量的新值*/

| @variable = column = expression /*指定列和变量的新值*/ -*,…n+

{ , * FROM ,-*,…n++

[ WHERE ] /*指定条件*/ }

| [ WHERE CURRENT OF /*有关游标的说明,见第4章*/ { {[GLOBAL] cursor_name} | cursor_variable_name}] }

[OPTION(*,…n+)+ /*使用优化程序*/

4)数据查询

/*指定临时命名的结果集*/

语法格式:

[ WITH ] SELECT [ ALL | DISTINCT ]

[ TOP expression [ PERCENT ] [ WITH TIES ] ] /*指定要选择的列及其限定*/

[ INTO new_table ] /*INTO子句,指定结果存入新表*/ [ FROM table_source ] /*FROM子句,指定表或视图*/

[ WHERE search_condition ] /*WHERE子句,指定查询条件*/

[ GROUP BY group_by_expression] /*GROUP BY子句,指定分组表达式*/

[ HAVING search_condition] /*HAVING子句,指定分组统计条件*/ [ ORDER BY order_expression [ ASC | DESC ] ] /*ORDER子句,指定排序表达式和顺序*/

通过SELECT语句的项组成结果表的列。 3. 视图 1)视图的创建

语法格式:

CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH [ ,...n ] ] AS select_statement [ ; ] [ WITH CHECK OPTION ] 其中:

::= {

[ ENCRYPTION ]

[ SCHEMABINDING ] [ VIEW_METADATA ] }

一般情况下,如果视图为下列格式,则称其为分区视图: CREATE VIEW view_name AS

SELECT FROM T1 UNION ALL

SELECT FROM T2 UNION ALL ...

SELECT FROM Tn

2)视图的修改

语法格式:

ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ] [ WITH [ ,...n ] ] AS select_statement [ ; ] [ WITH CHECK OPTION ]

其中,view_attribute、select_statement等参数与CREATE VIEW语句中含义相同。

3)视图的删除

DROP VIEW [ schema_name . ] view_name [ ...,n ] [ ; ]

其中view_name是视图名,使用DROP VIEW可删除一个或多个视图。 4. 索引

1)概述

(1)聚集索引

聚集索引将数据行的键值在表内排序并存储对应的数据记录,使得数据表物理顺序与索引顺序一致。SQL Server 2005是按B树(BTREE)方式组织聚集索引的,B树方式构建为包含了多个节点的一棵树。顶部的节点构成了索引的开始点,叫做根。每个节点中含有索引列的几个值,一个节点中的每个值又都指向另一个节点或者指向表中的一行,一个节点中的值必须是有序排列的。指向一行的一个节点叫做叶子页。叶子页本身也是相互连接的,一个叶子页有一个指针指向下一组。这样,表中的每一行都会在索引中有一个对应值。查询的时候就可以根据索引值直接找到所在的行。

聚集索引中B树的叶节点存放数据页信息。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表的哪个(或哪些)字段,这些字段都会按顺序被保存在表中。由于存在这种排序,所以每个表只会有一个聚集索引。

由于数据记录按聚集索引键的次序存储,因此聚集索引对查找记录很有效。 (2)非聚集索引

非聚集索引完全独立于数据行的结构。SQL Server 2005也是按B树方式组织非聚集索引的,与聚集索引不同之处在于:非聚集索引B树的叶节点不存放数据页信息,而是存放非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。

在非聚集索引内,从索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页的存储方式是堆集还是聚集。对于堆集,行定位器是指向行的指针。对于有聚集索引的表,行定位器是聚集索引键。只有在表上创建聚集索引时,表内的行才按特定顺序存储,这些行按聚集索引键顺序存储。如果一个表只有非聚集索引,它的数据行将按无序的堆集方式存储。

一个表中最多只能有一个聚集索引,但可有一个或多个非聚集索引。当在 SQL Server 2005上创建索引时,可指定是按升序还是降序存储键。 如果在一个表中既要创建聚集索引,又要创建非聚集索引时,应先创建聚集索引,然后再创建非聚集索引,因为创建聚集索引时将改变数据记录的物理存放顺序。

2)定义

使用CREATE INDEX命令可以为表创建索引。 语法格式:

CREATE [ UNIQUE ]

/*指定索引是否唯一*/

[ CLUSTERED | NONCLUSTERED ] /*索引的组织方式*/

INDEX index_name /*索引名称*/

ON {[ database_name. [ schema_name ] . | schema_name. ] table_or_view_name}

( column [ ASC | DESC ] [ ,...n ] ) /*索引定义的依据*/ [ INCLUDE ( column_name [ ,...n ] ) ]

[ WITH ( [ ,...n ] ) ] /*索引选项*/

[ ON { partition_scheme_name ( column_name ) /*指定分区方案 文件组| filegroup_name */

*/

| default } [ ; ] ] 其中: ::=

{

PAD_INDEX = { ON | OFF } | FILLFACTOR = fillfactor

| SORT_IN_TEMPDB = { ON | OFF } | IGNORE_DUP_KEY = { ON | OFF }

| STATISTICS_NORECOMPUTE = { ON | OFF } | DROP_EXISTING = { ON | OFF } | ONLINE = { ON | OFF }

| ALLOW_ROW_LOCKS = { ON | OFF } | ALLOW_PAGE_LOCKS = { ON | OFF } } | MAXDOP = max_degree_of_parallelism

四.实验内容

(一)数据定义: 1.创建数据库

create database stu_end go

实验操作结果:

/*指定索引文件所在的

检查修改后的属性:

2.创建数据库表

1)创建学生表S

create table s(

sno char(10) not null primary key, sname varchar(20), ssex char(2), sage int,

sdept varchar(20))

go

实验操作结果:

检查修改后的属性:

2)创建课程表C

create table c(

cno char(5) not null, cname varchar(20), cpno char(5), ccredit tinyint, primary key(cno),

foreign key(cpno) references c(cno)) go

实验操作结果:

检查修改后的属性:

3)创建学生选课表SC

create table sc(

sno char(10) not null, cno char(5) not null, grade tinyint,

primary key(sno,cno),

foreign key(sno) references s(sno), foreign key(cno) references c(cno),

constraint q1 check(grade>=0 and grade<=100)) go

实验操作结果:

检查修改后的属性:

3. 修改数据库表

1)增加属性列:为学生表S增加入学日期sdate

(1)在增加入学日期sdate属性列前

(2)增加入学日期sdate属性列后

alter table s add sdate date go

实验操作结果:

检查修改后的属性:

注意:SQL Server2000只有日期时间数据类型:datetime,date是SQL

Server2008的数据类型。

2)删除属性列sdate:

alter table s drop column sdate go

实验操作结果:

检查修改后的属性:

3)修改属性列:修改学生表S的属性列sage,将数据类型修改为tinyint。

(1)修改前:

(2)执行修改命令:alter table s alter column sage tinyint

实验操作结果:

修改后:

4)删除学生选课表属性列的完整性约束q1

(1)删除前:

(2)执行删除约束命令: alter table sc drop q1

go

实验操作结果:

删除后:

(二)数据操纵 1. 录入数据

1)录入?计科教育?的学生信息

insert into stu_end.dbo.s(sno,sname,ssex,sage,sdept) values

('1150310001','徐涛','女',21,'计科教育'), ('1150310002','马慧晶','女',22,'计科教育'), ('1150310003','郭洁','女',21,'计科教育'), ('1150310004','裴玉林','女',20,'计科教育'), ('1150310005','李嫣','女',19,'计科教育'), ('1150310006','吉鑫','男',22,'计科教育'), ('1150310007','张翠侠','男',23,'计科教育'), ('1150310009','王灿灿','女',21,'计科教育'),

('1150310010','贾贝贝','女',22,'计科教育'), ('1150310011','储佳丽','女',21,'计科教育'), ('1150310012','魏兰','女',22,'计科教育'), ('1150310013','肖恒','男',23,'计科教育'), ('1150310014','徐尚','男',21,'计科教育'), ('1150310015','揭红梅','女',22,'计科教育'), ('1150310016','杨丽雯','女',21,'计科教育'), ('1150310017','耿健','男',20,'计科教育'), ('1150310019','崔亚超','女',21,'计科教育'), ('1150310020','刘雪丽','女',21,'计科教育'), ('1150310021','唐梦兰','女',20,'计科教育'), ('1150310022','刘林林','女',19,'计科教育'), ('1150310023','汪梦婷','女',21,'计科教育'), ('1150310024','梁渊','男',22,'计科教育'), ('1150310025','黎良月','女',21,'计科教育'), ('1150310026','向芫梅','女',20,'计科教育'), ('1150310028','罗静思','女',22,'计科教育'), ('1150310029','马丽','女',21,'计科教育'), ('1150310030','胡金强','男',22,'计科教育'), ('1150310031','田梦','女',22,'计科教育'), ('1150310032','宋珮','女',21,'计科教育'), ('1150310033','陈松松','男',21,'计科教育'),

('1150310034','杨杰','男',22,'计科教育'), ('1150310035','伍志飞','男',23,'计科教育'), ('1150310036','盛勐','男',20,'计科教育'), ('1150310037','张俊佳','男',22,'计科教育'), ('1150310038','郑容容','女',21,'计科教育'), ('1150310039','孙亮','男',22,'计科教育'), ('1150310040','杜晓文','女',21,'计科教育'), ('1150310041','胡小星','女',21,'计科教育'), ('1150310042','刘晶晶','女',21,'计科教育'), ('1150310043','李中俊','男',20,'计科教育'), ('1150310044','邱莉','女',19,'计科教育'), ('1150310046','武增强','男',22,'计科教育'), ('1150310047','张丽君','女',21,'计科教育'), ('1150310048','鲍安琪','女',21,'计科教育') 实验操作结果:

2)录入?计科网络?的学生信息

insert into stu_end.dbo.s(sno,sname,ssex,sage,sdept) values

('1150312003','陈腾','男',21,'计科网络'), ('1150312004','于露','女',22,'计科网络'), ('1150312005','唐健','男',23,'计科网络'), ('1150312006','王能森','男',21,'计科网络'), ('1150312007','李文鹏','男',19,'计科网络'), ('1150312008','陈勉','男','20','计科网络'), ('1150312009','汪佳文','男',22,'计科网络'), ('1150312010','张佩瑶','女',21,'计科网络'), ('1150312011','喻超','男',21,'计科网络'), ('1150312012','周磊','男',20,'计科网络'), ('1150312013','张良诚','男',21,'计科网络'), ('1150312014','邹晓婉','女',21,'计科网络'), ('1150312015','李凌锋','男',22,'计科网络'), ('1150312016','杨海勇','男',23,'计科网络'),

('1150312017','彭柯霖','男','20','计科网络'), ('1150312018','陈冲','男',21,'计科网络'), ('1150312019','刘健','男',22,'计科网络'), ('1150312020','吴锦涛','男',21,'计科网络'), ('1150312021','徐鹏飞','男',22,'计科网络'), ('1150312022','程蓉','女',23,'计科网络'),

('1150312023','黄小龙','男',21,'计科网络'), ('1150312024','肖伟军','男',20,'计科网络'), ('1150312025','谌绪武','男',21,'计科网络'), ('1150312026','操旭明','男',20,'计科网络'), ('1150312027','徐燃','男',19,'计科网络'), ('1150312028','黄鹏程','男',22,'计科网络'), ('1150312029','王俊华','女',20,'计科网络'), ('1150312030','丁媛','女',21,'计科网络'), ('1150312031','汪盼','女',21,'计科网络'), ('1150312032','吴阳威','男',22,'计科网络'), ('1150312033','鲁远方','男',22,'计科网络'), ('1150312034','张超','男',23,'计科网络'), ('1150312035','张庚','男',21,'计科网络'), ('1150312036','郝红','女',20,'计科网络'), ('1150312037','郑宇航','男',21,'计科网络'), ('1150312038','李鹏','男',22,'计科网络'), ('1150312039','纪奥','男',21,'计科网络'), ('1150312040','张钟洲','男',20,'计科网络'), ('1150312041','黄婷婷','女',21,'计科网络'), ('1150312042','赵静','女',21,'计科网络'), ('1150312043','程璐璐','女',22,'计科网络'), ('1150312044','汪松','男',20,'计科网络'),

('1150312045','蒋善伟','男',19,'计科网络'), ('1150312046','李跃超','女',21,'计科网络'), ('1150330028','董波','男',22,'计科网络') 实验操作结果:

3)录入?数字媒体?的学生信息

insert into stu_end.dbo.s(sno,sname,ssex,sage,sdept) values

('1150320001','李宁','女',20,'数字媒体'), ('1150320002','董丹丹','女',21,'数字媒体'), ('1150320004','余萍','女',22,'数字媒体'), ('1150320005','裴佳瑞','女',23,'数字媒体'), ('1150320006','林欣','女',19,'数字媒体'), ('1150320007','赵莎','女',20,'数字媒体'),

('1150320008','孟建明','男',21,'数字媒体'), ('1150320009','游雅欣','女',22,'数字媒体'), ('1150320010','蔡雯雯','女',21,'数字媒体'), ('1150320011','张家政','男',20,'数字媒体'), ('1150320012','余丹纯','女',21,'数字媒体'), ('1150320014','郝伟','男',20,'数字媒体'), ('1150320015','王亚兰','女',20,'数字媒体'), ('1150320016','陈月','女',21,'数字媒体'),

('1150320017','欧阳可维','女',21,'数字媒体'), ('1150320018','李慧','女',20,'数字媒体'), ('1150320019','白米雪','女',22,'数字媒体'), ('1150320020','刘佳','女',21,'数字媒体'), ('1150320021','吴雪','女',20,'数字媒体'), ('1150320022','蔡瑶','女',21,'数字媒体'), ('1150320023','卢晓晗','女',22,'数字媒体'), ('1150320024','秦杏杏','女',21,'数字媒体'), ('1150320026','黄容','女',20,'数字媒体'), ('1150320027','郭茜','女',20,'数字媒体'), ('1150320028','陈雅格','女',21,'数字媒体'), ('1150320029','史法阳','女',22,'数字媒体'), ('1150320030','罗昕瑜','女',21,'数字媒体'), ('1150320031','应晓芳','女',20,'数字媒体'),

('1150320032','刘佳梦','女',21,'数字媒体'), ('1150320033','毕放','女',20,'数字媒体'), ('1150320034','王贝','女',20,'数字媒体'), ('1150320035','何威','男',22,'数字媒体'), ('1150320036','孙倩','女',21,'数字媒体'), ('1150320037','张笑程','女',21,'数字媒体') 实验操作结果:

4)录入课程表c的课程信息

(1)删除表内参照完整性约束

alter table stu_end.dbo.c drop FK__c__cpno__0519C6AF go

实验操作结果:

(2)录入课程信息

insert into stu_end.dbo.c(cno,cname,cpno,ccredit) values

('00001','计算机导论','',2), ('00002','高级语言程序设计','',2), ('00003','离算数学','',3), ('00004','数据结构','00002',3), ('00005','c#','00002',2),

('00006','面向对象程序设计','00005',2), ('00007','数据库原理','00004',3), ('00008','操作系统','',3),

('00009','数据库新技术','00007',2), ('00010','嵌入式技术','',2),

('00011','算法设计与分析','00004',2), ('00012','nosql','',2)

实验操作结果:

5)通过程序为学生选课表输入学生选课信息

(1)创建学生选课表sc11

create table sc11( sno char(10), cno char(5), grade tinyint) go

实验操作结果:

(2)录入学生选课信息

declare @sno char(10)

declare s_cursor cursor local for select sno from stu_end.dbo.s open s_cursor

fetch s_cursor into @sno

declare @s_row tinyint,@n tinyint set @s_row=123 set @n=1

while @n<=@s_row begin

insert stu_end.dbo.sc11(sno,cno) select @sno, cno from stu_12.dbo.c fetch s_cursor into @sno set @n=@n+1 end

close s_cursor

deallocate s_cursor 实验操作结果:

2. 修改数据和删除数据(略) (三)数据查询 1. 单表查询

(1)查询表中的若干列

1)查询部分属性列

select sno,sname,ssex from s go

实验操作结果:

2)查询全部属性列

select sno,sname,ssex,sage,sdept from s go 或

select * from s go

实验操作结果:

3)查询经过计算的值:学生的出生年份。 在查询中使用了算术运算,系统函数

select sno,sname,YEAR(GETDATE())-sage from s go

实验操作结果:

4)查询中使用列别名和字符串

select sno,sname,'同学的出生年份是:',YEAR(GETDATE())-sage as 出生年份 from s go

实验操作结果:

(2)查询表中的若干元组

1)消除取值重复的行 (a)没有消除重复的行

Select sno from sc11 go

实验操作结果:

(b)消除重复的行

select distinct sno from sc11 go

实验操作结果:

2)查询满足条件的元组 (a)比较大小

select * from s where sage<22 实验操作结果:

(b)确定范围

select * from s

where sage between 20 and 23 go

实验操作结果:

(c)字符串匹配

select * from s where sname like '郝红' go

实验操作结果:

select * from s where sname like '李%' go

实验操作结果:

select * from s where sname like '李_'

go

实验操作结果:

(3)排序

select * from s order by sname go

实验操作结果:

select * from s order by sname desc go

实验操作结果:

(4)分组查询

select sdept,COUNT(sno) from s group by sdept go

实验操作结果:

select sdept,avg(sage) from s group by sdept go

实验操作结果:

2. 连接查询

(1)为学生选课表生成成绩

1)创建学生选课表sc12 create table sc12( sno char(10), cno char(5), grade int) go

实验操作结果:

2)将学生选课表sc11中的选课信息插入到学生选课表sc12,并随机生成相应的选课成绩

declare @sno char(10),@cno char(5) declare @grdae int

declare sc11_cur cursor for select sno,cno from stu_12.dbo.sc11 open sc11_cur

fetch next from sc11_cur into @sno,@cno set @grdae=cast( floor(rand()*50) as int)+50 declare @n int,@sc_row int set @n=1

set @sc_row=1476 while @n<=@sc_row begin

insert into stu_12.dbo.sc12(sno,cno,grade) values(@sno,@cno,@grdae)

fetch next from sc11_cur into @sno,@cno set @grdae=cast( floor(rand()*50) as int)+50 set @n=@n+1 end

close sc11_cur deallocate sc11_cur select @n 实验操作结果:

3)创建临时表,其结构与学生成绩表sc12一致 CREATE TABLE #TEMP12( sno char(10), cno char(5), grade int) 实验操作结果:

4)从学生表中随机产生300行数据插入到临时表中 INSERT INTO #TEMP12

SELECT top 300 sno,cno,grade FROM sc12

ORDER BY NEWID() 实验操作结果:

5)从学生成绩表sc12中删除这随机的300行数据 DELETE r FROM sc12 r

INNER JOIN #TEMP12 t

ON t.sno = r.sno and t.cno=r.cno 实验操作结果:

6)删除临时表

TRUNCATE TABLE #TEMP12 DROP TABLE #TEMP12 实验操作结果:

(2)排序查询 select sno,grade from sc12

where cno='00003' order by grade desc 实验操作结果:

(3)使用聚合函数查询 1)查询学生的选课人数

select COUNT(distinct sno) from sc12 实验操作结果:

2)查询学生的选课人次数 select COUNT( sno) from sc12 实验操作结果:

(4)自然连接:查询选了课程的学生情况和成绩情况 select s.*,cno,grade

from s inner join sc12 on s.sno=sc12.sno 实验操作结果:

(5)外连接查询

1)插入数据:产生没有选课的学生信息

insert into stu_end.dbo.s(sno,sname,ssex,sage,sdept) values

('1050330001','刘炼','男',23,'信管') ('1050330002','丁蕾','女',22,'信管') ('1050330003','陈勇','男',24,'信管')

, , ,

('1050330004','余霞','女',21,'信管'), ('1050330005','胡海燕','女',22,'信管'), ('1050330007','付强','男',23,'信管'), ('1050330008','何楠楠','女',22,'信管'), ('1050330009','李晓飞','女',23,'信管'), ('1050330011','蔡盼盼','女',23,'信管'), ('1050330012','赵刚','男',24,'信管'),

('1050330013','涂四超','男',22,'信管'), ('1050330014','陈昌钦','男',21,'信管'), ('1050330015','王爱玲','女',21,'信管'), ('1050330016','王俊','女',21,'信管'), ('1050330017','刘晶','女',23,'信管'), ('1050330018','吴棚','男',23,'信管'), ('1050330019','胡国丰','男',22,'信管'), ('1050330021','叶梦竹','女',21,'信管'), ('1050330022','庄健','男',23,'信管'), ('1050330023','张志琪','女',22,'信管'), ('1050330024','邱珊珊','女',22,'信管'), ('1050330025','张凤','女',23,'信管'), ('1050330026','王杰','男',24,'信管'), ('1050330027','张婷','女',24,'信管'), ('1050330028','吴丹','女',23,'信管'), ('1050330029','弓兴宇','男',22,'信管'), ('1050330031','张美佳','女',23,'信管') 实验操作结果:

(5)左外连接:查询学生信息及选课信息 select s.*,cno,grade

from s left outer join sc12 on s.sno=sc12.sno 实验操作结果:

在本例中,受参照完整性的制约,左外连接与全外连接等价,右外连接与自

然连接等价。

(6)自身连接查询:求每门课的间接先行课

select c1.cno,c2.cpno from c as c1,c as c2 where c1.cpno=c2.cno 实验操作结果:

(7)复合连接条件查询:查询选修了?00002?课程,且至少有一门课程在

85分以上的所有学生信息

select s.*,sc12.grade

from s,sc12 where s.sno=sc12.sno and sc12.cno='00002' and sc12.grade>85 实验操作结果:

3.嵌套查询

(1) 通过in谓词实现嵌套查询

1) 查询与‘徐涛’在同一个系的学生信息 select stu_end.dbo.s.* from stu_end.dbo.s

where sdept in ( select sdept from stu_end.dbo.s where sname='徐涛') 实验操作结果:

2) 查询选修了‘数据库原理’的学生学号和姓名 select sno,sname from s

where sno in ( select sno from sc12

where cno in ( select cno from c where cname='数据库原理'))

实验操作结果:

本文来源:https://www.bwwdw.com/article/nw2p.html

Top