时间:2021-04-07来源:www.pcxitongcheng.com作者:电脑系统城
例3.48 查询平均成绩大于等于80分的学生学号和平均成绩
1 2 3 4 5 |
SELECT Sno, AVG (Grade) FROM SC WHERE AVG (Grade)>=80 GROUP BY Sno; SELECT * FROM SC; |
此时发现:
这是因为WHERE子句中是不能用聚集函数作为条件表达式的,正确的查询语句应该是:
1 2 3 4 5 |
SELECT Sno, AVG (Grade) FROM SC GROUP BY Sno HAVING AVG (Grade)>=80; SELECT * FROM SC; |
总结:WHERE子句作用基本表或视图,从中选择满足条件的元组。
HAVING短语作用于组,从中选择满足条件的组
连接符号是=的成为等值连接,其他的称为非等值连接
一般形式:
[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>
例3.49 查询每个学生及其课程选秀修情况
1 2 3 4 5 |
SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno=SC.Sno; SELECT * FROM SC; SELECT * FROM Student; |
拓展:去掉WHERE Student.Sno=SC.Sno
后发现标称笛卡尔积形式
1 2 3 4 5 |
SELECT Student.*,SC.* FROM Student,SC SELECT * FROM SC; SELECT * FROM Student; |
例3.50 对例3.49 用自然连接完成
1 2 3 4 5 |
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno=SC.Sno; SELECT * FROM SC; SELECT * FROM Student; |
修改为自然连接竟然是一点一点选择可视的列来进行的,是我想不到的,以为会有专门的语句来进行呢
例3.51 查询选修了2号课程且成绩大于等于90分所有学生的学号和姓名
1 2 3 4 5 6 7 |
SELECT Student.Sno,Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno= '2' AND SC.Grade>=90; SELECT * FROM SC; SELECT * FROM Student; |
一条SQL语句可以同时完成选择和连接查询,这时WHERE子句由连接谓词和选择谓词组成的复合条件
一个表与其自身进行连接,称为自身连接
例3.52 查询每一门课的间接选修课
1 2 3 4 |
SELECT FIRST .Cno, SECOND .Cpno FROM Course FIRST ,Course SECOND WHERE FIRST .Cpno= SECOND .Cno; SELECT * FROM Course; |
在T-SQL 语句中,外连接是存在空值的,
例如某个学生没有选课,仍把Student的悬浮元组保存在结果关系中,而在SC表的属性上填上空值NULL,这是需要使用外连接
例3.53 对Student进行左外连接SC
1 2 3 4 5 |
SELECT * FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno); --SELECT * FROM Course; SELECT * FROM SC; SELECT * FROM Student; |
两个表以上的操作称为外连接
例3.54 查询每个学生的学号、姓名、选修的课程及成绩
1 2 3 4 5 6 |
SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno; SELECT * FROM Course; SELECT * FROM SC; SELECT * FROM Student; |
拓展:对SELECT进行*改写
1 2 3 |
SELECT * FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno; |
原算法只是对数据进行了一步筛选。
总结:连接查询这部分比较简单,注意对属性的表格定位名时,不要打错了
2023-03-15
SQLserver存储过程写法与设置定时执行存储过程方法详解2023-03-11
sql语句将数据库一条数据通过分隔符切割成多列方法实例2023-03-06
MySQL中的常用树形结构设计总结最详细的 SQLSERVER ALWAYSON配置教程 一、准备工作: 二、搭建故障转移群集 三、搭建数据库AlwaysOn 四、过程中可能遇到的问题...
2023-03-06
2.1破解的时候,先要断网,然后再操作,按如图打开界面,点击Manage License 2.2点击Activate 2.3打开SQL.Prompt.Keygen.exe,将生成的注册码拷贝到输入框内,然后点击Activate 2.4 继续点击Activate manually 2.5 按如下步骤操...
2023-03-06