zoukankan      html  css  js  c++  java
  • 学生、老师、课程表、成绩表演示数据库使用

    学生、老师、课程表、成绩表演示数据库使用

    数据库的select,insert,delete,update大家都会。

    但是,等到复杂到学生、老师、课程表、成绩表的时候,我却是一直糊涂着,
    直到最近实在是需要用到,才下功夫啃下这个小难题。

    前提

    首先,来申明一下前提。

    -   学生有姓名、性别
    -   老师有姓名、性别
    -   学生可以选修不同的课程
    -   学生对每一门选修的课程有分数统计
    

    sql示例

    
    CREATE TABLE `student` (
        `sid` int(11) NOT NULL,
        `sname` varchar(20) DEFAULT NULL,
        `ssex` smallint(6) DEFAULT NULL,
        PRIMARY KEY (`sid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `teacher` (
        `tid` int(11) NOT NULL,
        `tname` varchar(20) DEFAULT NULL,
        PRIMARY KEY (`tid`),
        KEY `idx_teacher_name` (`tname`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `course` (
        `cid` int(11) NOT NULL,
        `cname` varchar(32) DEFAULT NULL,
        `tid` int(11) DEFAULT NULL,
        PRIMARY KEY (`cid`),
        KEY `tid` (`tid`),
        CONSTRAINT `course_ibfk_1` FOREIGN KEY (`tid`) REFERENCES `teacher` (`tid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    CREATE TABLE `score` (
        `sid` int(11) DEFAULT NULL,
        `cid` int(11) DEFAULT NULL,
        `value` int(11) DEFAULT NULL,
        KEY `sid` (`sid`),
        KEY `cid` (`cid`),
        CONSTRAINT `score_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `student` (`sid`),
        CONSTRAINT `score_ibfk_2` FOREIGN KEY (`cid`) REFERENCES `course` (`cid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
          
    

    准备数据

    
    insert into student select 0, '学生1', 1 union all select 1, '学生2', 1 union all select 2, '学生3', 2;
    insert into teacher select 0, '孔子', 1 union all select 1, '孟子', 1 union all select 2, '李清照', 2;
    insert into teacher select 0, '孔子' union all select 1, '孟子' union all select 2, '李清照';
    insert into course values(0, '诗经', 0);
    insert into course values(1, '道德经', 1);
    insert into course values(2, '宋词', 2);
    
    insert into score 
        select 0, 0, 99 union all 
        select 0, 1, 85 union all 
        select 0, 2, 65 union all 
        
        select 1, 0, 56 union all 
        select 1, 1, 68 union all
        select 1, 2, 77 union all 
    
        select 2, 0, 100 union all 
        select 2, 1, 120 union all 
        select 2, 2, 99
        ;
    
    

    各种查询

    
    -- 查询不及格学生
        
    select a.sid, a.sname, b.value from student a, score b where b.value < 60 and a.sid = b.sid;
     
    
    # 一看“学生2”就是那种坏学生 就没几个考好的。。。
    +-----+---------+-------+
    | sid | sname   | value |
    +-----+---------+-------+
    |   1 | 学生2   |    55 |
    |   1 | 学生2   |    56 |
    +-----+---------+-------+
    
  • 相关阅读:
    IP查询网和traceroute找到的网络出口不一致的原因
    [转载] 深入理解VMware虚拟机网络通信原理
    https工作流程
    HTTP1.1协议-RFC2616-中文版
    条件变量调用Signal的时候是否需要持有mutex
    HTTP Get一定是幂等的吗,统计访问量的时候呢?
    unix网络编程
    MySQL-SQL基础-DCL
    MySQL-SQL基础-查询1
    MySQL-SQL基础-子查询
  • 原文地址:https://www.cnblogs.com/morya/p/5037778.html
Copyright © 2011-2022 走看看