创建表
DROP TABLE IF EXISTS student;
CREATE TABLE student(
sno int auto_increment primary key,
sname varchar(8),
ssex varchar(3),
sage int ,
sclass varchar(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO student(sname,ssex,sage,sclass) VALUES('李勇','男',20,'y01');
INSERT INTO student(sname,ssex,sage,sclass) VALUES('刘晨','男',21,'y02');
INSERT INTO student(sname,ssex,sage,sclass) VALUES('王敏','女',19,'y02');
INSERT INTO student(sname,ssex,sage,sclass) VALUES('张力','男',25,'y05');
DROP TABLE IF EXISTS course;
CREATE TABLE course(
cno int auto_increment primary key,
cname varchar(20),
ccredit int
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO course(cname,ccredit) VALUES('C语言',5);
INSERT INTO course(cname,ccredit) VALUES('数据库',5);
INSERT INTO course(cname,ccredit) VALUES('开发模式_VB',5);
DROP TABLE IF EXISTS sc;
CREATE TABLE sc(
sno int references student(sno) on delete cascade,
cno int references course(cno) on delete cascade,
grade int
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO sc VALUES(1,1,90);
INSERT INTO sc VALUES(1,2,95);
INSERT INTO sc VALUES(2,1,55);
INSERT INTO sc VALUES(4,3,null);
练习加总结:
1、查出全体同学的学号、姓名
select sno,sname from student;
2、查询全体同学的姓名学号班级(按顺序输出)
select sname,sno,sclass from student;
3、查询全体同学的记录(显示所有行)
select * from student;
4、查询全体同学的姓名及出生年份
select sname,(2010-sage) as '出生年份' from student ;
5、查询全体同学姓名出生年份班级(班级要用小写字母lower函数)
select sname,2010-sage as '出生年份',lower(sclass) from student;
6、查询全体同学的姓名/出生年份/所在班级列为YearOfBirth
select sname,2010-sage YearOfBirth,sclass from student;
7、查询选中学员的所在班级并且去掉重复行用distinct
select distinct sclass from student;
8、查询Y02班全体同学名单
select * from student where sclass='y02';
9、查询所有年龄在20岁一下的同学姓名及年龄
select sname,sage from student where sage<20;
10、查询考试不及格的同学的姓名及成绩
select s.sname,sc.grade from student s,sc where s.sno = sc.sno and sc.grade <60;
11、查询年龄在19-20岁(包括19、20)之间的同学姓名、班级、年龄
select sname,sclass,sage from student where sage in (19,20);(19、20 比较特殊选项少可以使用 in)
select sname,sclass,sage from student where sage between 19 and 20;
select sname,sclass,sage from student where sage>=19 and sage<=20;
12、查询年龄不在19-20岁之间的同学姓名、班级、年龄
select sname,sclass,sage from student where sage not in (19,20);
select sname,sclass,sage from student where sage not between 19 and 20;
select sname,sclass,sage from student where sage<19 or sage>20;
13、查询y02班级和y05班的同学的姓名、性别
select sname,sclass from student where sclass in ('y02','y05');
select sname,sclass from student where sclass='y02' or sclass='y05';
14、查询不是y02或者y05班的同学的姓名、性别
select sname,sage from student where sclass not in('y02','y05');
select sname,sage from student where sclass!='y02' and sclass!='y05';
select sname,sage from student where not sclass='y02' and not sclass='y05';
15、查所有姓刘的同学的姓名、学号、性别( " % "表示一个或者多个," _ "表示只占一个字符)
select sname,sno,ssex from student where sname like'刘%';
16、查所有姓张且全名只有2个汉子的同学的所有信息
select * from student where sname like'张_';
17、某些学生未考试查缺成绩的同学的学号和课程号
select sno,cno,grade from sc where grade is null;
18、查询所有成绩的同学的学号、课程号和成绩
select sno,cno,grade from sc where grade is not null;
19、查y02班年龄在20岁一下的姓名和年龄
select sname,sage from student where sclass='y02' and sage<20;
20、查选修1号课程的同学的学号和成绩,按成绩降序排序
select sno,grade from sc where cno=1 order by grade desc;
21、查全体同学信息查询结果按所在班级的班级名称按降序排列,同班同学按年龄升序排列
select * from student order by sclass desc,sage asc;
22、查询学员的总人数
select count(sno) from student;
23、查选修课程学院人数
select count(*) from sc;
24、统计1号课的学院平均成绩
select avg(grade) 平均成绩 from sc where cno=1;
25、查选修1号课和同学最高成绩
select max(grade) from sc where cno=1;
26、求各个课程号及相应选课人数
select cno,count(*) 选课人数 from sc group by cno;
27、查选取1门以上课程的同学学号和课程个数
select sno,count(cno) from sc group by sno having count(cno)>1;
28、查每个学员及其选修课程情况
select sno,cno from sc;
29、查每个学员及其选修课程情况对没有选课的也要输出其姓名、学号、性别、班级(注意:是作外连接student是主表)
select st.sname,st.sno,st.ssex,st.sclass,sc.cno,sc.grade
from student st left join sc on
st.sno = sc.sno order by st.sname;
30、查选取2号课程且成绩在90分以上的同学
select * from sc where cno=2 and grade>90;
31、查询每个同学学号姓名,选课程名称及其成绩
select stu.sno,stu.sname,c.cname,sc.grade
from student stu join sc on stu.sno = sc.sno
join course c on c.cno = sc.cno;
或者
select stu.sno,stu.sname,c.cname,sc.grade
from student stu,course c,sc
where stu.sno=sc.sno and c.cno= sc.cno
order by sc.cno desc;
32、查与刘晨在一个班的同学
select * from student where sclass=(select sclass from student where sname='刘晨');
33、选取C语言的同学学号和姓名
select s.sno,s.sname
from student s join sc on s.sno=sc.sno
join course c on sc.cno=c.cno
where c.cname='C语言';
或者
select sno,sname from student where sno in
(select sno from sc where cno in
(select cno from course where cname='C语言'));
34、查其他班级中比y02班某一同学大的同学姓名和年龄
select sname,sage from student
where sclass<>'y02' and
sage > (select min(sage) from student where sclass='y02');
或者(加入 any 关键字)
select sname,sage from student
where sclass<>'y02' and
sage >any (select sage from student where sclass='y02');
35、查其他班中比y02班同学全部都大的同学姓名和年龄
select sname,sage from student
where sclass!='y02' and
sage > (select max(sage) from student where sclass='y02');
或者(加入 all 关键字)
select sname,sage from student
where sclass!='y02' and
sage >all (select sage from student where sclass='y02');
36、查选取1号课程的学员的姓名
(在与查询的集合的包含关系时,最好使用 in 、any、all)
select s.sname from student s,sc
where s.sno = sc.sno and sc.cno=1;
或者(子查询)
select sname from student where sno in
(select sno from sc where cno=1);
37、查没有选取1号课程的学员的姓名(注意:要过滤已经选取过1号的同学,因为可能某同学多选修课程)
说明:如果是过滤集合,就只能用 in/all/any
select sname from student where sno not in
(select sno from sc where cno=1);
38、查y02班同学及年龄不大于19岁的学员(union)
select * from student where sclass='y02' union
select * from student where sage<=19;
解析:y02班级的同学与全年纪年龄不大于19岁的学生,而(sage<=19 and sclass='y02')表示为
y02班级同学“且”年龄不大于19岁的同学,与题意不符。所以下面的语句是错误的,因为范围没有确定好
select * from student where sclass='y02' and sage<=19;
说明:union 用来两个集合求并集(合并两个集合,并且除去重复的记录)
39、查询选取1号课程或者2号课程的同学学号
select distinct sno from sc where cno=1 or cno=2;
或者
select distinct sno from sc where cno in (1,2);
40、将4号学员的年龄改为23岁
update student set sage=23 where sno=4;
41、将所有同学的年龄增加1岁
update student set sage=sage+1;
42、y02班的同学的成绩改为100
update sc set grade=100 where sno in (select sno from student where sclass='y02');
43、删除学号为1的同学记录
delete from student where sno=1;
分享到:
相关推荐
MySQL数据库练习题50道.pdf 本资源为MySQL数据库练习题,共50道题,涵盖数据库设计、数据表创建、数据插入、查询等多方面的知识点。下面是对该资源的详细知识点总结: 一、数据库设计 * 数据库设计是指根据具体的...
根据给定的数据库练习题文档,我们可以总结出以下几个重要的知识点: ### 1. 数据库表设计 #### 1.1 学生表 (Student) - **SID**: 学生编号,用于唯一标识每个学生。 - **Sname**: 学生姓名。 - **Sage**: 学生的...
SQL数据库练习题主要涵盖了数据库的基本操作,如查询、联查、聚合函数、插入数据等。以下是对这些练习题涉及知识点的详细解释: 1. **查询各系及学生数**: 这个问题展示了如何使用`COUNT()`函数来计算特定条件下...
数据库练习题解析 本资源摘要信息将对数据库练习题进行详细的分析和解释,并提供相关的SQL语句实现各种功能。...这些SQL语句只是对数据库练习题的一部分答案,旨在帮助学生更好地理解数据库概念和SQL语句的应用。
这份"数据库练习题(英文版).rar"压缩包文件显然包含了关于数据库的学习资料,特别是以英文形式呈现的练习题目,适合那些希望提升数据库理论知识和实践能力的学生或专业人士。 在学习数据库时,首先会接触到的基本...
### 入门级数据库练习题解析 #### 一、知识点概览 本篇文章将围绕给定的数据库练习题展开详细解析。题目旨在帮助初学者快速掌握数据库的基本操作,并且通过对比Oracle与MySQL的不同之处加深对数据库语法的理解。...
Access 数据库练习题 以下是 Access 数据库练习题的知识点总结: 1. 关系数据库中,一个关系就是一个二维表。 2. 设有部门和员工两个实体,每个员工只能属于一个部门,一个部门可以有多个员工,则部门与员工实体...
"VFP数据库练习题.pdf" 是一份关于数据库管理系统的练习题,涵盖了数据库的基本概念、数据模型、关系数据库管理系统、数据库设计、数据 normalize、关系运算等方面的知识点。 数据库基本概念 1. 实体(Entity):...
根据给定的数据库练习题,我们可以提取出一系列与数据库设计、SQL语言操作及查询相关的知识点。下面将逐一解析这些知识点: ### 数据库表结构定义 #### 学生表(STUDENT) - **字段说明** - `SNO VARCHAR(3) NOT ...
以下是这些练习题可能涵盖的一些关键知识点: 1. **关系数据库模型**:这是最常见的数据库模型,基于二维表格结构。了解关系模型的基本概念,如实体、属性、键、主键、外键等,是学习数据库的基础。 2. **SQL语言*...
### 数据库经典练习题知识点解析 #### 一、数据库表结构设计 在本题中,设计了四个数据库表:`STUDENT`(学生)、`COURSE`(课程)、`SCORE`(成绩)以及`TEACHER`(教师)。通过这些表的设计,我们可以观察到...
数据库系统概论练习题知识点总结 本文将对数据库系统概论练习题的知识点进行总结和解释。 数据库原理 1. 关系中属性个数称为“元数”,元组个数称为“基数”。 2. SQL 的主码子句和外码子句属于 DBS 的完整性措施...
使用 EXISTS 运算符可以筛选出同时学过课程 1 和课程 2 的同学,然后使用子查询来关联学生表和成绩表。 知识点: * EXISTS 运算符 * 子查询 7. 查询学过“李四”老师所教所有课程的所有同学的学号、姓名 这道题...
首先,我们需要选择课程表中的课程号、课程名,然后使用选择操作符(σ)和投影操作符(π)来过滤出教师“程军”所授课程的课程号和课程名。 (2) “李强”同学不学课程的课程号: 在这个问题中,我们需要使用...
在本篇数据库练习题中,主要涉及了Access数据库的基本操作,包括创建数据库、设计表、设置主键、创建关系以及导入Excel数据等知识点。以下是详细解释: 1. 创建数据库: 在Access中创建一个名为“St-database”的...
本题库专注于SQL数据库操作语句,特别涉及了三个基础表格:学生表(Student)、课程表(Course)和学生选课表(SC)。这些表格是构成一个教育管理系统的基础,通过它们可以实现对学生信息、课程信息以及选课情况的...
在本课程中,我们将探讨一系列关于数据库的重要知识点,旨在提升你在实际应用中的能力。 首先,我们来关注数据库的基础概念。数据库是一个有组织的数据集合,它按照特定的数据模型(如关系型、对象-关系型、NoSQL等...