zoukankan      html  css  js  c++  java
  • 【笔试必备】常见sql笔试题

    最新原文:https://www.cnblogs.com/uncleyong/p/14758383.html

    sql是测试从业者必备的技能之一,基本上也是笔试必考内容。

    金三银四已过,部分微信好友反馈,sql拖了后腿,一遇到多表关联查询就犯晕,甚至连单表的执行顺序都没搞懂,下面简单介绍下,顺便给一些题供大家练习。

    单表执行顺序

    select distinct 字段1,...,字段n from 库.表
    where 条件
    group by 分组字段
    having 过滤
    order by 排序字段
    limit n;

    执行顺序

    from
    where
    group by
    having
    select
    distinct
    order by
    limit
    

    多表关联

    几个概念:

    交叉连接:无任何匹配条件,生成笛卡尔积

    内连接:共同部分

    左连接:在内连接的基础上保留左表的记录

    右连接:在内连接的基础上保留右表的记录

    全外连接:在内连接的基础上保留左右两表没有对应关系的记录

    表结构

    创建表

    班级表

    DROP TABLE IF EXISTS `class`;
    CREATE TABLE `class` (
    `cid` int(11) NOT NULL AUTO_INCREMENT,
    `caption` varchar(255) NOT NULL,
    `grade_id` int(11) NOT NULL,
    PRIMARY KEY (`cid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

    年级表

    DROP TABLE IF EXISTS `class_grade`;
    CREATE TABLE `class_grade` (
    `gid` int(11) NOT NULL AUTO_INCREMENT,
    `gname` varchar(255) NOT NULL,
    PRIMARY KEY (`gid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

    课程表

    DROP TABLE IF EXISTS `course`;
    CREATE TABLE `course` (
    `cid` int(11) NOT NULL,
    `cname` varchar(255) NOT NULL,
    `teacher_id` int(11) NOT NULL,
    PRIMARY KEY (`cid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    成绩表

    DROP TABLE IF EXISTS `score`;
    CREATE TABLE `score` (
    `sid` int(11) NOT NULL AUTO_INCREMENT,
    `student_id` int(11) NOT NULL,
    `course_id` int(11) NOT NULL,
    `score` varchar(255) DEFAULT NULL,
    PRIMARY KEY (`sid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

    学生表

    DROP TABLE IF EXISTS `student`;
    CREATE TABLE `student` (
    `sid` int(11) NOT NULL AUTO_INCREMENT,
    `sname` varchar(255) NOT NULL,
    `gender` enum('女','男') NOT NULL DEFAULT '男',
    `class_id` int(11) NOT NULL,
    PRIMARY KEY (`sid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

    老师表

    DROP TABLE IF EXISTS `teacher`;
    CREATE TABLE `teacher` (
    `tid` int(11) NOT NULL,
    `tname` varchar(255) DEFAULT NULL,
    PRIMARY KEY (`tid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    班级任职表

    DROP TABLE IF EXISTS `teacher2cls`;
    CREATE TABLE `teacher2cls` (
    `tcid` int(11) NOT NULL AUTO_INCREMENT,
    `tid` int(11) NOT NULL,
    `cid` int(11) NOT NULL,
    PRIMARY KEY (`tcid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; 

    关于表数据,建议自己造,加深对表结构的理解。

    常见笔试题

    01、查询同时选修了物理课和生物课的学生id和姓名
    
    
    02、查询“2”课程分数小于60,按分数降序排列的同学学号
    
    
    03、查询有两门及以上课程超过60分的学生id及其平均成绩
    
    
    04、查询没有带过任何班级的老师id和姓名
    
    
    05、查询没有学生选修的课程的课程号和课程名
    
    
    06、查询至少选修两门课程的学生学号
    
    
    07、查询各个课程及相应的选修人数
    
    
    08、查询课程编号为“2”且课程成绩在80分以上的学生的学号和姓名
    
    
    09、查询课程名称为“生物”,且分数低于60的学生姓名和分数
    
    
    10、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
    
    
    11、查询同名同姓学生名单,并统计同名人数
    
    
    12、查询男生、女生的人数,按倒序排列;
    
    
    13、查询选修了2门以上课程的全部学生的学号和姓名
    
    
    14、查询每门课程被选修的学生数
    
    
    15、查询至少学过学号为“1”同学所选课程中任意一门课的其他同学学号和姓名
    
    
    16、查询没有学全所有课的同学的学号、姓名
    
    
    17、查询有课程成绩小于60分的同学的学号、姓名
    
    
    18、查询所带班级数最多的老师id和姓名
    
    
    19、查询课程编号“2”的成绩比课程编号“1”课程低的所有同学的学号、姓名
    
    
    20、查询带过超过2个班级的老师的id和姓名
    
    
    21、查询没有带过高年级的老师id和姓名
    
    
    22、查询学过编号‘1’课程和编号‘2’课程的同学的学号、姓名
    
    
    23、查询教授课程超过2门的老师的id和姓名
    
    
    24、查询学过‘张老师’老师2门课以上的同学的学号、姓名
    
    
    25、查询班级信息,包括班级id、班级名称、年级、年级级别(12为低年级,34为中年级,56位高年级)
    
    
    26、查询班级数小于5的年级id和年级名
    
    
    27、查询每位学生的学号,姓名,选课数,平均成绩
    
    
    28、查询每个年级的学生人数
    
    
    29、查询每个年级的班级数,取出班级数最多的前三个年级
    
    
    30、查询“生物”课程和“物理”课程成绩都及格的学生id和姓名
    

    补充:查询成绩表里不同课程的成绩倒数5名

    参考答案

    01:

    select s.sid,s.sname from student s
    where s.sid in(
    	select s.student_id from score s
    	join course c on c.cid = s.course_id
    	where c.cname in ('体育','生物')
    	group by s.student_id
    	having count(s.student_id)=2
    );
    

    ...

    最好先自己做一遍,如需要参考答案,请联系作者。

    更多练习:https://www.cnblogs.com/uncleyong/p/14757684.html

    最新原文:https://www.cnblogs.com/uncleyong/p/14758383.html

    ============================= 好好学习 ==========================
    > > > 1、咨询问题,请加作者微信: ren168632201
    > > > 2、性能测试从0到实战: https://www.cnblogs.com/uncleyong/p/12311432.html
    > > > 3、自动化测试实战: https://www.cnblogs.com/uncleyong/p/12016690.html
    > > > 4、测试基础汇总: https://www.cnblogs.com/uncleyong/p/10530261.html
    > > > 5、声明:如有侵权,请联系删除。
    ============================= 升职加薪 ==========================
  • 相关阅读:
    JNDI
    在Tomcat上发布JNDI资源
    使用数据库连接池配置数据源
    JDBC连接数据库
    数据库中的一些概念
    线程池和数据库连接池
    springmvc学习指南 之---第25篇 Spring Bean有三种配置方式
    springmvc学习指南 之---第24篇 国际化问题
    深入刨析tomcat 之---第23篇 聊一下web容器的filter配置和defaultservet
    又一本springmvc学习指南 之---第22篇 springmvc 加载.xml文件的bean标签的过程
  • 原文地址:https://www.cnblogs.com/uncleyong/p/14758383.html
Copyright © 2011-2022 走看看