MySQL综合练习

MySQL综合练习

学生表:Students (Sno, Sname, Ssex , Sage, Sdept)

​ 学号,姓名,性别,年龄,所在系 Sno为主键

课程表:Course (Cno, Cname,)

​ 课程号,课程名 Cno为主键

学生选课表:SC (Sno, Cno, Score)

​ 学号,课程号,成绩 Sno,Cno为主键

  1. 用SQL语句创建学生表students,定义主键,姓名不能重名,性别只能输入男或女,所在系的默认值是 “计算机”。

    CREATE TABLE `db`.`students` (
      `Sno` INT(10) NOT NULL,
      `Sname` VARCHAR(20) NOT NULL,
      `Ssex` VARCHAR(4) NULL CHECK(Ssex = '男' or Ssex = '女'),
      `Sage` INT(10) NULL,
      `Sdept` VARCHAR(20) NULL,
      PRIMARY KEY (`Sno`),
      UNIQUE INDEX `Sno_UNIQUE` (`Sno` ASC) VISIBLE,
      UNIQUE INDEX `Sname_UNIQUE` (`Sname` ASC) VISIBLE;
      COLUMN `Sdept` `Sdept` VARCHAR(20) NULL DEFAULT '‘计算机系’');
      
    CREATE TABLE `db`.`course` (
      `Cno` INT(10) NOT NULL,
      `Cname` VARCHAR(20) NOT NULL,
      PRIMARY KEY (`Cno`),
      UNIQUE INDEX `idcourse_UNIQUE` (`Cno` ASC) VISIBLE);
      
    CREATE TABLE `sc` (  
      `Sno` INT(10) NOT NULL,  
      `Cno` INT(10) NOT NULL, 
      `Score` INT(10) NULL, 
      PRIMARY KEY (`Sno`, `Cno`));
    
  2. 修改students表中年龄(age)字段属性,数据类型由int 改变为smallint。

    mysql> alter table students modify Sage smallint;
    Query OK, 7 rows affected (0.12 sec)
    Records: 7  Duplicates: 0  Warnings: 0
    
    mysql> select * from students;
    +--------+--------+------+------+-----------+
    | Sno    | Sname  | Ssex | Sage | Sdept     |
    +--------+--------+------+------+-----------+
    | 1001 | 张三   | 男   |   21 | 计算机    |
    | 1002 | 李四   | 男   |   20 | 英语      |
    | 1003 | 王五   | 男   |   22 | 计算机    |
    | 1004 | 赵六   | 女   |   20 | 英语      |
    | 1005 | 钱七   | 男   |   21 | 计算机    |
    | 1006 | 孙八   | 男   |   20 | 计算机    |
    | 1007 | 胡九   | 女   |   19 | 计算机    |
    | 1008 | 武十   | 男   |   20 | 计信管    |
    +------+--------+------+------+-----------+
    +--------+--------+------+------+-----------+
    
  3. 为SC表建立按学号(sno)和课程号(cno)组合的升序的主键索引,索引名为SC_INDEX 。

    mysql> create unique index SC_INDEX on sc(sno ASC,cno ASC);
    Query OK, 0 rows affected (0.07 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
  4. 向students表添加一条纪录:200201,张三,男,21,计算机。

    mysql> create unique index SC_INDEX on sc(sno ASC,cno ASC);
    Query OK, 0 rows affected (0.07 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> insert into students values('200201', '张飞', '男', '21', '计算机');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from student;
    +--------+--------+------+------+-----------+
    | Sno    | Sname  | Ssex | Sage | Sdept     |
    +--------+--------+------+------+-----------+
    |   1001 | 张三   | 男   |   21 | 计算机    |
    |   1002 | 李四   | 男   |   20 | 英语      |
    |   1003 | 王五   | 男   |   22 | 计算机    |
    |   1004 | 赵六   | 女   |   20 | 英语      |
    |   1005 | 钱七   | 男   |   21 | 计算机    |
    |   1006 | 孙八   | 男   |   20 | 计算机    |
    |   1007 | 胡九   | 女   |   19 | 计算机    |
    |   1008 | 武十   | 男   |   20 | 计信管    |
    | 200201 | 张飞   | 男   |   21 | 计算机    |
    +--------+--------+------+------+-----------+
    
  5. 选修了2号课程且成绩低于70的的学生每人成绩增加5分。

    mysql> update sc set Score = Score + 5 where Cno = '2' and Score < 70;
    Query OK, 3 rows affected (0.01 sec)
    Rows matched: 3  Changed: 3  Warnings: 0
    
  6. 删除选修了课程名称为“单片机”的学生的选课成绩记录。

    mysql> delete from SC where Cno in ( select Cno from course where Cname = '单片机');
    Query OK, 5 rows affected (0.01 sec)
    
  7. 创建一视图 stu_info,查询全体学生的姓名,性别,课程名,成绩。

    mysql> create view stu_info as select Sname,Ssex,Cname,Score from sc,students,course where students.Sno = sc.Sno and course.Cno = sc.Cno;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> select * from stu_info;
    +--------+------+-----------+-------+
    | Sname  | Ssex | Cname     | Score |
    +--------+------+-----------+-------+
    | 张三   | 男   | 高数      |    50 |
    | 张三   | 男   | 计算机    |    85 |
    | 李四   | 男   | 英语      |    90 |
    | 王五   | 男   | 英语      |    54 |
    | 王五   | 男   | 高数      |    67 |
    | 王五   | 男   | 计算机    |    81 |
    | 王五   | 男   | java      |    72 |
    | 王五   | 男   | MySQL     |    88 |
    | 王五   | 男   | Linux     |    77 |
    | 王五   | 男   | C++       |    67 |
    | 赵六   | 女   | 英语      |    92 |
    | 钱七   | 男   | 英语      |    53 |
    | 钱七   | 男   | Linux     |    77 |
    | 孙八   | 男   | 英语      |    70 |
    | 孙八   | 男   | 高数      |    82 |
    | 孙八   | 男   | MySQL     |    68 |
    | 孙八   | 男   | C++       |    55 |
    | 胡九   | 女   | 高数      |    76 |
    | 胡九   | 女   | MySQL     |    89 |
    | 武十   | 男   | 英语      |    81 |
    | 武十   | 男   | 高数      |    53 |
    +--------+------+-----------+-------+
    
  8. 查询不及格学生的姓名。

    mysql> select Sname from stu_info where Score < 60;
    +--------+
    | Sname  |
    +--------+
    | 张三   |
    | 王五   |
    | 钱七   |
    | 孙八   |
    | 武十   |
    +--------+
    
  9. 查询选修四门以上课程的学生学号。

    mysql> select Sno from students where Sno in(
        -> select sc.sno from sc group by sc.sno having count(*) > 4);
    +------+
    | Sno  |
    +------+
    | 1003 |
    +------+
    
  10. 查询2号课程的最高分的学生的姓名。

    mysql> select Sname from students,sc where students.Sno = sc.Sno and Score = (   
     	-> select max(Score) from sc where sc.Cno = '2' group by sc.Cno);
     +--------+
     | Sname  |
     +--------+
     | 孙八   |
     +--------+
    

你可能感兴趣的:(mysql)