主键 外键 子查询 练习 学生选修课

create database xuankebiao--创建一个选课表的数据库
go
use xuankebiao--使用这个数据库
go
create table kechengbiao--添加一个课程表的表
(
  kcode int primary key not null,--课程编号,主键
  kname varchar(20),
  klaoshi varchar(20),
  kdh varchar(20),
)

create table xiyuanbiao--添加一个院系的表
(
  xicode int primary key not null,--系院编号,主键
  xiname varchar(20),
  xilaoshi varchar(20),
  xidh varchar(20),
)
create table xueshengbiao--添加一个学生编号的表
(
  xuehao int primary key not null,
  name varchar(20),
  xingb char(10),
  xibie int,--院系表的外键
  xuanxiuk int,--课程表的外键
)

--向课程表中添加信息
insert into kechengbiao values(1,‘语文‘,‘鲁达‘,‘12345‘)
insert into kechengbiao values(2,‘数学‘,‘牛顿‘,‘23456‘)
insert into kechengbiao values(3,‘英语‘,‘乔布斯‘,‘34567‘)
insert into kechengbiao values(4,‘计算机‘,‘盖茨‘,‘45678‘)

--向系院表中添加信息
insert into xiyuanbiao values(101,‘人文系‘,‘王大‘,‘232323‘)
insert into xiyuanbiao values(102,‘数理系‘,‘李二‘,‘323232‘)
insert into xiyuanbiao values(103,‘艺术系‘,‘张三‘,‘343434‘)
insert into xiyuanbiao values(104,‘计算机系‘,‘赵四‘,‘434343‘)

--向学生表中添加信息

--人文系
insert into xueshengbiao values(001,‘张小明‘,‘男‘,101,1)--因为系别是院系表中的外键,直接用主键中每个系的编号
insert into xueshengbiao values(002,‘李小鹏‘,‘男‘,101,1)--选修课是课程表中课程的外键,直接用主键中课程的编号
insert into xueshengbiao values(003,‘孙小菲‘,‘女‘,101,1)
insert into xueshengbiao values(004,‘王梦璐‘,‘女‘,101,1)
insert into xueshengbiao values(005,‘周小刚‘,‘男‘,101,1)
insert into xueshengbiao values(006,‘张全蛋‘,‘男‘,101,1)

--数理系
insert into xueshengbiao values(007,‘张明‘,‘男‘,102,2)
insert into xueshengbiao values(008,‘李冉‘,‘女‘,102,2)
insert into xueshengbiao values(009,‘孙菲‘,‘女‘,102,2)
insert into xueshengbiao values(010,‘王璐‘,‘女‘,102,2)
insert into xueshengbiao values(011,‘周刚‘,‘男‘,102,2)
insert into xueshengbiao values(012,‘张蛋‘,‘男‘,102,2)

--艺术系
insert into xueshengbiao values(013,‘张红‘,‘女‘,103,3)
insert into xueshengbiao values(014,‘李菲‘,‘女‘,103,3)
insert into xueshengbiao values(015,‘孙冉‘,‘女‘,103,3)
insert into xueshengbiao values(016,‘王梦‘,‘女‘,103,3)
insert into xueshengbiao values(017,‘周晨‘,‘女‘,103,3)
insert into xueshengbiao values(018,‘张二蛋‘,‘男‘,103,3)

--计算机系
insert into xueshengbiao values(019,‘张哇‘,‘男‘,104,4)
insert into xueshengbiao values(020,‘李哇‘,‘男‘,104,4)
insert into xueshengbiao values(021,‘孙哇‘,‘男‘,104,4)
insert into xueshengbiao values(022,‘王哇‘,‘男‘,104,4)
insert into xueshengbiao values(023,‘周哇‘,‘女‘,104,4)
insert into xueshengbiao values(024,‘张哇‘,‘男‘,104,4)
insert into xueshengbiao values(025,‘赵哇‘,‘男‘,104,4)
insert into xueshengbiao values(026,‘钱哇‘,‘男‘,104,4)

--1.查看选修最多的课程名称
select kname from kechengbiao where kcode=
 (select top 1 xuanxiuk from xueshengbiao group by xuanxiuk order by count(*) desc)

--2.查看男生选修/女生选修最多的课程的所有信息
select * from kechengbiao where kcode=
(select top 1 xuanxiuk from xueshengbiao where xingb=‘男‘ group by xuanxiuk order by count(*) desc)
select * from kechengbiao where kcode=
(select top 1 xuanxiuk from xueshengbiao where xingb=‘女‘ group by xuanxiuk order by count(*) desc)
--3、查看计算机系的人数
select count(xibie) from xueshengbiao where xibie=
(select xicode from xiyuanbiao where xiname=‘计算机系‘)
--4、查看计算机系女生人数、男生人数
select count(xingb) from xueshengbiao where xingb=‘女‘ and xibie=
(select xicode from xiyuanbiao where xiname=‘计算机系‘)
select count(xingb) from xueshengbiao where xingb=‘男‘ and xibie=
(select xicode from xiyuanbiao where xiname=‘计算机系‘)
--5、查看哪个系院的男生最多、女生最多
select xiname from xiyuanbiao where xicode=
(select top 1 xibie from xueshengbiao where xingb=‘男‘ group by xibie order by COUNT(*)desc)

select xiname from xiyuanbiao where xicode=
(select top 1 xibie from xueshengbiao where xingb=‘女‘ group by xibie order by COUNT(*)desc)

--6、查看乔布斯老师的课程有多少人选修
select count(xuanxiuk) from xueshengbiao where xuanxiuk=
(select kcode from kechengbiao where klaoshi=‘乔布斯‘)
--7、查看王哇同学的系院的电话
select xidh from xiyuanbiao where xicode=
(select xibie from xueshengbiao where name=‘王哇‘)
--8、查看孙小菲同学的选修课程任课老师的名字及联系方式
select klaoshi,kdh from kechengbiao where kcode=
(select xuanxiuk from xueshengbiao where name=‘孙小菲‘)
时间: 2024-12-16 12:08:38

主键 外键 子查询 练习 学生选修课的相关文章

数据库系统基础笔记(3)--主键/外键 索引

本文转载自:http://www.cnblogs.com/longyi1234/archive/2010/03/24/1693738.html 作者:蔚蓝色的天空 一.什么是主键.外键 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 :  学生表 (学号,姓名,性别,班级)  其中每个学生的学号是唯一的,学号就是一个主键  课程表(课程编号,课程名,学分)  其中课程编号是唯一的,课程编号就是一个主键  成绩表(学号,课

SQL主键&外键

SQL的主键和外键约束 SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学

数据库主从表、关系;主、外键关系和作用

从数据库是主数据库的备份,当主数据库变化时从数据库要更新,这些数据库软件可以设计更新周期.这是提高信息安全的手段.主从数据库服务器不在一个地理位置上,当发生意外时数据库可以保存.主外键的关系结构:1,一对一,不用引用主外键,把它们放一个表中即可例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中即可2,一对多,引用主外键,'一'相当于主键,'多'即是引用主键的外键.例如:一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系:3,多对多关系,需要创建一个表,表中需要两个字段

MySQL主键 外键 索引

一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 : 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 用户表(用户名.密码.登录级别) 其中用户名是唯一的, 用户名就是一个主键 上机记录表(卡号,学号,姓名.序列号) 上机记录表中单一一个属性无法唯一标识一条记录,学号和姓名的组合才可以唯一标识一条记录,所以 学号和姓名的属性组是一个主键 上机记录表中的序列号不是成绩表的

主键外键

主键 外键 唯一键 CHECK约束 主键:是唯一的,不可重复的,它能提高查询效率,但是会减慢新增数据效率 外键:主键是本张表的主键,是唯一且非空的,而外键是另一张表中与这张表的某个字段的类型,字段名相同的字段,一般是用作关联两张或两张以上的数据表时用的. 外间的取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除.(4)更新主键记录时,同样有

MySQL 主键外键

笛卡儿积 多表查询 ,多个表变成一个表 完整性约束条件primary key    标识该属性为该表的主键,可以唯一的标识对应的元组foreign key    标识该属性为该表的外键,是与之联系的某表的主键not null       标识该属性不能为空unique         标识该属性的值是唯一的auto_increment 标识该属性的值自动增加default        为该属性设置默认值设置从表 外键constraint 外键别名 foreign key(属性1.1, 属性1.

通过 jdbc 分析数据库中的表结构和主键外键

文章转自:http://ivan4126.blog.163.com/blog/static/20949109220137753214811/ 在某项目中用到了 hibernate ,大家都知道 hibernate 是 ORM 框架,他是有能力根据实体生成数据库表的.我们在单元测试的时候用到了 dbUnit ,dbUnit 可以帮助我们在测试前把数据库的测试数据准备好,然后我们就利用现成的数据库环境测试,测试完成后需将数据库中的所有数据清除(为了不影响其他的单元测试),然后接着下一个测试.虽然已经

数据库中创建表(包括创建主键,外键,非空列,唯一)

创建表(包括创建主键,外键,非空列,唯一) - PROS - 博客园 http://www.cnblogs.com/CodingArt/articles/1621921.html **************** 创建主键(三种方法) **************** 创建学生表: 第一种: create table student (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/ sname char(20) not null,/*姓名*/ ssex c

聚集索引和取消外键,外键影响在大并发下的性能.删除外键

聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同.一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个.如果某索引不是聚集索引,则表中的行物理顺序与索引顺序不匹配,与非聚集索引相同,聚集索引有着更快的检索速度. 不相关的拆离.查询不一定关联的列单独分出一张表. 做对应关联. 外键. 外键约束去掉,锁很多,占用资源.多表关联较多. 列有空值,空值不走索引. 外键是否采用看业务应用场景,以及开发成本的,大致列下什么时候适合,什么时候不适合使用: