单表查询及出现sql mode=only_full_group_by的解决方法(18题)

按要求完成题目:
course表:
mysql> CREATE TABLE course (
->
-> cs_id int(11) NOT NULL COMMENT ‘课程编号’,
->
-> cs_name varchar(50) NOT NULL COMMENT ‘课程名称’,
->
-> cs_credit tinyint(255) unsigned DEFAULT NULL COMMENT ‘课程学分’,
->
-> cs_type char(12) DEFAULT NULL COMMENT ‘课程类别’,
->
-> cs_depart char(6) DEFAULT NULL COMMENT ‘院系名称’,
->
-> PRIMARY KEY (cs_id)
->
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql> insert into course(cs_id,cs_name,cs_credit,cs_type,cs_depart)alues (5200313,‘数据库原理及应用’,4,‘核心专业’,‘信工’),(5203314,‘计算机导论’,4,‘通识教育’,‘信工’),(5219314,‘数据结构’,5,‘专业核心’,‘信工’),(5223013,‘大学物理’,4,‘专业基础’,‘信工’),(5227614,‘毕业实习’,4,‘集中实践’,‘信工’),(5230912,‘云计算’,2,‘共同选修’,‘信工’),(5236212,‘机器学习’,2,‘共同选修’,‘信工’),(5237514,‘c语言’,4,‘专业基’,‘信工’),(5245112,‘区块链’,2,‘任意选修’,‘信工’),(7200422,‘知识产权法’,2,'任意选修,‘文法’),(20201833,‘概率论’,3,‘专业基础’,‘基础’),(20202336,‘高等数学’,6,‘专业基础’基础’),(29299131,‘劳动教育’,1,‘集中实践’,‘学务’);

在这里插入图片描述
student表:
mysql> CREATE TABLE student (
->
-> stu_id bigint(11) unsigned NOT NULL COMMENT ‘学号’,
->
-> stu_name char(12) NOT NULL COMMENT ‘姓名’,
->
-> stu_sex enum(‘男’,‘女’) DEFAULT NULL COMMENT ‘性别’,
->
-> stu_age tinyint(255) unsigned DEFAULT NULL COMMENT ‘年龄’,
->
-> stu_major char(9) DEFAULT NULL COMMENT ‘专业’,
->
-> stu_college char(12) DEFAULT NULL COMMENT ‘学院’,
->
-> PRIMARY KEY (stu_id)
->
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql> insert into student(stu_id,stu_name,stu_sex,stu_age,stu_majorstu_college`) values (201804550101,‘郭奎’,‘男’,22,‘计科’,‘信工学院’),(20180455010’吕宇航’,‘男’,18,‘计科’,‘信工学院’),(201804550103,‘张豪辉’,‘女’,19,‘计科’,‘信工学’),(201804550107,‘丁志杰’,‘男’,17,‘金融学’,‘金贸学院’),(201804550109,‘范伟’,‘男’,‘金融学’,‘金贸学院’),(201804550116,‘张依婷’,‘女’,17,‘大数据’,‘信工学院’),(2018040120,‘张维’,‘男’,19,‘计科’,‘信工学院’),(201804550121,‘朱柳阳’,‘女’,20,‘计科’,‘信工学院’),(201804550144,‘谭兵炎’,‘男’,20,‘大数据’,‘信工学院’),(201804550153,‘杨志强’男’,17,‘大数据’,‘信工学院’);

在这里插入图片描述

  1. 查询全部课程的信息。
    在这里插入图片描述

  2. 查询信工学院开设的课程名、课程号及学分。
    在这里插入图片描述

  3. 查询学分超过3学分的课程代码、课程名和开课单位。
    在这里插入图片描述

  4. 查询计科专业和大数据专业的学生信息。
    在这里插入图片描述

  5. 查询不是信工学院的学生姓名和学号。
    在这里插入图片描述

  6. 查询年龄是17,18,19的学生姓名和专业。
    在这里插入图片描述

  7. 查询学分在2到4之间课程的信息。
    在这里插入图片描述

  8. 查询课程名称中带“数据”的课程名、课程号及开课单位。
    在这里插入图片描述

  9. 查询信工学院的的专业有哪些。
    在这里插入图片描述

  10. 查询年龄为空的学生信息。
    在这里插入图片描述

  11. 查询不是信工学院开设的集中实践课的开课单位和课程名称。
    在这里插入图片描述

  12. 查询信工学院开设的课程的类型有哪些。
    在这里插入图片描述

  13. 查询学生所在的专业个数。
    在这里插入图片描述
    count()在MySQL从四种写法:
    (1)count(*) 包括所有列,相当于统计表的行数,不忽略列值为NULL的记录。
    (2)count(1) 忽略所有列,1表示一个固定值,也可以用count(任意整数)代替,不忽略列值为NULL的记录。
    (3)count(列名) 只包括指定列,返回指定列的记录数,会忽略列值为NULL的记录。
    (4)count(distinct 列名) 只包括列名指定列,返回指定列的不同值的记录数,忽略列值为NULL的记录

  14. 查询信工学院开设的课程的平均学分。
    在这里插入图片描述

  15. 查询学生的信息,查询结果按姓名升序排序。 (默认升序,升序asc,降序desc)
    在这里插入图片描述

  16. 查询每个专业的学生的最大年龄、最小年龄和平均年龄,查询结果按平均年龄降序排列。
    在这里插入图片描述

  17. 查询每个开课单位开设的课程门数的,查询结果按课程门数升序排列。
    在这里插入图片描述
    因为course表中开课单位和课程一一对应(数量一样),所以直接查询开课单位出现次数就好。

  18. 查询单位开课门数少于2门的开课单位和课程名称。
    在这里插入图片描述
    开始出现以上问题,是由于 MySQL (5.7.5之后实现了对功能依赖的检测)配置中 sql_mode 配置了 only_full_group_by,需要 group by 中包含所有 在 select 中出现的字段。
    解决方法:
    [root@localhost etc]# vim /etc/my.cnf
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    之后重启mysqld服务,重新登陆MySQL执行就好。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43928088/article/details/107435548