SQL 易忘知识点整理
---恢复内容开始---
1、两级排序的组内格式
select s#,AVG(score) 平均成绩 from sc group by s# order by AVG(score) asc,S# desc
平均成绩升序排列,平均成绩相同按课程号降序排列
2、对组进行筛选时having 不是having by
3、实现对字符的筛选:
1 sname like '李%' /*表示以李开头的任意一个名字*/ 2 sname like '李_' /*表示以李开头的两个字名字*/ 3 4 /*注意不是 is like,而是like*/
4、实现相关子查询的条件:自查询中出现父查询中的表,且和父查询之间设立了查询条件(此时,子查询结果是一个值,而不是一组值)
例子:
1 /*6*/ 2 select student.s#,Student.Sname 3 from student,SC 4 where sc.C#=01 and student.S#=sc.S# and
exists(select * from sc sc_2 where sc.c#=sc_2.c# and sc_2.c#=02) /*表示并且,用exists*/
5、即使两表建立了连接,但是各自是不会发生变化的。比如说T1有列a、b、c,T2有列c、d、e,查询T1.d是查不到的。
6、如果两个表进行连接,那么在进行查询时,对于聚集函数内部的列可以不用前缀名,即代表对连接后的表中的某一列进行聚集运算
/*10*/ select student.s#,student.sname,COUNT(C#) from Student,SC where student.S#=sc.S# group by student.S#,student.sname having COUNT(C#)<=COUNT(course.c#)
7、如果属性名在参加连接的各表中是唯一的,则可以省略表名前缀
8、等值连接不会自动消除重复列
9、“查询所学课程和学号为‘001‘的学生所有课程相同的学生的学号和姓名’’”:课程相同=数量相同,课程是包含关系
10、按照平均成绩从高到低显示所有学生的“数据库”,“企业管理”两门课程的成绩,其中数据库的c#为01,企业管理的c#为02,按如下形式显示:学生id,数据库,企业管理,有效课程数,有效平均成绩
11、实现标量子查询的方式
在父查询中有表1 子查询中有表2,在子查询中通过设立表1.列1=表2.列2 来实现,这样可确保每次传进子查询的元组数量为1
12、及格率的表示
(100*sum(case when score>60 then 1 else 0)) / count(c#)