-- 建表 插入数据
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. blueimp,预览遮罩范围控制

    blueimg gallery github地址:https://github.com/blueimp/Gallery/blob/master/README.md 使用前提,引用css和js < ...

  2. 新浪sae url rewrite(伪静态、重定向)详解

    新浪sae url rewrite(伪静态.重定向)详解 http://www.veryhuo.com phpclubs 2011-11-14 投递稿件 sae全程Sina App Engine,真是 ...

  3. 【每日Scrum】第二天冲刺

    一.计划会议内容 确定细化了每日任务 二.任务看板 三.scrum讨论照片 四.产品的状态 无 五.任务燃尽图  

  4. Vue.js——6.创建组件

    Vue组件组件就是为了拆分Vue实例的代码量,能够不同的功能定义不同的组件创建组件的方法 1. // 创建组件 let com1=Vue.extend({ template:'<h1>he ...

  5. 关于python请求库Selenium安装所遇到的问题

    今天,初次接触python,在网上买了一本关于爬虫的书,因为之前电脑上存在python,所以就对着书直接进行的请求库的安装,安装的时候,主要遇到了下边一个问题,在安装Selenium的时候,出现以下提 ...

  6. LINUX之ntp时间同步服务配置

    本篇将介绍LINUX之ntp服务配置,时钟同步服务器配置.这个在很多地方都会用到,保持各主机之前的时间保持一致,保证主机之间的心跳稳定. 三台主机都是centos7 192.168.1.110 mas ...

  7. MyBatis从入门到精通(第2章):MyBatis XML方式的基本用法【insert用法、update用法、delete用法】

    2.4  insert 用法 2.4.1  简单的 insert方法 在接口 UserMapper.java 中添加如下方法. /** * 新增用户 * @param sysUser * @retur ...

  8. java截取字符串并拼接

    一.substirng public static void main(String[] args) { String sendContent = "请查收:www.baidu.com&qu ...

  9. drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用

    三大认证工作原理简介 认证.权限.频率 源码分析: from rest_framework.views import APIView 源码分析入口: 内部的三大认证方法封装: 三大组件的原理分析: 权 ...

  10. 实践一次有趣的sql优化

    课程表 #课程表 create table Course( c_id int PRIMARY KEY, name varchar(10) ) 增加 100 条数据 #增加课程表100条数据 DROP ...