-- 建表 插入数据
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. lvm 逻辑卷分区删除恢复

    原因:执行 lvremove /dev/system/lv_trans 删除逻辑分区 恢复: 1.进入到lvm查看元数据 cd /etc/lvm/archive 2.恢复元vg卷组 vgcfgrest ...

  2. Bugku杂项(1—28)

    1.签到题 只要关注公众号就可以得到 flag---开胃菜 2.这是一张单纯的图片 用Winhex打开,会发现最下面有一行编码: key{you are right} 是一串HTML编码,解密下就行了 ...

  3. 关于 SQL Server 数据库批量备份与还原的一些 Tips

    一.前提 最近需要将服务器 A 上的数据库全部备份,并在服务器 B 上进行还原,30多个数据库一个一个地用鼠标点,先是 backup,之后时 restore……整个过程实在是太浪费时间了!于是直接写一 ...

  4. Tomcat server.xml常用配置 含有外带文件及默认host

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE server-xml [<!ENTITY ...

  5. HDU-4460 Friend Chains(BFS&权为1所有最短路的最大值)

    题目: For a group of people, there is an idea that everyone is equals to or less than 6 steps away fro ...

  6. [原]C++新标准之std::ratio

    原 总结 ratio  概览 类定义 预定义ratio 应用 示例代码 参考资料 概览 std::ratio定义在<ratio>文件中,提供了编译期的比例计算功能.为std::chrono ...

  7. Xpath编码问题解决

    使用Xpath获取属性时,出现乱码问题,解决办法找了好多,终于解决,特将办法贴在这,供大家尝试 不要直接简单的将爬取的网页设置为utf-8, 先通过print(r.encoding)输出看看爬取的是什 ...

  8. 关于mysql一边查一边更新

    update test_table set user_id = 112 where id in (select id from ( select id from test_table where nu ...

  9. Gson使用指南(一)

    注:此系列基于Gson 2.4. 一.Gson的基本用法 Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化.同时每个方法都提供了 ...

  10. C++ malloc()函数的注意点及使用示例

    1.malloc()函数的头文件是stdlib.h,其函数声明如下: void* malloc(size_t size); 其中参数size_t size表示动态内存分配空间的大小,以字节为单位. s ...