SQL语句练习06

目录

一、建表

二、SQL语句练习


一、建表

  • 一、建立如下学生表(命名格式姓名拼音_三位学号_week8student”,如LBJ_023_week8student)

create table LYL_116_week8student(SNO int primary key,
SNAME char(8) not null unique,SEX char(2),
DEPTNO int foreign key references LYL_116_week8dept(DEPTNO)) 

  • 二、建立如下课程表(命名格式姓名拼音_三位学号_week8course”,如LBJ_023_week8course)

create table LYL_116_week8course(CNO int,
CNAME char(20) not null,TNO int,CREDIT int,
primary key(CNO,TNO),
foreign key (TNO) references LYL_116_week8teacher(TNO)) 

  • 三、建立如下选课表(命名格式姓名拼音_三位学号_week8sc”,如LBJ_023_week8sc)

create table LYL_116_week8sc(SNO int,CNO int,GRADE int,
primary key(SNO,CNO),
foreign key (SNO) references LYL_116_week8student(SNO),
foreign key (CNO) references LYL_116_week8course(CNO)) 

  • 四、建立如下教师表(命名格式姓名拼音_三位学号_week8teacher”,如LBJ_023_week8teacher)

create table LYL_116_week8teacher(TNO int primary key,
TNAME char(8) not null, DEPTNO int
foreign key references LYL_116_week8dept(DEPTNO)) 

  • 五、建立如下系表(命名格式姓名拼音_三位学号_week8dept”,如LBJ_023_week8dept)

create table LYL_116_week8dept(DEPTNO int primary key,
DEPTNAME char(20) not null) 

二、SQL语句练习

  • 1)在Student表中加入属性SAGE(INT)

alter table LYL_116_week8student add SAGE int

  • 2)将Student表中的属性SAGE类型改为SMALLINT

alter table LYL_116_week8student 
alter column SAGE smallint

  • 3)在Student表上建立关于SNO的唯一索引

alter table LYL_116_week8student add unique(SNO)

  • 4)在Course表上建立关于CNO降序的唯一索引

alter table LYL_116_week8course add unique(CNO desc)

  • 5)在五张表中插入如右侧的数据

insert into LYL_116_week8student values(1001,'张天','男',10,20)
insert into LYL_116_week8student values(1002,'李兰','女',10,21)
insert into LYL_116_week8student values(1003,'陈铭','男',10,21)
insert into LYL_116_week8student values(1004,'刘茜','女',20,21)
insert into LYL_116_week8student values(1005,'马朝阳','男',20,22) 

insert into LYL_116_week8course values(1,'数据结构',101,4)
insert into LYL_116_week8course values(2,'数据库',102,4)
insert into LYL_116_week8course values(3,'离散数学',103,4)
insert into LYL_116_week8course values(4,'C语言程序设计',101,2)

insert into LYL_116_week8sc values(1001,1,80)
insert into LYL_116_week8sc values(1001,2,85)
insert into LYL_116_week8sc values(1001,3,78)
insert into LYL_116_week8sc values(1002,1,78)
insert into LYL_116_week8sc values(1002,2,82)
insert into LYL_116_week8sc values(1003,1,92)
insert into LYL_116_week8sc values(1004,1,87)
insert into LYL_116_week8sc values(1004,4,90)
insert into LYL_116_week8sc values(1005,1,85)
insert into LYL_116_week8sc values(1005,4,92)

insert into LYL_116_week8teacher values(101,'张星',10)
insert into LYL_116_week8teacher values(102,'李珊',10)
insert into LYL_116_week8teacher values(103,'赵天应',10)
insert into LYL_116_week8teacher values(104,'李田',20)

insert into LYL_116_week8dept values(10,'计算机')
insert into LYL_116_week8dept values(20,'信息') 

  • 6)查询全体学生的姓名和所在的系名

select s.SNAME'姓名',d.DEPTNAME'所在系名' from LYL_116_week8student s,
LYL_116_week8dept d where s.DEPTNO = d.DEPTNO

  • 7)查询数据结构这门课的平均成绩

select avg(sc.GRADE)'数据结构的平均成绩' 
from LYL_116_week8sc sc,LYL_116_week8course c
where sc.CNO = c.CNO and c.CNAME='数据结构'
group by sc.CNO

  • 8)为计算机系的学生记录建立一个视图CS_STUDENT

create view CS_STUDENT as
select s.SNO,s.SNAME,s.SEX,s.DEPTNO,d.DEPTNAME
from LYL_116_week8student s,LYL_116_week8dept d
where s.DEPTNO=d.DEPTNO and d.DEPTNAME='计算机'

  • 9)利用视图,列出所有计算机学生的姓名,选课名和成绩

select cs.SNAME,c.CNAME,sc.GRADE
from CS_STUDENT cs,LYL_116_week8sc sc,LYL_116_week8course c
where c.CNO=sc.CNO and cs.SNO = sc.SNO

  • 10)查询所有女生的姓名

select s.SNAME from LYL_116_week8student s
where s.SEX='女'

  • 11)查询成绩在8089之间的所有学生选课记录,查询结果按成绩的降序排列

select * from LYL_116_week8sc sc
where sc.GRADE between 80 and 89
order by sc.GRADE desc

  • 12)查询各个系的学生人数

select count(s.DEPTNO)'人数',d.DEPTNAME'系名'
from LYL_116_week8student s,LYL_116_week8dept d
where s.DEPTNO=d.DEPTNO group by s.DEPTNO,d.DEPTNAME

  • 13)查询信息系年龄在21岁以下(含21岁)的女生姓名及其年龄

select s.SNAME,s.SAGE from LYL_116_week8dept d,LYL_116_week8student s
where d.DEPTNAME='信息' and s.SEX='女' and s.SAGE<=21

  • 14)查询选修总学分在10学分以上的学生姓名

select s.SNAME'选修总学分在10分以上'
from LYL_116_week8course c,LYL_116_week8sc sc,LYL_116_week8student s
where c.CNO=sc.CNO and s.SNO=sc.SNO 
group by s.SNAME having sum(c.CREDIT)>10

  • 15)查询各门课程取得最高成绩的课程号、学生姓名及其成绩

select m.CNO,s.SNAME,m.maxG
from LYL_116_week8sc sc2,LYL_116_week8student s,
(select sc1.CNO,max(sc1.GRADE)'maxG'
from LYL_116_week8sc sc1 group by sc1.CNO)m
where m.CNO=sc2.CNO and sc2.GRADE=m.maxG and sc2.SNO=s.SNO

  • 16)查询选修了学号为1002的学生选修的全部课程的学生学号

select distinct SNO from LYL_116_week8sc sc1
where not exists(
  select * from LYL_116_week8sc sc2
  where sc2.SNO='1002'
  and not exists(
    select * from LYL_116_week8sc sc3
    where sc3.SNO = sc1.SNO
    and sc3.CNO = sc2.CNO))

  • 17)查询选修了张星老师开设的全部课程的学生姓名

select s.SNAME from LYL_116_week8student s
where not exists (
  select * from LYL_116_week8course c
  where c.TNO in(
    select t.TNO from LYL_116_week8teacher t
    where t.TNAME='张星'
    and not exists(
      select * from LYL_116_week8sc sc
      where sc.SNO=s.SNO and sc.CNO=c.CNO))
)

  • 18)查询选修张星老师数据结构课的学生的姓名和成绩

select s.SNAME,sc1.GRADE from LYL_116_week8sc sc1,LYL_116_week8student s
where sc1.CNO in 
(select c.CNO from LYL_116_week8teacher t,LYL_116_week8course c
where t.TNAME='张星' and t.TNO=c.TNO and c.CNAME='数据结构')
and sc1.SNO = s.SNO

  • 19)将张星老师数据结构课的学生成绩全部加2

update LYL_116_week8sc set GRADE = GRADE+2 where CNO in
(select c.CNO from LYL_116_week8teacher t,LYL_116_week8course c
where t.TNAME='张星' and t.TNO=c.TNO and c.CNAME='数据结构')
and SNO in (
select sc1.SNO from LYL_116_week8sc sc1,LYL_116_week8student s
where sc1.CNO in 
(select c.CNO from LYL_116_week8teacher t,LYL_116_week8course c
where t.TNAME='张星' and t.TNO=c.TNO and c.CNAME='数据结构')
and sc1.SNO = s.SNO)

  • 20)再次查询选修张星老师数据结构课的学生的姓名和成绩

select s.SNAME,sc1.GRADE from LYL_116_week8sc sc1,LYL_116_week8student s
where sc1.CNO in 
(select c.CNO from LYL_116_week8teacher t,LYL_116_week8course c
where t.TNAME='张星' and t.TNO=c.TNO and c.CNAME='数据结构')
and sc1.SNO = s.SNO

  • 21)查询马朝阳同学的所有选课记录

select * from LYL_116_week8student s,LYL_116_week8sc sc
where s.SNAME='马朝阳' and s.SNO=sc.SNO

  • 22)删除马朝阳同学的所有选课记录

delete from LYL_116_week8sc where SNO in
(select SNO from LYL_116_week8student where SNAME='马朝阳')

  • 23)再次查询马朝阳同学的所有选课记录

select * from LYL_116_week8student s,LYL_116_week8sc sc
where s.SNAME='马朝阳' and s.SNO=sc.SNO

SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的SQL接口。 它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。    结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。    美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了SQL标准。ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和International Electrotechnical Commission(IEC)的成员之一。ANSI 发布与国际标准组织相应的美国标准。1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSI SQL-92。ANSI SQL-92有时被称为ANSI SQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL 标准。SQL Server使用ANSI SQL-92的扩展集,称为T-SQL,其遵循ANSI制定的 SQL-92标准。    SQL语言包含4个部分:    数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。    数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。    数据查询语言(DQL),例如:SELECT语句。    数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。    SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会洗碗的CV工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值