-- 建表 插入数据
USE 你自己的数据库; CREATE TABLE Member(
MID Char(10) PRIMARY KEY,
MName Char(50)
); CREATE TABLE Course(
FID Char(10) PRIMARY KEY,
FName Char(50)
); CREATE TABLE Score1(
SID INT PRIMARY KEY,
FID Char(10) FOREIGN KEY REFERENCES Course(FID),
MID Char(10) FOREIGN KEY REFERENCES Member(MID),
Scores INT
); INSERT INTO Member VALUES
(
'', '张三'
),
(
'', '李四'
),
(
'', '王强'
),
(
'', '张珊'
) INSERT INTO Course VALUES
(
'', '语文'
),
(
'', '数学'
),
(
'', '英语'
),
(
'', '历史'
) INSERT INTO Score1 VALUES
(
101, '', '', 99
),
(
102, '', '', 70
),
(
103, '', '', 60
),
(
104, '', '', 80
),
(
201, '', '', 66
),
(
202, '', '', 76
),
(
203, '', '', 97
),
(
204, '', '', 84
),
(
301, '', '', 23
),
(
302, '', '', 43
),
(
303, '', '', 65
),
(
304, '', '', 86
),
(
401, '', '', 54
),
(
402, '', '', 87
),
(
403, '', '', 90
),
(
404, '', '', 31
)
-- 查询各个学生语文、数学、英语、历史课程成绩
-------------------------------------------
-- SELECT m.*, s.Scores FROM Member m
-- INNER JOIN Score s ON m.MID = s.MID
-- INNER JOIN Course c ON s.FID = c.FID
-- WHERE c.FID = (SELECT FID FROM Course
-- WHERE FName = '语文')
-- 先联表查出语文的成绩及相关内容
-- 在copy其他修改
--------------------------------------------
SELECT mb.MName AS 姓名, tempChinese.Scores AS 语文, tempMath.Scores AS 数学,
tempEnlish.Scores AS 英语, tempLong.Scores AS 历史
FROM Member mb
LEFT JOIN
(SELECT m.*, s.Scores FROM Member m
INNER JOIN Score s ON m.MID = s.MID
INNER JOIN Course c ON s.FID = c.FID
WHERE c.FID = (SELECT FID FROM Course
WHERE FName = '语文')) tempChinese
ON mb.MID = tempChinese.MID
LEFT JOIN
(SELECT m.*, s.Scores FROM Member m
INNER JOIN Score s ON m.MID = s.MID
INNER JOIN Course c ON s.FID = c.FID
WHERE c.FID = (SELECT FID FROM Course
WHERE FName = '数学')) tempMath
ON tempMath.MID = tempChinese.MID
LEFT JOIN
(SELECT m.*, s.Scores FROM Member m
INNER JOIN Score s ON m.MID = s.MID
INNER JOIN Course c ON s.FID = c.FID
WHERE c.FID = (SELECT FID FROM Course
WHERE FName = '英语')) tempEnlish
ON mb.MID = tempEnlish.MID
LEFT JOIN
(SELECT m.*, s.Scores FROM Member m
INNER JOIN Score s ON m.MID = s.MID
INNER JOIN Course c ON s.FID = c.FID
WHERE c.FID = (SELECT FID FROM Course
WHERE FName = '历史')) tempLong
ON mb.MID = tempLong.MID

-- 虽然多个子表连起来 也可以使用 但是太繁琐了
-- 通过姓名分组 max找最大值 利用case 就可以很方便了
SELECT m.MName as 姓名,
max(case c.FName when '语文' then s.Scores else 0 end) as 语文,
max(case c.FName when '数学' then s.Scores else 0 end) as 数学,
max(case c.FName when '英语' then s.Scores else 0 end) as 英语,
max(case c.FName when '历史' then s.Scores else 0 end) as 历史
From Score1 as s
INNER JOIN Member m ON m.MID=s.MID
inner join Course as c on c.FID=s.FID
GROUP BY m.MName

-- 利用存储过程 分数小于70
create PROCEDURE #scoreinit
@score int
AS
SELECT m.MName as 姓名,
max(case c.FName when '语文' then s.Scores else 0 end) as 语文,
max(case c.FName when '数学' then s.Scores else 0 end) as 数学,
max(case c.FName when '英语' then s.Scores else 0 end) as 英语,
max(case c.FName when '历史' then s.Scores else 0 end) as 历史
From Score1 as s
INNER JOIN Member m ON m.MID=s.MID
inner join Course as c on c.FID=s.FID
WHERE s.Scores < @score
GROUP BY m.MName
-- drop PROCEDURE #scoreinit EXEC #scoreinit @score=70

sqlserver 查询各个学生语文、数学、英语、历史课程成绩的更多相关文章

  1. sqlserver 行转列 语文,数学,物理,化学

    数据库查询行转列 1.原数据库值 stdname stdsubject result 张三 语文 张三 数学 张三 物理 李四 语文 李四 数学 李四 物理 李四 化学 李四 化学 2.要得到如下表 ...

  2. c#部分---输入班级人数,输入语文数学英语成绩,打印语文前两名,数学后两名,英语平均分

    1.开始收集输入项 2.用冒泡排序,统计语文成绩,并附带把语数英三门课全排列 3.数学成绩排序,附带把三门课全排序‘ 4.最后算英语的平均分:

  3. 学生各门课程成绩统计SQL语句大全

    学生成绩表(stuscore): 姓名:name 课程:subject 分数:score 学号:stuid 张三 数学 89 1 张三 语文 80 1 张三 英语 70 1 李四 数学 90 2 李四 ...

  4. Java中List集合排序的方法 比较器的使用 根据学生对象数学 语文 英语成绩总和进行sort排序

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...

  5. mysql练习题-查询同时参加计算机和英语考试的学生的信息-遁地龙卷风

    (-1)写在前面 文章参考http://blog.sina.com.cn/willcaty. 针对其中的一道练习题想出两种其他的答案,希望网友给出更多回答. (0) 基础数据 student表 +-- ...

  6. 一个班六个人,学号语文、数学、英语,接收成绩(不接受学号),输出学号成绩,总分、平均分,按总分排序(原生JS)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. sql查询每个学生的最高成绩mysql语句

    张三 语文 100 张三 数学 83 李四 语文 88 李四 数学 100 查询每个学生的最高成绩. select b.* from (select name,max(score) score fro ...

  8. SQLServer查询语句收集

    常用的SQLServer查询语句,有空可以多练习一下,增加记忆,可以提高工作效率! 1.数据操作 Select      --从数据库表中检索数据行和列Insert      --向数据库表添加新数据 ...

  9. Python连接SqlServer+GUI嵌入式——学生管理系统1.0

    学生管理系统1.0 1.建学生数据库 2.数据库嵌入高级语言(Python) 3.界面设计 简化思路: 1.先通过SqlServer2012建立学生数据库,包括账号.密码,姓名.选课等信息 2.运用P ...

随机推荐

  1. Java模板引擎之Freemarker 学习笔记 一

    什么是Freemarker Freemarker是模板引擎,不是Web框架,只是视图层的组件,官网是 https://freemarker.apache.org/ Freemarker原理 数据模型+ ...

  2. Python的安装部署

    Python的安装部署 参考:https://www.runoob.com/w3cnote/pycharm-windows-install.html 参考:https://jingyan.baidu. ...

  3. linux tar/ tar.gz文件解压

    1.tar 压缩 tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg tar -czf jpg.tar.gz *.jpg   //将目录里所有jpg文件打包成 ...

  4. vue组件传值 part2

    非父子组件传值 轻量级 视图层框架 复杂组件间传值,引进其他的工具或者设计模式 1.vuex 2.总线机制 //main line 1.在main.js中注册全局的bus Vue.prototype. ...

  5. Ubuntu16.04编译OpenCV3.4.7

    原文:https://www.bearoom.xyz/2019/08/20/ubuntu16-04-make-opencv3-4-7/ 一.前言 因为之前作死乱搞系统,然后就把Ubuntu的系统搞垮了 ...

  6. Ansible-大保健

    一.Ansible大纲 Ansible被红帽收购 1.什么是Ansible 2.Ansible特性\优点 3.Ansible基础架构 控制端\被控端\inventory\ad-hoc\playbook ...

  7. dotnet core 禁用https

    1,在  Properties\launchSettings.json 中的applicationUrl删除 https的选项  2,在Startup.cs中注释掉  app.UseHttpsRedi ...

  8. C语言 指针理解

    1.指针 指针全称是指针变量,其实质是C语言的一种变量.这种变量比较特殊,通常他的值会被赋值为某个变量的地址值(p = &a),然后我们可以使用 *p 这样的方式去间接访问p所指向的那个变量. ...

  9. ant design for vue 解决 vue.esm.js?c5de:628 [Vue warn]: Invalid prop: custom validator check failed for prop "defaultValue". 的错误

    错误重现: 在使用ant design for vue 的选择器插件的时候, 设置默认为为id(为数字) 报错: 解决办法: id为数字, 而defaultValue 的key 值必须为字符串, 将i ...

  10. Excel VBA发送Email时自动允许Outlook安全对话框

    在Outlook的宏安全性设置如果选择了“为所有宏提供通知” 并且,在[编程访问]中选择了“总是向我发出警告” 在其他VBA中创建邮件过程中,如果修改Recipients或者执行Send方法,都会弹出 ...