数据库题?SQL数据库的问题目
大家好,今天小编来为大家解答以下的问题,关于数据库题,SQL数据库的问题目这个很多人还不知道,现在让我们一起来看看吧!
SQL数据库的问题目
这是在一个student数据库上建立的查询,你可以把邮箱告诉我,我把数据库文件发给你,当然如果你想自己建的话也行,下面是三张表。
sno sname ssex sage sdept
200215121李勇男 20 CS
200215122刘晨女 19 CS
200215123王敏女 18 MA
200215125张立男 19 IS
cno cname cpno ccredit
1数据库 5 4
2数学 NULL 2
3信息系统 1 4
4操作系统 6 3
5数据结构 7 4
6数据处理 NULL 2
7 PASCAL语言 6 4
sno cno grade
200215121 1 92
200215121 2 85
200215121 3 88
200215122 2 90
200215122 3 80
--1.查询所有年龄在20岁以下的学生姓名及其年龄。
select sname,sage
from student
where sage<20
--2.查询考试成绩有不及格的学生的学号。
select sno
from sc
where grade<60
--3.查询年龄不在19~22岁之间的学生姓名、系别和年龄。
select sname,sdept,sage
from student
where sage not between 19 and 22
--4.查询既不是信息系,也不是计算机科学系的学生的姓名和性别。
select sname,ssex
from student
where sdept not in('IS','CS')
--5.查询所有姓刘学生的姓名、学号和性别
select sname,sno,ssex
from student
where sname like'刘%'
--6.在Course数据表中添加记录('8','DB_design','2',4),并查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况
select*
from course
where cname like'DB\_%i__%' escape'\'
--7.在SC数据表中添加记录('200215123','1',null),并查询所有有成绩的学生学号和课程号
select sno,cno
from sc
--8.查询全体学生情况,查询结果按所在系的系号降序排列,同一系中的学生按年龄升序
select*
from student
order by sdept desc,sage asc
--9.计算2号课程的学生平均成绩。
select AVG(grade)
from sc
where cno='2'
--10在SC数据表中添加记录('200215123','1',23),统计出不及格的同学学号和不及格的门数。
select student.sno,count(grade)
from sc,student
group by student.sno
having grade<60
--11.查询选修1号课程的学生最高分数。
select MAX(grade)
from sc
where cno='1'
--12.查询学生200215121选修课程的总学分数。
select SUM(grade)
from sc
where sno='200215121'
--13.求各个课程号及相应的选课人数
select cno,COUNT(sno)
from sc
group by cno
--14.查询选修了2门以上(包括2门)课程的学生学号
select sno
from sc
group by sno
having count(*)>=2
--15.查询成绩大于等于90分的学生的学号和姓名
select student.sno,sname
from student,sc
where grade>90
--16.查询选修了“数据库”课程的学生的学号和姓名
select student.sno,sname
from student inner join sc on student.sno=sc.sno
where cno=(select cno from course where cname='数据库')
--17.查询选修了3号课程且成绩高于此课程平均成绩的学号和成绩
select student.sno,grade
from student inner join sc on student.sno=sc.sno
where cno='3'
and grade>(select AVG(grade) from sc)
--18.查询没有选修1号课程的学生姓名。
select sname
from student,sc
where cno!='1'
--1.建立计算机系选修了2号课程的学生视图V1
create view v1
as
select sno,sname,ssex,sage,sdept
from student,course
where sdept='cs' and cno='2'
--2.建立信息系选修了1号课程且成绩在90分以上的学生的视图V2
create view v2
as
select student.sno,sname,ssex,sage,sdept
from student,course,sc
where course.cno='2' and grade>90
--3.将每门课程的课程号和平均成绩定义为一个视图V3
create view v3(cno,avg_grade)
as
select cno,avg(grade)
from sc
group by cno
--三、创建和执行下列存储过程:
--o创建语句格式:
--n CREATE Proc[edure]存储过程名
--[{@参数名数据类型}[=default][output]]
--As
--Sql语句[…n]
--o执行语句格式:
--n [exec[ute]]存储过程名[实参[,output][,…n]
--1.查询计算机系学生的考试成绩,列出学生的姓名、课程名和成绩。
select sname,cno,grade
from student,sc
where sdept='cs'
--2.查询某个指定系学生的考试成绩,列出学生的姓名、所在系、课程名和成绩。
select sname,sdept,cname,grade
from student,sc,course
where sdept='%'
--3.查询某个学生某门课程的考试成绩,列出学生的姓名、课程名和成绩。
select sname,cno,grade
from student,sc
where sname='%' and cname='%'
--4.查询某个学生某门课程的考试成绩,若没有指定课程,则默认课程为“数据库基础”。
select sname,cno,grade
from student,sc
where sname='%' and cname='%'
--5.统计指定课程的平均成绩,并将统计的结果用输出参数返回。
--6.创建带删除数据的存储过程,要求删除考试成绩不及格学生的修课记录。
--7.创建带修改数据的存储过程,要求将指定的课程的学分增加2分。
数据库的题目
、等级查询
题目:员工信息表中有员工ID、姓名、上级员工ID字段,现要求用一条语句,查询出全部员工的ID、姓名及级别——最高为1级,其下依次为2、3、4等,如下图所示:
员工信息表为Oracle数据库hr用户下的employees表,员工ID的字段名为employee_id,姓名为first_name||''|| last_name,上级员工ID为manager_id。在创建Oracle实例时,hr用户及该表自动生成。
通过对员工信息表的分析,发现如下线索:
1、本级员工的manager_id即为上一级员工的employee_id;
2、其中最高级员工的上级员工为空,其他级别都不为空。
如果一张数据库表中存在等级数据,则应使用START WITH… CONNECT BY [PRIOR]…关键字,进行等级查询,其中:
1、START WITH关键字标识数据表中最高等级的特征;
2、CONNECT BY关键字标识上下级行的关系;
3、PRIOR关键字标识此行是上一级行(原文是In a hierarchical query, one expression in condition must be qualified with the PRIOR operator to refer to the parent row.);
4、使用LEVEL伪列显示层级关系。
综上,查询语句为:
SELECT EMPLOYEE_ID,
FIRST_NAME||''|| LAST_NAME AS NAME,
LEVELFROM EMPLOYEESSTART WITH MANAGER_ID IS NULLCONNECT BY PRIOR EMPLOYEE_ID= MANAGER_ID;
二、排序
题目:员工信息表中有员工ID、姓名、部门ID、工资字段,现要求用一条语句,查询出每个员工在整个公司以及本部门工资的排名(升序或降序排列均可),如下图所示:
对于排序,我原来只知道利用ROWNUM伪列:
SELECT E.*,
ROWNUM
FROM(SELECT*
FROM EMPLOYEES
ORDER BY SALARY DESC) E
然后再用这个结果集和其他表关联,针对本题,这种方法可以查出每个员工在整个公司以及本部门工资的排名,但在我看来有如下两个问题:
1、一张事实表关联两次,效率低下;
2、无法查询出每个员工在整个公司以及本部门工资的排名,除非用循环,但又不是一条语句了。
数据库表中对数值字段进行排名,应使用RANK函数,该函数的作用就是计算一个值在一组值中的排名,返回值为数值型,形式为RANK() OVER(PARTITION BY… ORDER BY…),其中:
1、PARTITION BY关键字为用于排序的分组,也就是说如果查询全部数据中的排名,则该关键字可省略;
2、ORDER BY关键字即为按哪个字段进行排序,空或ASC为升序,DESC为降序,与标准SQL没区别;
3、如果两行数据用于排序的字段值完全相同,则二者的RANK返回值(序号)也相同,序号不连续(英文是Identical salary values receive the same rank and cause nonconsecutive ranks),还有类似的DENSE_RANK()函数,相同值的序号相同,序号连续;ROW_NUMBER()函数,每个值的序号唯一,相同值有可能按照ROWNUM的次序编号(这个不确定,官方文档没说,我推测的-_-),这三个函数的使用方法相同。
SQL数据库题目
1、创建数据库
create database学生成绩数据库
on primary
(name='学生成绩数据库_mdf',
filename='e:\学生成绩数据库.mdb',
size=1,
maxsize=10,
filegrowth=10%)
log on
(name='学生成绩数据库_ldf',
filename='e:\学生成绩数据库.ldf',
size=1,
maxsize=10,
filegrowth=10%)
2、创建课程表
create table课程表
(课程号 char(6) primary key,
课程名称 char(20) not null,
任课教师 char(8))
3、创建学生表
create table学生表
(学号 char(6) primary key,
姓名 char(8) not null,
性别 char(2) constraint ck_性别 check(性别 in('男','女')),
民族 char(20) not null default'汉')
4、创建成绩表
create table成绩表
(学号 char(6) not null foreign key(学号) references学生表(学号),
课程号 char(6) not null foreign key(课程号) references课程表(课程号),
分数 int constraint ck_分数 check(分数 between 0 and 150))
5、添加信息
insert课程表(课程号,课程名)
values('100001','大学语文')
insert课程表(课程号,课程名)
values('100002','大学英语')
6.写出创建成绩表视图(学号,姓名,课程号,课程名称,成绩)的代码
create view成绩表视图
as
select学生表.学号,姓名,课程表.课程号,课程名称,成绩
from学生表,课程表,成绩表
where学生表.学号=成绩表.学号 and成绩表.课程号=课程表.课程号
7.写出计算大学语文课程成绩最高分、最低分、平均分的代码
select max(分数)'最高分数',min(分数)'最低分数',avg(分数)'平均分数'
from成绩表
where学号 in(select学号
from课程表
where课程名称='大学语文')
8、检索姓李的女同学的信息:姓名、性别、民族
select姓名,性别,民族
from学生表
where姓名 like'李%' and性别='女'
好了,文章到这里就结束啦,如果本次分享的数据库题和SQL数据库的问题目问题对您有所帮助,还望关注下本站哦!