数据库习题大集合

习题数据资料

CREATE TABLE class (
cid int(11) NOT NULL AUTO_INCREMENT,
caption varchar(32) NOT NULL,
PRIMARY KEY (cid)
) ENGINE=InnoDB CHARSET=utf8;
 
INSERT INTO class VALUES
(1, '三年二班'), 
(2, '三年三班'), 
(3, '一年二班'), 
(4, '二年九班');

  CREATE TABLE teacher(
   tid int(11) NOT NULL AUTO_INCREMENT,
   tname varchar(32) NOT NULL,
   PRIMARY KEY (tid)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  
 
 CREATE TABLE student(
   sid int(11) NOT NULL AUTO_INCREMENT,
   gender char(1) NOT NULL,
   class_id int(11) NOT NULL,
   sname varchar(32) NOT NULL,
   PRIMARY KEY (sid),
   KEY fk_class (class_id),
   CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES class (cid)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 CREATE TABLE course(
   cid int(11) NOT NULL AUTO_INCREMENT,
   cname varchar(32) NOT NULL,
   teacher_id int(11) NOT NULL,
   PRIMARY KEY (cid),
   KEY fk_course_teacher (teacher_id),
   CONSTRAINT fk_course_teacher FOREIGN KEY (teacher_id) REFERENCES teacher (tid)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
  CREATE TABLE score (
   sid int(11) NOT NULL AUTO_INCREMENT,
   student_id int(11) NOT NULL,
   course_id int(11) NOT NULL,
   num int(11) NOT NULL,
   PRIMARY KEY (sid),
   KEY fk_score_student (student_id),
   KEY fk_score_course (course_id),
   CONSTRAINT fk_score_course FOREIGN KEY (course_id) REFERENCES course (cid),
   CONSTRAINT fk_score_student FOREIGN KEY (student_id) REFERENCES student(sid)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
  INSERT INTO teacher VALUES
 (1, '张磊老师'), 
 (2, '李平老师'), 
 (3, '刘海燕老师'), 
 (4, '朱云海老师'), 
 (5, '李杰老师');
  
 INSERT INTO student VALUES
 (1, '男', 1, '理解'), 
 (2, '女', 1, '钢蛋'), 
 (3, '男', 1, '张三'), 
 (4, '男', 1, '张一'), 
 (5, '女', 1, '张二'), 
 (6, '男', 1, '张四'), 
 (7, '女', 2, '铁锤'), 
 (8, '男', 2, '李三'), 
 (9, '男', 2, '李一'), 
 (10, '女', 2, '李二'), 
 (11, '男', 2, '李四'), 
 (12, '女', 3, '如花'), 
 (13, '男', 3, '刘三'), 
 (14, '男', 3, '刘一'), 
 (15, '女', 3, '刘二'), 
 (16, '男', 3, '刘四');
 
 INSERT INTO course VALUES
 (1, '生物', 1), 
 (2, '物理', 2), 
 (3, '体育', 3), 
 (4, '美术', 2);
 
 INSERT INTO score VALUES
 (1, 1, 1, 10),
 (2, 1, 2, 9),
 (5, 1, 4, 66),
 (6, 2, 1, 8),
 (8, 2, 3, 68),
 (9, 2, 4, 99),
 (10, 3, 1, 77),
 (11, 3, 2, 66),
 (12, 3, 3, 87),
 (13, 3, 4, 99),
 (14, 4, 1, 79),
 (15, 4, 2, 11),
 (16, 4, 3, 67),
 (17, 4, 4, 100),
 (18, 5, 1, 79),
 (19, 5, 2, 11),
 (20, 5, 3, 67),
 (21, 5, 4, 100),
 (22, 6, 1, 9),
 (23, 6, 2, 100),
 (24, 6, 3, 67),
 (25, 6, 4, 100),
 (26, 7, 1, 9),
 (27, 7, 2, 100),
 (28, 7, 3, 67),
 (29, 7, 4, 88),
 (30, 8, 1, 9),
 (31, 8, 2, 100),
 (32, 8, 3, 67),
 (33, 8, 4, 88),
 (34, 9, 1, 91),
 (35, 9, 2, 88),
 (36, 9, 3, 67),
 (37, 9, 4, 22),
 (38, 10, 1, 90),
 (39, 10, 2, 77),
 (40, 10, 3, 43),
 (41, 10, 4, 87),
 (42, 11, 1, 90),
 (43, 11, 2, 77),
 (44, 11, 3, 43),
 (45, 11, 4, 87),
 (46, 12, 1, 90),
 (47, 12, 2, 77),
 (48, 12, 3, 43),
 (49, 12, 4, 87),
 (52, 13, 3, 87);

  

  1、查询所有的课程的名称以及对应的任课老师姓名  

  注意
    1.该题的主语,是课程;而非老师. 
    2.表的字段名字再查询时要对应好,否则报错
select course.cname,teacher.tname
from teacher inner join course on teacher_id=teacher.tid;
2、查询学生表中男女生各有多少人
     注意
        1.此处的count(4) 里的数字可以是任何数,主要是为了语法的完整.结果是各组人数
        2.分组后,select 后面只能进行与分组相关的查询, 包括使用聚合函数
select gender,count(
4) from student group by gender;
3、查询物理成绩等于100的学生的姓名
  注意
      course inner join score on 条件一定要给外键关联的(on后面的条件意味着,两个表如何结合);否则表结果,会形成笛卡儿积的效果(一张数据重复且数据混淆的表),这不是我们想要的.
select sname
from student where sid in (select student_id from course inner join score on course_id= course.cid where course.cname="物理" and score.num=100);
4、查询平均成绩大于八十分的同学的姓名和平均成绩
    注意
       一定注意空格,avg(num) as 之间的空格一定不要省;否则会报错
select sname,avg_num from student inner join (select avg(num) as avg_num,student_id from score group by student_id having avg(num)>80)as t1 on student.sid=student_id;
5、查询所有学生的学号,姓名,选课数,总成绩
    注意
    没有选课的学生也是要算在里面的. sum()  总和;count() 计算个数
    on 后面的条件,字表中一定要给出,否则,报错
select sid,sname,count_course,sum_score from student left join (select 
student_id,count(course_id) as count_course,sum(num) as sum_score from score group by student_id) as t1 on t1.student_id=student.sid;
6、 查询姓李老师的个数
    注意
        正则使用的语法要注意, 如果要匹配的是绝对值,就用字段名=值;否则(%,_),字段名和值是分开的,中间有个like;其他的(^,$...)也是要跟值分开,不过中间以regexp分割.

select count(tname) from teacher where tname like "李%";
====================================================
2019/10/10号练习

 

 

 

 

#创建学生表
create table student(id int primary key,Name varchar(10) not null,Sex char(1) not null);
#创建考勤记录表 create table attendance_records( student_id int(
10) not null, record_date date,key stu_id(student_id),constraint stu_id foreign key (student_id) references student(id)); # key stu_id(student_id) 是设置外键; # constraint stu_id foreign key (student_id) references student(id))关联外键,解释关联谁

 

 

 

select id,Name,Sex from students inner join(select * from attendance_records where record_date!=

 

posted @ 2019-01-20 19:57  Tank-Li  阅读(321)  评论(0编辑  收藏  举报