创建如下表格,命名为stu_info, course_i, score_table.

题目:

有如图所示的三张表结构,学生信息表(stu_info),课程信息表(course_i),分数信息表(score_table)

题目:

1.查询出每个学生所选修的课程的数量和所选修的课程的考试的平均分

2.查询出每门课程的选修的学生的个数和学生考试的总分

3.查询出性别一样并且年龄一样的学生的信息

4.查询出学分一样的课程信息

5.查询出参加了考试的学生的学号,姓名,课程号和分数

6.查询出参加了考试的学生的学号,课程号,课程名,课程学分和分数

7.查询出没有参加考试的学生的学号和姓名

8.查询出没有学生选修(即没有学生考试)的课程编号、课程名和学分

9.查询出姓名中有字母a的学生的信息

10.查询出选修了2门课程以上的并且考试平均分在70以上的学生的学号和考试平均分以及选修课程的数量

原创答案,仅作参考:

-- 1.查询出每个学生所选修的课程的数量和所选修的课程的考试的平均分
SELECT stu_info.stu_name,COUNT(course_i.course_id),AVG(score_table.score) FROM course_i
INNER JOIN score_table ON course_i.course_id=score_table.course_id
LEFT JOIN stu_info ON score_table.stu_id=stu_info.stu_id GROUP BY score_table.stu_id;
-- 2.查询出每门课程的选修的学生的个数和学生考试的总分
SELECT course_i.course_name,COUNT(score_table.stu_id),SUM(score_table.score)FROM course_i
right JOIN score_table ON course_i.course_id=score_table.course_id
LEFT JOIN stu_info ON score_table.stu_id=stu_info.stu_id GROUP BY course_i.course_id; -- 3.查询出性别一样并且年龄一样的学生的信息
SELECT s1.* FROM stu_info AS s1 LEFT JOIN stu_info AS s2
ON s1.stu_age=s2.stu_age and s1.stu_sex=s2.stu_sex
WHERE s1.stu_id!=s2.stu_id;
-- 4.查询出学分一样的课程信息
SELECT i1.* FROM course_i as i1 LEFT JOIN course_i as i2
ON i1.course_marks=i2.course_marks WHERE i1.course_id!=i2.course_id
GROUP BY i1.course_id;
-- 5.查询出参加了考试的学生的学号,姓名,课程号和分数
SELECT stu_info.stu_id,stu_info.stu_name,score_table.course_id,score_table.score
FROM stu_info LEFT JOIN score_table
ON stu_info.stu_id=score_table.stu_id;
-- 6.查询出参加了考试的学生的学号,课程号,课程名,课程学分和分数
SELECT stu_info.stu_id,stu_info.stu_name,score_table.course_id,
course_i.course_name,course_i.course_marks,score_table.score
FROM stu_info LEFT JOIN score_table
ON stu_info.stu_id=score_table.stu_id
LEFT JOIN course_i ON score_table.course_id=course_i.course_id;
-- 7.查询出没有参加考试的学生的学号和姓名
SELECT stu_id,stu_name FROM stu_info
WHERE stu_id not in (SELECT stu_id FROM score_table);
-- 8.查询出没有学生选修(即没有学生考试)的课程编号、课程名和学分
SELECT * FROM course_i WHERE course_id
NOT in (SELECT course_id FROM score_table);
-- 9.查询出姓名中有字母a的学生的信息
SELECT * FROM stu_info WHERE stu_name LIKE "%a%";
-- 10.查询出选修了2门课程以上的并且考试平均分在70以上的学生的学号和考试平均分以及选修课程的数量
SELECT score_table.stu_id,AVG(score_table.score),COUNT(score_table.course_id)
FROM score_table GROUP BY stu_id HAVING AVG(score_table.score)>70;

Mysql查询语句,select,inner/left/right join on,group by.....[例题及答案]的更多相关文章

  1. MySQL查询语句(select)详解(2)

    7.子查询 当进行查询的时候,需要的条件是另外一个select语句的结果,这时候就要用到子查询 用于子查询的主要关键字有:in,not in,=,!=,exists,not exists等. 以下两张 ...

  2. MySQL查询语句(select)详解(1)

    1.查询记录 select*from 表名 [where 条件];eg:select*from students;//查询 students 表中所有记录,所有字段的值都显示出来select fiel ...

  3. SQL复杂查询语句-SELECT * FROM cs WHERE score>70 GROUP BY s_id HAVING COUNT(*)>1

    如果同时存在where,group by,的时候的执行顺序应该是这样的: 1,首先where后面添加条件把数据进行了过滤,返回一个结果集 2,然后group by将上面返回的结果集进行分组,返回一个结 ...

  4. MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图

    http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...

  5. MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)

    在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:

  6. MYSQL查询语句大全集锦

    MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> C ...

  7. php面试专题---MYSQL查询语句优化

    php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...

  8. Mysql查询语句执行过程

    Mysql查询语句执行过程   Mysql分为server层和存储引擎两部分,或许可以再加一层连接层   连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注 ...

  9. mysql查询语句理解

    看一个查询语句 ,)) as passcount FROM (SELECT b.user,b.full_name,b.user_group From login_log a LEFT JOIN vic ...

  10. mysql查询语句,通过limit来限制查询的行数。

    mysql查询语句,通过limit来限制查询的行数. 例如: select name from usertb where age > 20 limit 0, 1; //限制从第一条开始,显示1条 ...

随机推荐

  1. kafka学习 之 Quickstart

    第一步:安装启动kafka 官网链接:https://www.apache.org/dyn/closer.cgi?path=/kafka/2.3.0/kafka_2.11-2.3.0.tgz 进入指定 ...

  2. [js进阶1]-数据类型

    基本数据类型 js 总的有7中数据类型,包括基本类型和引用类型 基本类型 6 种 number boolean string null undefiend symbol 前5种类型统称为原始类型 sy ...

  3. 装完B就跑,这几个Linux指令真的Diǎo

    本文介绍一些有趣的指令,实用或者可以装逼,不妨自己也来试试看: 文章目录 1 故事的开局 2 杰哥的表演 2.1 sl 2.2 htop 2.3 gcp 2.4 hollywood 2.5 cmatr ...

  4. Linux设备子系统初始化

    本文介绍的内容是基于Linux3.1源码,并参考了很多网上找来的资料 Linux内核的启动的流程如下: start_kernel->rest_init->kernel_init->d ...

  5. Linux安装tomcat并部署JavaWeb项目

    前提条件: 安装tomcat前请确认一下信息: 系统安装了JDK,且JDK版本应与javaWeb所使用的JDK一致,具体操作可参见Linux下安装JDK. 打包了javaWeb的.war 文件,具体操 ...

  6. es6中 var 和 let的区别

    区别1:var没有块级作用域,只有 函数级作用域 和 全局作用域:let有块级作用域 function fn() { { var a = 10; } console.log(a) //输出10 } f ...

  7. Centos最小安装

    网络配置 虚拟机安装使用的NAT模式 #enoXXX 为自己的网卡名称, 使用ip addr 可以查看 将/etc/sysconfig/network-scripts/ifcfg-enoXXX中的ON ...

  8. git切换账号

    有的时候我们有两个甚至多个git账号(公司的git账号和自己的github),为了不混淆提交,我们需要在提交之前查看自己的git账号必要时进行切换. 查看当前git用户名: git config us ...

  9. java 查询指定月份的工作日(不包括法定节假日)

    /** * 日期工具类 用于获取指定月份的工作日(除去周末和法定节假日) */ public class DateUtils { public static void main(String[] ar ...

  10. node的stream

    stream在Unix系统中是个标准的概念. In computer programming, standard streams are preconnected input and output c ...