发新话题
打印

[技巧] 5个SQL查询比较强悍语句

5个SQL查询比较强悍语句

查看数: 136 回复数: 4 最新回复

与好友共享:

内容简介:点击关闭

首先要鸣谢 gdicebird 为我讲解左外连接、右外连接、内连接诸多连接和Group BY的意思,虽说一时半会并不能茅塞顿开, 但我自己会加把劲把他捅开.
  Question 1. 假如说有四个表,分别是学生表、成绩表、课程表、教师表, 具体结构如下:Copy语言代码 ...
首先要鸣谢 gdicebird 为我讲解左外连接、右外连接、内连接诸多连接和Group BY的意思,虽说一时半会并不能茅塞顿开, 但我自己会加把劲把他捅开.

什么是左外连接呢?

Question 1. 假如说有四个表,分别是学生表、成绩表、课程表、教师表, 具体结构如下:
Copy
语言代码:
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表

现在要求出 学生学号 姓名 选课数 总成绩
Copy
语言代码:
SELECT a.S#,a.Sname,COUNT(b.C#) AS Courses,SUM(b.score) AS Scores
FROM Student AS a
     LEFT OUTER JOIN SC  
AS b
     ON Student
.S# = SC.S#
     
GROUP BY a.S#,Sname

分析一下这条语句
Copy
语言代码:
select a.S#,a.Sname,count(b.C#) as Courses, sum(b.score) as Scores

这句话的意思就是要得出一个学生学号 姓名 选课数 总成绩的结果集. as在这里可以用 "="来代替,也就是把count(b.c#)赋给Course, sum(b.score)赋给Scores

重头戏来了  

LEFT OUTER JOIN 左外连接(意思就是把左边表与右边的行相同值都显示,另外左边表的值都会显示)
不管是否与 SC表的 S# 列相匹配,LEFT  OUTER JOIN 都会在结果中包括 Student 表的所有行。请注意,对于结果中没有匹配的产品审核 ID 的产品,行的 SC.S# 列中则包含一个空值。



Question 2.  查询姓“李”的老师的个数
Copy
语言代码:
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
Select Count(DISTINCT(Tname)) FROM Teacher Where Tname LIKE "李%";

其实这里我一直都不明白DISTINCT为什么要用在这里


DISTINCT

对指定的集求值,删除该集中的重复元组,然后返回结果集。

其实我觉得这里不应该删除重复的值,一个大学校应该会有重名的老师

Question 3  查询“001”课程比“002”课程成绩高的所有学生的学号

Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表

这个问题我之前也是想了很久,我在想应该怎么查,后来看了别人写的,这里用得是子查询. 我才知道
应该先一步步查,然后再联合. 不过这只是对我像这样的Newbie来说.

下面就用我的想法来写

First           查询出001课程成绩的学生和成绩  SELECT S#,score FROM SC WHERE C# = '001'
Second     查询出002课程成绩的学生和成绩  SELECT S#,score FROM SC WHERE C# = '002'
Next             根据1和的查询来比较查询001高于002成绩的学生学号
Copy
语言代码:
SELECT a.S# FROM (SELECT S#,score FROM SC WHERE C# ='001') AS a, (SELECT         S#,score FROM SC WHERE C# = '002') AS b 
                    
WHERE ascore>b.score  and a.S# = b.S#

Question 4 查询没学过“叶平”老师课的同学的学号、姓名;
Copy
语言代码:
SELECT S#,Sname 
FROM Student WHERE S# not in (SELECT DISTINCT(SC.S#) FROM SC,Course,Teacher 
     
WHERE SC.C# = Course.C# and Teacher.T# = Course.T#  and Teacher Tname = '叶平');

-- 分析一下
Copy
语言代码:
SELECT DISTINCT (SC.S#) FROM SC,Course,Teacher WHERE SC.C# = Course.C#and Teacher.T# = Course.T# and Teacher Tname = '叶平'; //这个语句用到了where连接查询.主要是得出学过叶平老师课程学生的学号.

SELECT S#,Sname FROM Student //查询Student表中的学生学号与姓名

not in 关键字则表示不在某个集中


Question 5 查询平均成绩大于60分的同学的学号和平均成绩;
Copy
语言代码:
SELECT S#,AVG(score) as 'AverageCore'
FROM SC
GROUP BY S
# HAVING AVG(SCORE) > 60

今天就整了这几条语句.感觉不怎么样。
你现在是游客:请登录或者注册

搜索更多相关主题的帖子: SQL 语句 查询

Rojo google reader netvibes 哪吒 抓虾 my yahoo Feedsky FEED 订阅
作者: digooe 主题: php对特殊语句查询结果进行数组排序 时间: 2008-3-17 15:22
作者: dindin 主题: Java数据库编程中查询结果的表格式输出 时间: 2008-3-17 15:42
作者: dindin 主题: 完美解决SQL查询产生的乱码问题. 时间: 2008-3-19 20:24
作者: Yuan 主题: 为什么每次数据查询后只能显示一次结果 时间: 2008-4-3 17:40
作者: fenanr 主题: SQL Query Caching(SQL查询缓存) 时间: 2008-4-3 17:40

TOP

最新网站秀: (还等什么?马上加入我们吧! 快速加入

 华中师范大  盱眙吧1  南邮风云   夜族网游公  在日中华情  生活大家坛  智商250  塞班智能手  论剑社区  潮州论坛  灵下异度  封开家园 
用户正在观看: 热门标签
美女人体艺术绝
杀破狼
樱之炫视频教程——五
雨儿短裙热舞
情圣【国语中字】DV
作品源自网络,请支持正版


澄海3C 牛大力组合


澄海3C 牛大力组合


澄海3C 诗诗VS缺


澄海3C 诗诗VS缺
跟我一起相处五年的男友就因为一个软件,和我分手了。我从来没想过我们之间的结局会因为一个软件而终结,但事情就是这样真真实实的发生了。

我跟男友认识五年了,他长相很一般,家里也没什么钱。大学我们就认识了,还相处过一年的时间,我的第一次也献给了他,当时还 限制字节输出

TOP

       38岁的我,老家是山东的,出生在新疆,大学毕业后,我有幸考上了公务员,分配在**乡政府工作,那年我才23岁。出生在穷困家庭的我,真正成为了一只“从农村里飞出的金凤凰”。家人、亲戚、朋友都以我为豪。
      我也十分珍惜这来之不易的一切,平时 限制字节输出

TOP

发新话题