美文网首页SQL
MySQL语句练习

MySQL语句练习

作者: 阿巳交不起水电费 | 来源:发表于2023-02-13 09:56 被阅读0次

    这里提供些测试语句方便练习上一篇 MySQL数据库建立多对多的数据表关系-学生课程表例子(附源码) 创建的表:

    image.png
    SELECT * FROM student;
    
    #给表格添加列
    ALTER TABLE student ADD COLUMN 列名 VARCHAR(30);
    
    -- DML语句练习
    #插入一条数据
    INSERT INTO student(NAME,age,birthday) VALUES("郭靖",40,"1972-12-01");
    #修改
    UPDATE student SET age=41,NAME="黄蓉" WHERE id=9;
    #删除
    DELETE FROM student WHERE id=9;
    
    -- DQL
    SELECT NAME,age FROM student WHERE id=1;
    # DISTINCT 去除重复,代表的是行数据的不同,而不是只针对某个列名
    SELECT DISTINCT NAME,age FROM student;
    
    
    # ------------- 学生课程表练习:------------- 
    SELECT * FROM student;
    SELECT * FROM course;
    
    #练习:多表关联查询-查询学生所有信息包括选课信息
        #隐式内连接 - 便于理解
        SELECT 
        *
        FROM student t1,course t2, student_course_relation t1_t2
        WHERE t1.`student_id`=t1_t2.`student_id` AND t2.`course_id`=t1_t2.`course_id`;
        
        #显式内连接 - 效率更高
        SELECT *
        FROM student t1
        JOIN student_course_relation t1_t2 ON t1.`student_id`=t1_t2.`student_id`
        JOIN course t2 ON t2.`course_id`=t1_t2.`course_id`;
    
    #练习:查询student表中所有数据且学生姓名不能重复 -- 这个使用group by 学生姓名实现即可
    
    
        #练习1_1: 查询学生的所有信息及其所选课程,为了方便查看并按照学号(学生id)排序
    
        SELECT *
        FROM 
            student t1,
            course t2, 
            student_course_relation t1_t2
        WHERE 
            t1.`student_id` = t1_t2.`student_id` AND t2.`course_id` = t1_t2.`course_id` -- 隐式内连接
            ORDER BY t1.`student_id` ASC; -- 学生id升序
            
        #练习1_2: 查询学生的所有信息及其所选课程,为了方便查看并按照学号(学生id)排序 --- 显式内连接方式
    
            SELECT 
            t1.`student_id`,t1.name,t1.`age`,t1.`id_no`,t1.`sex`,
            t2.`NAME` course_name
            FROM 
            student_course_relation t1_t2 
                JOIN student t1 ON t1_t2.`student_id`=t1.`student_id`
                JOIN course t2 ON t1_t2.`course_id` = t2.`course_id` -- 多个join on
                ORDER BY t1.`student_id` ASC; -- 学生id升序
            
    #练习2:查询聂风选了哪些课程
         #1 隐式内连接方式
        SELECT 
            t1.*,
            t2.`NAME` 课程名称
        FROM
            student t1,
            course t2, 
            student_course_relation t1_t2
            WHERE t1.name="聂风" AND t1.`student_id`=t1_t2.`student_id` AND t2.`course_id`=t1_t2.`course_id`;
    
         #2 显式内连接方式
        SELECT 
            t1.*,
            t2.`NAME` 课程名称
        FROM 
            student t1
            JOIN student_course_relation t1_t2 ON t1.`student_id`=t1_t2.student_id
            JOIN course t2 ON t2.`course_id` = t1_t2.`course_id`
            WHERE t1.name="聂风";
            
        #3 - 利用子查询的方式 - 这个稍稍麻烦
        SELECT 
            t1.*,
            t2.`NAME` 课程名称
        FROM (
            SELECT 
                t1.*
            FROM 
                student t1 WHERE t1.name="聂风"
            ) t1
    
            JOIN student_course_relation t1_t2 ON t1.`student_id`=t1_t2.student_id
            JOIN course t2 ON t2.`course_id` = t1_t2.`course_id`;
    
    #练习3:查询各个课程的选修人数并按照选修人数升序排序
        #1 - 隐式内连接
        SELECT 
            course.`course_id`,
            course.`NAME`,
            COUNT(t1_t2.`student_id`) 选修人数
        FROM course, student_course_relation t1_t2
        WHERE course.`course_id` = t1_t2.`course_id`
        GROUP BY course.name
        ORDER BY 选修人数 ASC,
             course.`course_id` ASC; -- 第二排序条件
             
        #2 - 显示内连接
        SELECT 
            course.`course_id`,
            course.`NAME`,
            COUNT(t1_t2.`student_id`) 选修人数
        FROM course
        JOIN student_course_relation t1_t2 ON course.`course_id`=t1_t2.`course_id`
        GROUP BY course.`NAME`
        ORDER BY 选修人数 ASC,
             course.`course_id` ASC; -- 第二排序条件
    
    #练习3_2:查询课程选修人数>2的课程并按照选修人数升序排序
        SELECT 
            course.`course_id`,
            course.`NAME`,
            COUNT(t1_t2.`student_id`) 选修人数
        FROM course
        JOIN student_course_relation t1_t2 ON course.`course_id`=t1_t2.`course_id`
        GROUP BY course.`NAME`
        HAVING 选修人数 > 2 -- HAVING对group by分组查询后的值进行处理
        ORDER BY 选修人数 ASC,
             course.`course_id` ASC; -- 第二排序条件
             
             
    #练习4:查询选修“大学计算机基础”的学生信息
        SELECT 
            t1.*,
            t2.`NAME`
        FROM student t1
        JOIN student_course_relation t1_t2 ON t1.`student_id`=t1_t2.`student_id`
        JOIN course t2 ON t2.`course_id`=t1_t2.`course_id`
        WHERE t2.name = "大学计算机基础"
    
    

    若对你有帮助,请点个赞吧,谢谢支持!
    本文地址:https://www.jianshu.com/p/6420fe0008bb?v=1676339797057,转载请注明出处,谢谢。

    相关文章

      网友评论

        本文标题:MySQL语句练习

        本文链接:https://www.haomeiwen.com/subject/ftmjkdtx.html