• 作业


    5月8号

    -- 1、查询所有的课程的名称以及对应的任课老师姓名
    SELECT cname, tname from course join teacher on course.teacher_id = teacher.tid;
    
    -- 2、查询学生表中男女生各有多少人
    SELECT gender, COUNT(sid) from student GROUP BY gender;
    
    -- 3、查询物理成绩等于100的学生的姓名
    SELECT
    	sname 
    FROM
    	student 
    WHERE
    	sid IN (
    	SELECT
    		student_id 
    	FROM
    		score 
    	WHERE
    		course_id IN ( SELECT cid FROM course WHERE cname = '物理' ) 
    	AND num = 100);
    
    -- 4、查询平均成绩大于八十分的同学的姓名和平均成绩
    select student.sname, avg(num) from student join score on student.sid = score.student_id
    GROUP BY score.student_id
    HAVING avg(num) > 80;
    
    -- 5、查询所有学生的学号,姓名,选课数,总成绩
    SELECT
        student.sid,
        student.sname,
        t1.course_num,
        t1.total_num
    FROM
        student
    LEFT JOIN (
        SELECT
            student_id,
            COUNT(course_id) course_num,
            sum(num) total_num
        FROM
            score
        GROUP BY
            student_id
    ) AS t1 ON student.sid = t1.student_id;
    
    
    -- 6、 查询姓李老师的个数
    SELECT count(tid) FROM teacher WHERE tname LIKE '李%';
    
    -- 7、 查询没有报李平老师课的学生姓名
    SELECT
    	sname 
    FROM
    	student 
    WHERE
    	sid NOT IN (
    	SELECT
    		student_id 
    	FROM
    		score 
    	WHERE
    		course_id IN (
    		SELECT
    			cid 
    		FROM
    			course 
    		WHERE
    		teacher_id IN ( SELECT tid FROM teacher WHERE tname = '李平老师' )));
    
    
    -- 8、 查询物理课程比生物课程高的学生的学号
    SELECT
    	t1.student_id 
    FROM
    	(
    	SELECT
    		student_id,
    		num 
    	FROM
    		score 
    	WHERE
    	course_id = ( SELECT cid FROM course WHERE cname = '物理' )) AS t1
    	JOIN (
    	SELECT
    		student_id,
    		num 
    	FROM
    		score 
    	WHERE
    	course_id = ( SELECT cid FROM course WHERE cname = '生物' )) AS t2 ON t1.student_id = t2.student_id 
    WHERE
    	t1.num > t2.num;
    
    -- 9、 查询没有同时选修物理课程和体育课程的学生姓名
    SELECT
        student.sname
    FROM
        student
    WHERE
    	sid IN (
    	SELECT
    		student_id 
    	FROM
    		score 
    	WHERE
    		course_id IN ( SELECT cid FROM course WHERE cname = '物理' OR cname = '体育' ) 
    	GROUP BY
    		student_id 
    	HAVING
    		COUNT( course_id ) = 1 
    	);
    
    -- 10、查询挂科超过两门(包括两门)的学生姓名和班级
    SELECT
    	sname,
    	caption 
    FROM
    	student
    	JOIN class ON student.class_id = class.cid 
    WHERE
    	sid IN (
    	SELECT
    		student_id 
    	FROM
    		score 
    	WHERE
    	num < 60 GROUP BY student_id HAVING COUNT( student_id ) >= 2);
    
    -- 11、查询选修了所有课程的学生姓名
    SELECT
        student.sname
    FROM
        student
    WHERE
        sid IN (
            SELECT
                student_id
            FROM
                score
            GROUP BY
                student_id
            HAVING
                COUNT(course_id) = (SELECT count(cid) FROM course)
        );
    
    -- 12、查询李平老师教的课程的所有成绩记录
    SELECT
    	* 
    FROM
    	score 
    WHERE
    	course_id IN (
    	SELECT
    		cid 
    	FROM
    		teacher
    		JOIN course ON course.teacher_id = teacher.tid 
    	WHERE
    	tname = '李平老师');
    
    -- 13、查询全部学生都选修了的课程号和课程名
    SELECT
    	cid,
    	cname 
    FROM
    	course 
    WHERE
    	cid IN (
    	SELECT
    		course_id 
    	FROM
    		score 
    	GROUP BY
    		course_id 
    	HAVING
    	count( student_id ) = ( SELECT count( sid ) FROM student ));
    
    -- 14、查询每门课程被选修的次数
    SELECT
    	course_id,
    	count( student_id ) 
    FROM
    	score 
    GROUP BY
    	course_id;
    
    -- 15、查询之选修了一门课程的学生姓名和学号
    SELECT
        sid,
        sname
    FROM
        student
    WHERE
        sid IN (
            SELECT
                student_id
            FROM
                score
            GROUP BY
                student_id
            HAVING
                COUNT(course_id) = 1
        );
    
    -- 16、查询所有学生考出的成绩并按从高到低排序(成绩去重)
    select DISTINCT num from score ORDER BY num DESC;
    
    -- 17、查询平均成绩大于85的学生姓名和平均成绩
    SELECT
    	sname,
    	avg( num ) 
    FROM
    	student
    	JOIN score ON student.sid = score.student_id 
    GROUP BY
    	student_id 
    HAVING
    	avg( num ) > 85;
    
    -- 18、查询生物成绩不及格的学生姓名和对应生物分数
    SELECT
        sname as '姓名',
        num as '生物成绩'
    FROM
        score
    JOIN course ON score.course_id = course.cid
    JOIN student ON score.student_id = student.sid
    WHERE course.cname = '生物' AND score.num < 60;
    
    -- 19、查询在所有选修了李平老师课程的学生中,这些课程(李平老师的课程,不是所有课程)平均成绩最高的学生姓名
    SELECT
    	sname 
    FROM
    	student 
    WHERE
    	sid = (
    	SELECT
    		student_id 
    	FROM
    		score 
    	WHERE
    		course_id IN ( SELECT cid FROM course JOIN teacher ON teacher.tid = course.teacher_id WHERE tname = '李平老师' ) 
    	GROUP BY
    		student_id 
    	ORDER BY
    		avg( num ) DESC 
    	LIMIT 1);
    
    -- 20、查询每门课程成绩最好的前两名学生姓名
    select student.sid, student.sname, t4.course_id, t4.first_num, t4.second_num from student join 
    (SELECT
        score.student_id as id,
        t3.course_id,
        t3.first_num,
        t3.second_num
    FROM
        score
    INNER JOIN (
        SELECT
            t1.course_id,
            t1.first_num,
            t2.second_num
        FROM
            (
                SELECT
                    course_id,
                    max(num) first_num
                FROM
                    score
                GROUP BY
                    course_id
            ) AS t1
        INNER JOIN (
            SELECT
                score.course_id,
                max(num) second_num
            FROM
                score
            INNER JOIN (
                SELECT
                    course_id,
                    max(num) first_num
                FROM
                    score
                GROUP BY
                    course_id
            ) AS t ON score.course_id = t.course_id
            WHERE
                score.num < t.first_num
            GROUP BY
                course_id
        ) AS t2 ON t1.course_id = t2.course_id
    ) AS t3 ON score.course_id = t3.course_id
    WHERE
        score.num >= t3.second_num
    AND score.num <= t3.first_num) as t4 on student.sid = t4.id;
    
    -- 21、查询不同课程但成绩相同的学生的学号,课程号,成绩
    select score.student_id, score.course_id, score.num, t.course_id, t.num from score join (select student_id, course_id, num from score) as t on t.student_id = score.student_id
    WHERE t.num = score.num and t.course_id != score.course_id;
    
    -- 22、查询没学过李平老师课程的学生姓名以及选修的课程名称;
    select t.sname, course.cname from 
    (SELECT
    	sid, sname
    FROM
    	student 
    WHERE
    	sid NOT IN (
    	SELECT
    		student_id 
    	FROM
    		score 
    	WHERE
    		course_id IN (
    		SELECT
    			cid 
    		FROM
    			course 
    		WHERE
    		teacher_id IN ( SELECT tid FROM teacher WHERE tname = '李平老师' )))) AS t
    LEFT JOIN score ON t.sid = score.student_id
    LEFT JOIN course ON course.cid = score.course_id
    
    -- 23、查询所有选修了学号为1的同学选修过的一门或者多门课程的同学学号和姓名;
    SELECT
    	student_id,
    	sname 
    FROM
    	score
    	JOIN student ON score.student_id = student.sid 
    WHERE
    	student_id != 1 
    	AND course_id IN ( SELECT course_id FROM score WHERE student_id = 1 ) 
    GROUP BY
    	student_id;
    
    -- 24、任课最多的老师中学生单科成绩最高的学生姓名
    
    SELECT
    	sname 
    FROM
    	student 
    WHERE
    	sid IN (
    	SELECT
    		student_id 
    	FROM
    		score
    		JOIN (
    		SELECT
    			course_id,
    			max( num ) AS n 
    		FROM
    			(
    			SELECT
    				student_id,
    				course_id,
    				num 
    			FROM
    				score 
    			WHERE
    				course_id IN (
    				SELECT
    					cid 
    				FROM
    					course 
    				WHERE
    				teacher_id = ( SELECT max( s ) AS id FROM ( SELECT count( teacher_id ) AS s, teacher_id FROM course GROUP BY teacher_id ) AS t ))) AS t 
    		GROUP BY
    			t.course_id 
    		) AS t1 ON t1.course_id = score.course_id 
    	WHERE
    	score.num = t1.n)
    

    5月6号

    完成下列分组查询练习题
    1. 查询岗位名以及岗位包含的所有员工名字
    select post, group_concat(name) from empp group by post;
    2. 查询岗位名以及各岗位内包含的员工个数
    select post, count(name) from empp group by post;
    3. 查询公司内男员工和女员工的个数
    select sex, count(name) as '人数' from empp group by sex;
    4. 查询岗位名以及各岗位的平均薪资
    select post, avg(salary) from empp GROUP BY post;
    5. 查询岗位名以及各岗位的最高薪资
    select post, max(salary) from empp GROUP BY post;
    6. 查询岗位名以及各岗位的最低薪资
    select post, min(salary) from empp GROUP BY post;
    7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
    select sex, avg(salary) from empp GROUP BY sex;
    

    5月5号
    练习:账号信息表,用户组,主机表,主机组

    #用户表
    create table user(
    id int not null unique auto_increment,
    username varchar(20) not null,
    password varchar(50) not null,
    primary key(username,password)
    );
    
    #用户组表
    create table usergroup(
    id int primary key auto_increment,
    groupname varchar(20) not null unique
    );
    
    #主机表
    create table host(
    id int primary key auto_increment,
    ip char(15) not null unique default '127.0.0.1'
    );
    
    #业务线表
    create table business(
    id int primary key auto_increment,
    business varchar(20) not null unique
    );
    
    #建关系:user与usergroup
    
    create table user2usergroup(
    id int not null unique auto_increment,
    user_id int not null,
    group_id int not null,
    primary key(user_id,group_id),
    foreign key(user_id) references user(id),
    foreign key(group_id) references usergroup(id)
    );
    
    #建关系:host与business
    create table host2business(
    id int not null unique auto_increment,
    host_id int not null,
    business_id int not null,
    primary key(host_id,business_id),
    foreign key(host_id) references host(id),
    foreign key(business_id) references business(id)
    );
    
    #建关系:user与host
    create table user2host(
    id int not null unique auto_increment,
    user_id int not null,
    host_id int not null,
    primary key(user_id,host_id),
    foreign key(user_id) references user(id),
    foreign key(host_id) references host(id)
    );
    
    

    练习:

    # 班级表
    cid	caption
    
    create table class(
    cid int PRIMARY KEY auto_increment,
    caption VARCHAR(50) not null
    );
    
    # 学生表
    sid sname gender class_id
    
    create table student(
    sid int PRIMARY key auto_increment,
    sname varchar(16) not null,
    gender enum('male','female') default 'male',
    class_id int,
    foreign key(class_id) references class(cid) on update cascade on delete cascade
    );
    
    # 老师表
    tid	tname
    
    create table teacher(
    tid int primary key,
    tname varchar(16) not null
    );
    
    # 课程表
    cid  cname  teacher_id
    
    create table course(
    cid int primary key auto_increment,
    cname varchar(16) not null,
    teacher_id int,
    foreign key(teacher_id) references teacher(tid) on update cascade on delete cascade
    );
    
    # 成绩表
    sid  student_id course_id  number
    
    create table score(
    sid int not null unique auto_increment,
    student_id int,
    course_id int,
    number int not null,
    primary key(student_id, course_id),
    foreign key(student_id) references student(sid),
    foreign key(course_id) references course(cid)
    );
    
  • 相关阅读:
    Ckeditor事件绑定
    Linux使用netstat命令查看并发连接数
    memcached 常用命令及使用说明
    Linux(Ubuntu)下面SecureCRT 完全破解
    Linux下用SCP无需输入密码传输文件
    Java的URL类(一)
    java编码与解码(一)
    IDEA破解
    linux查看日志文件命令
    springboot +mybatis 搭建完整项目
  • 原文地址:https://www.cnblogs.com/chenwenyin/p/12831041.html
Copyright © 2020-2023  润新知