SQL经典语法



         最近看软考视频关于数据库的部分,其中主要涵括了数据库模型(概念模式、外模式、内模式)、数据模型、ER图、数据库三范式等等,这些在数据库系统原理中都有学到,算是对知识的巩固了吧,这里就不一一总结了,今天着重总结一下SQL语句的几种不常用(站在我自己目前的编程经历来讲)但又确实很实用的语法。

 

1,消除取值重复的行 DISTINCT

 

       有时候在数据库中查询数据,两条本来并不完全相同的记录,按照某个查询条件返回的结果可能变成相同的行。

 

eg:

      SC的部分记录如下图,现在要查询选修了课程的学生学号

SELECT Sno

FROM SC

该查询结果包含两条重复的记录01,此时要去掉重复的记录,则必须指定DISTINCT

SELECT DISTINCT Sno

FROM SC

SQL经典语法_第1张图片

 

2,确定集合 IN

 

        IN可以用来查找属性值属于指定集合的记录;相反,NOTIN用来查找属性值不属于指定集合的记录

 

eg:

查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别

SELECT Sname,Ssex

FROM Student

WHERE Sdept IN (IS,MA,CS)

    WHERE Sdept NOT IN (IS,MA,CS)  //既不属于IS,也不属于MACS

 

3,涉及空值的查询 IS

 

        在我们写程序的时候,经常会遇到值为空的情况,例如时间,因为类型不一致这时用“=”就会报错,现在可以简单解决了。

 

eg:

查询缺考的同学的学生的学号和相应课程号

SELECT Sno, Cno

FROM SC

WHERE Grade is NULL

 

4,使用集函数

 

      为方便用户使用,增强检索功能,SQL提供了以下集函数

COUNT( DISTINCT | ALL | * )  统计记录数

COUNT( DISTINCT | ALL (列名)) 统计一列中值的个数

SUMAVGMAXMIN等使用方法同上。

 

eg:

查询学生总人数

SELECT COUNT(*)

FROM Student;

在机房收费系统中的上机人数再也不用通过返回datatable的行的count值来得到了。

 

查询课程编号为1的平均成绩

SELECT AVG(Grade)

FROM SC

WHERE Cno=1

  

5,对查询组结果的限制 HAVING

 

HAVING是对一组记录的限制,必须用在GROUP BY分组之后

WHERE是对一条记录的限制

 

eg:

查询已经选修了3门以上课程的学生学号

SELECT Sno

FROM SC

GROUP BY Sno

HAVING COUNT(*) >3

 

        随着编程经验的积累和编程难度系数的增加,慢慢的我们会被要求多个语法穿插使用,但是想要走得远、爬的高,前提是打好基础!



你可能感兴趣的:(SQL经典语法)