数据库表的查询操作实践演练(实验三)

   2015-08-12 0
核心提示:这篇文章主要对数据库表的查询操作进行实践演练,针对实验一和实验二涉及到的内容进一步深入学习,进一步理解关系运算,巩固数据库的基础知识,感兴趣的小伙伴可以参考一下

继前两次的实验,本次实验以熟练掌握利用select语句进行各种查询操作:单表查询、多表连接及查询、嵌套查询、集合查询等,巩固数据库查询操作。
下面就跟着小编一起练习吧!
在实验一创建并插入数据的表(Student, Course,SC,Teacher,TC)的基础上,完成以下操作。
(1)将教师‘罗莉'的名字改为‘罗莉莉'。

复制代码 代码如下:
update Teacher set tname='罗莉莉' where tname='罗莉'

(2)将两个同学(数据自己临时设置,用后即删除)的两门课程的成绩以运行sql程序文件的形式插入score表中。该题用以验证、理解和掌握关系模型的完整性规则;
 插入:
复制代码 代码如下:
insert into Score(sno,cno,grade) values ('04261006','C003','64')
insert into Score(sno,cno,grade) values('04261007','C004','79')

查询:
复制代码 代码如下:
select sno 学号,cno 课程号,grade 分数from Score where sno=04261006 or sno=04261007;

删除:
复制代码 代码如下:
delete from Score where sno=04261006 or sno=04261007;

(3)求每门课的平均成绩,并把结果存入average表(自行设计并创建);
复制代码 代码如下:
CREATE TABLE average
(
cno CHAR(8),
avscore numeric(5,2),
constraint a1 primary key (cno),
constraint a2 foreign key (cno) references Course(cno),
)
insert into average(cno,avscore)
select distinct cno ,avg(grade) from Score group by cno

(4)将学生“马丽”的年龄改为24;
复制代码 代码如下:
Update Student set 2014-year(Sbirth) 年龄 where Sname=' 马丽'

(5)将所有学生的szipcode属性列值填补上;
复制代码 代码如下:
update Student set szipcode='221000'

(6)将average表中的所有课程的平均成绩置零;
复制代码 代码如下:
update average set avscore='0'

(7)删除average表中的课程号为‘C007'的平均成绩记录;
复制代码 代码如下:
delete from average where cno='C007'

(8)删除所有average表中平均成绩记录;
复制代码 代码如下:
delete from average;

(9)建立一个临时学生信息表(tstudent),删除该表中的学号含‘101'的所有学生记录。
复制代码 代码如下:
create  table  tstudent   ( Sno  char(8)  primary  key,     Sname  varchar(8)  unique ); 
Delete  from  tstudent  where  Sno  like '001011%';

(10)查询全体学生的学号与姓名;
复制代码 代码如下:
select sno 学号,sname 姓名from Student

(11)查询全体学生的学号、姓名、所属系;
复制代码 代码如下:
select sno 学号,sname 姓名,sdept 系from Student

(12)查询全体学生的详细记录;
复制代码 代码如下:
select * from Student

(13)查询全体学生的姓名及其年龄;
复制代码 代码如下:
select sname 姓名,2014-year(sbirth) 年龄from Student

(14)查询全体学生的姓名、出生年份;
复制代码 代码如下:
select sname 姓名,year(sbirth) 出生年份from Student

(15)查询所有修过课的学生的学号;
复制代码 代码如下:
select distinct sno from Score
select distinct student.sno from Student,Score where Student.sno=Score.sno and Score.grade>0 ;

(16)查询“计算机系”班全体学生名单;
复制代码 代码如下:
select sno,sname from Student where sdept='计算机系'

(17)查询查询所有年龄在23岁以下的学生姓名及其年龄;
复制代码 代码如下:
select sname 姓名,2014-year(sbirth) 年龄from Student where 2014-year(sbirth)<23;

(18)查询考试成绩有不及格的学生的学号;
复制代码 代码如下:
select distinct sno from Score where grade<60;

(19)查询年龄在20至22岁之间的学生姓名、系和年龄;
复制代码 代码如下:
select sname 姓名,sdept 系,2014-year(sbirth) 年龄from student where 2014-year(sbirth) between 20 and 22;

(20)查询年龄不在20至22岁之间的学生姓名、系和年龄;
 
复制代码 代码如下:
select sname 姓名,sdept 系,2014-year(sbirth) 年龄from student where 2014-year(sbirth) not between 20 and 22;

(21)查询“计算机系”和“电商系”的学生的姓名;
复制代码 代码如下:
select sname from Student where sdept='计算机系' or sclass='电商系'

(22)查询既不是“计11”也不是“计61”班的学生的姓名和班级信息;
复制代码 代码如下:
select sname,sclass from Student where sclass not in('计','计');
(23)查询学号为“04262002”的学生的详细情况;
[code]select student.sno,sname,ssex,2014-year(sbirth),sclass,grade from Student,Score where Student.sno=Score.sno and Student.sno='04262002';

(24)查询学号以“04262”打头的学生信息;
复制代码 代码如下:
select * from Student where sno like '04262%'

(25)查询所有姓“张”学生的学号、姓名、性别、年龄;
复制代码 代码如下:
select sno 学号,sname 姓名,ssex 性别,2011-year(sbirth) 年龄from Student where sname like'王%'

(26)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;
复制代码 代码如下:
select sno 学号,sname 姓名,ssex 性别,2011-year(sbirth) 年龄from Student where sname like '_田%'

(27)查询所有不姓“刘”学生的姓名;
复制代码 代码如下:
select sname 姓名from Student where sname not like '刘%'

(28)查询课程号以“C”开头的最后两个字母为“05”的课程号和课程名;
复制代码 代码如下:
select cno,cname from Course where cno like 'C%05'

(29)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,试查找缺少考试成绩的学生和相应的课程号;
复制代码 代码如下:
select Student.sno,sname,cno from Student,Score where Student.sno=Score.sno and grade is NULL;

(30)查找全部有成绩记录的学生学号、课程号;
复制代码 代码如下:
select sno, cno from Score where grade is not NULL;

(31)查找“计算机系”年龄在22岁以下的学生学号、姓名;
复制代码 代码如下:
select sno ,sname from Student where sdept='计算机系' and 2014-year(sbirth)<22

(32)查找选修了“C001”号课程的学生学号及其成绩,查询结果按分数降序排序;
复制代码 代码如下:
select student.sno,grade from student,Score where Student.sno=Score.sno and cno='C001' order by grade desc;

(33)查询全体学生情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列;
复制代码 代码如下:
select * from student order by sdept asc,2014-year(sbirth) desc;

(34)查询学生总人数;
复制代码 代码如下:
select count(*) 人数from Student;

(35)查询选修了课程的学生人数;
复制代码 代码如下:
select count(distinct sno)人数from Score;

(36)在所有课程中查询最高分的学生学号和成绩;
复制代码 代码如下:
select sno,grade from Score where grade =(select max(grade)from Score )

复制代码 代码如下:
select distinct a.* from Score a where a.sno IN (select top 1 Score.sno from Score where Score.cno = a.cno order by grade desc)

(37)查询学习“C001”课程的学生最高分数;
 
复制代码 代码如下:
select max(grade)最高分数from Score where cno='C001'

(38)计算各个课程号与相应的选课人数;
复制代码 代码如下:
select count(sno) 选课人数from Score group by cno;

(39)查询“计算机系”选修了两门课程以上的学生学号、姓名;
复制代码 代码如下:
select Student.sno,sname from Student where Student.sno in
(select Student.sno from Student,Score where
sdept='计算机系'and Student.sno=Score.sno group by Student.sno having count(cno)>=2);

(40)自然连接student和score表;
复制代码 代码如下:
select student.*,Score.grade from student ,Score where student.sno=Score.sno;

(41)使用自身连接查询每一门课程的间接先行课(即先行课的先行课)
复制代码 代码如下:
select a.cno,b.cpno from Course a,Course b where a.cpno=b.cno;

(42)使用复合条件连接查询选修“c001”号课程且成绩在90分以上的所有同学;
复制代码 代码如下:
select sname,grade from student,Score where Student.sno=Score.sno and cno='C001' and grade>=90;

(43)使用复合条件连接查询每个学生选修的课程名及其成绩;
 
复制代码 代码如下:
select Student.sno,sname,cname,grade from Course,Score,Student where Course.cno=Score.cno and student.sno=Score.sno;

(44)查询选修了全部课程的学生;
复制代码 代码如下:
select Sname from Student where not exists (select *  from Course where not exists(select *  from Score where Sno=Student.Sno and Cno=Course.Cno))

(45)查询所有选修了C001号课程的学生学号、姓名;
复制代码 代码如下:
select student.sno,sname from student,Score where student.sno=Score.sno and cno='C001';
(46)查询选修了课程C001或C007的学生学号、姓名;
[code]select student.sno,sname,cno from student,Score where student.sno=Score.sno and cno in ('C001','C007');
[/code]
(47)查询“计算机系”的学生及年龄不大于23岁的学生;
复制代码 代码如下:
select sno ,sname,2014-year(sbirth) age ,sclass from student where sdept='计算机系' or 2014-year(sbirth)<=23;

(48)查询既选修了课程C001又选修了课程C007的所有学生学号、姓名;
复制代码 代码如下:
select student.sno,sname from student,Score where student.sno=Score.sno and cno='C001' and student.sno in (select student.sno from student,Score where student.sno=Score.sno and cno='C007')

(49)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;
复制代码 代码如下:
select student.sno ,sname,ssex,cname,2011-year(sbirth) age from student,Score,Course where student.sno=Score.sno and Score.cno=Course.cno and cname='数据库原理';

(50)查询其他班中比“计算机系”所有学生年龄都小的学生名单;
复制代码 代码如下:
select sno,sname ,2014-year(sbirth) age from student where 2014-year(sbirth)<(select min(2014-year(sbirth)) from student where sclass='计61')and sclass !='计61';

(51)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;
复制代码 代码如下:
select sno,sname,ssex,2014-year(sbirth) age from student where sdept=(select sdept from student where sname='夏天') and sname!='夏天'

(52)建立“计算机系”学生的视图1;
复制代码 代码如下:
create view view_student
as select sno,sname,ssex,sbirth,sclass from student where sclass='13z网络'

(53)建立“计算机系”学生的视图2,并要求进行修改与插入时,仍须保证该视图只有“计算机系”班学生;
复制代码 代码如下:
create view view_student2
as select sno,sname,ssex,sbirth,sclass from student where sclass='13z网络' with check option;

(54)建立“计算机系”选修了“C001”课程的学生的视图,定义视图名为“v_cs_C001_student1”;
复制代码 代码如下:
create view v_cs_C001_student1
as select student.sno,sname,ssex,sbirth,sclass from Student ,Score where
student.sno=Score.sno and sclass='13z网络' and cno='C001';

(55)建立“计算机系”班选修了“C001”课程且成绩在90分以上的学生的视图,定义视图名为“cs_c001_student2”;
复制代码 代码如下:
create view cs_c001_student2
as
select student.sno,sname ,ssex,sbirth,sclass,cno from student,Score where
student.sno=Score.sno and cno='C001' and sclass='13z网络'and student.sno in (select student.sno from student,Score where student.sno=Score.sno and grade>90)

(56)定义一个反映学生年龄的视图,定义视图名为“v_birth_student”;
复制代码 代码如下:
create view v_birth_student
as
select sno,sname,2014-year(sbirth) age from student

(57)将学生表中所有女生记录定义为一个视图,视图名为“v_female_student”;
复制代码 代码如下:
create view v_female_student
as
select * from student where ssex='女';

(58)将学生的学号及其平均成绩定义为一个视图,视图名为“v_average_student”;
复制代码 代码如下:
create view v_average_student
as
select sno,avg(grade) avscore from Score group by sno;

(59)在“计算机系”学生视图中找出年龄小于22岁的学生;
复制代码 代码如下:
select * from view_student where 2014-year(sbirth)<=22;

(60)利用视图查询“计算机系”选修了“C001”课程的学生;
复制代码 代码如下:
select * from v_cs_C001_student1;

(61)通过(52)中的“计算机系”视图修改某个学生的名字;
复制代码 代码如下:
update view_student set sname='王某某'where sno=04261001;

(62)通过(53)中的“计算机系”视图,插入一个新学生记录。
复制代码 代码如下:
insert into view_student2(sno,sname,ssex,sbirth,sclass) values ('04262004','张某某','男','1987/11/09','计');

(63)通过(53)中的“计算机系”视图,删除一个学生记录。
复制代码 代码如下:
delete from view_student2 where sno='04262004'and sname='张某某';

实验课结束了,相信通过本节课的实践操作,小伙伴们都对数据库表的操作有了更进一步的了解。
以上就是查询数据库表的基本操作,几乎涵盖了各种查询操作所遇到的情况,值得大家亲自操作一下,相信对大家的学习有所帮助。

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • MySQL常用sql语句-----数据表的查询操作 mysql查询语句
    MySQL常用sql语句-----数据表的查询操作 mysql
    1.查询指定字段select c_id,c_age,c_name from t_student;select c_id as 编号,c_name as 姓名,c_age 性别 from t_student;2.去重查询select distinct c_address from t_studentselect distinct c_address,c_name from t_student3.比较运算符查询select c_nam
    02-10
  • SQL查询oracle的nclob字段
    使用CONTAINS关键字查询NCLOB字段 SELECT  FORMATTED_MESSAGE    FROM     TBL_LOG WHERE     CONTAINS(FORMATTED_MESSAGE, p_FORMATTED_MESSAGE)0;
    02-10
  • [Mysql]过大sql文件导入过慢问题解决 mysql查询太慢 数据量大 怎么优化
    [Mysql]过大sql文件导入过慢问题解决 mysql查询
    控制 MySQL 磁盘写入策略 以及 数据安全性 的两个关键参数: innodb_flush_log_at_trx_commit 和 sync_binlog参数:innodb_flush_log_at_trx_commit①如果设置为0,log buffer将每秒一次地写入log file中,并且同时进行log file的flush(刷新到磁盘中)操作
    02-10
  • sql查询报java.sql.SQLException: Column '
    报java.sql.SQLException: Column 'LC_ID' not found 的错误实际上是mysql在hibernate别名的问题我的查询sql是 String sql2 ="select lc.lc_id  lcId from Uum_Logincheck lc ";信息: Server startupin 13441 msselect lc.LC_ID lcId fromUum_Logincheck lc
    02-10
  • SQL查询出日期最新的数据MySQL sql 查询日期
    查询日期最新的数据在使用数据库时,我们经常需要查询最后日期的数据。思路这个问题应该分两步解决:查询出日期最后的日期是什么。使用这个日期作为条件来查询数据。示例数据表(表名: t1)usrscoreagecdate张三99122011-9-10李四98152008-9-12代码SELECT * FROM
    02-10
  • 探究MySQL中SQL查询的成本
    探究MySQL中SQL查询的成本
    成本什么是成本,即SQL进行查询的花费的时间成本,包含IO成本和CPU成本。IO成本:即将数据页从硬盘中读取到内存中的读取时间成本。通常1页就是1.0的成本。CPU成本:即是读取和检测是否满足条件的时间成本。0.2是每行的CPU成本。单表查询计算成本我们对其进行
    02-10
  • 查看Mysql实时执行的Sql语句 mysql查询当前执行的sql
    查看Mysql实时执行的Sql语句 mysql查询当前执行
    最近给客户开发了基于Asp.Net mvc5 +Mysql+EF的项目,但是在EF里无法看到Mysql执行的语句之前也找到一些监控Mysql的软件但一直没有用起来,现在又遇到了问题即在EF里Mysal的查询没有结果而在Mysql里没有问题因为不知道EF生成的Mysql语句所以不知道是不是Sql的问
    02-10
  • mysql-大量数据的sql查询优化 mysql查询优化的
     1、应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描。 2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致
    02-10
  • Oracle执行SQL查询语句的步骤
    sql语句的执行主要由用户进程与服务器进程来完成,其他的一些进程可能要辅助完成这一过程。查询语句与其他的sql语句有所不同,如果一个查询语句执行成功,就要返回查询结果,而其他的sql语句只是返回执行成功或失败的信息。查询语句的主要SQL语句的执行主要由
    02-10
  • oracle 之 数组、嵌套表、SQL查询式 实现多表
    1、基础环境创建基础表:CREATE TABLE TEST_TAB1(ID INT,NAME VARCHAR2(20));CREATE TABLE TEST_TAB2(ID INT,NAME VARCHAR2(20));CREATE TABLE TEST_TAB3(ID INT,NAME VARCHAR2(20));CREATE TABLE TEST_IN_TAB(ID INT,NAME VARCHAR2(20));插入基础数据:INSER
    02-10
点击排行