请登录
四川成人和教育管理有限公司 - 笔记串讲 - 工学类 - 4735数据库系统原理 - 浏览文章

自考4735数据库系统原理考试复习资料5

2016/5/30 17:22:410人浏览0评论


4.SELECT语句完整的句法

    SELECT  <目标表的列名或列表达式序列>

    FROM  <基本表名和(或)视图序列>

    [WHERE  <行条件表达式>]

    [GROUP  BY  <列名序列>

       [HAVING  <组条件表达式>]]

    [ORDER  BY  <列名[ASC | DESC]>,…]

    说明:[]表示其中的内容根据需要可以省略。

           |表示二选一。

          各子句的作用:SELECT子句用于指定输出的内容;FROM子句用于指定要检索的数据的来源表;WHERE子句称为“行条件子句”,用于指定对元组的选取条件;GROUP  BY子句称为“分组子句”,作用是指定对元组进行分类后再检索;HAVING子句称为“组条件子句”,用于指定对分类后的元组的选取条件;ORDER  BY子句称为“排序子句”,作用是对检索到的元组进行排序。

整个语句的执行过程为:

    1)读取FROM子句中基本表、视图的数据,执行笛卡儿积操作。

    2)选取满足WHERE子句中给出的条件表达式的元组。

    3)按GROUP子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组。

    4)按SELECT子句中给出的列名或列表达式求值输出。

    5)ORDER子句对输出的目标表进行排序,按附加说明ASC升序排列,或按DESC降序排列。

例1:统计每门课程的学生选修人数。

    SELECT  COUNT(S#)

    FROM  SC

    GROUP BY  C#

例2:统计每门课程的学生选修人数,要求只查询出选修人数超过50人的结果。

    SELECT  COUNT(S#)

    FROM  SC

    GROUP BY  C#

    HAVING  COUNT(S#)>50

例3:检索每名学生的学号和年龄,查询结果按年龄降序排列,年龄相同按学号升序排列。

    SELECT  S#,AGE>

    FROM  S

    ORDER  BY  AGE  DESC,S#  ASC

5.SELECT子句的具体规定

    SELECT  [ALL | DISTINCT] 〈列名或列表达式序列>|*

    说明:1)DISTINCT选项保证重复的行将从结构中去除;而ALL选项是默认的,将保证重复的行留在结果中,一般可不必写出。

           2)*是对于在FROM子句中命名表的所有列的简写。

           3)列表达式中允许出现+、-、*、/等运算符以及列名和常数、聚合函数等。

    例1:检索男同学选修的课程的课程号。

       SELECT  DISTINCT  C#

       FROM  S,SC

       WHERE  S.S#=SC.S#  AND  SEX=’男’

    例2:检索所有的学生信息。

       SELECT *

       FROM  S

    例3:检索每个学生的学号和出生年份。

       SELECT  S#,2008-AGE

       FROM  S

6.列和基本表的改名操作

       有时,一个基本表在SELECT语句中多次出现,即这个表被多次调用,为区别不同的引用,应给每次的引用加上不同的名字。当然,除此情况之外,也可以给任何一个表起别名。但要注意:一旦给表起了别名,在该语句中,凡是引用该表名时,必须用别名而不能用原表名。

       有时,用户也可以要求输出的列名与基本表中列名不一致,可在SELECT子句用“旧名  AS  新名”形式改名。其中AS可以省略。

例:检索每个学生的姓名和出生年份,输出的列名分别为STUDENT_NAMEBIRTH_YEAR

       SELECT  S#  AS  STUDENT_NAME,2008-AGE  AS  BIRTH_YEAR

    FROM  S

7.条件表达式中的比较操作

1)算术比较操作:常用运算符有〈、〈=、〉、〉==<>!=

[NOT]  BETWEEN…AND用来查找(不)在给定范围内的数据,下限在前,上限在后,包括上、下限。

例:检索18—20岁的学生姓名。

       SELECT  SNAME

       FROM  S

       WHERE  AGE=18  AND  AGE=20

或:

       SELECT  SNAME

       FROM  S

       WHERE  AGE  BETWEEN  18  AND  20

2)字符串的匹配操作

语法:<字符串>  [NOT]  LIKE  <匹配模式>

说明:匹配模式中常使用两个通配符:

       %:与零个或多个字符组成的字符串匹配。

       _:与单个字符匹配。

例:检索姓名以字符D打头的学生姓名。

       SELECT  SNAME

       FROM  S

       WHERE  SNAME  LIKE  D%

转义字符:为使字符串中包含特殊字符(即%_),允许定义转义字符。转义字符紧靠特殊字符并放在它前面,表示该特殊字符被当成普通字符。使用ESCAPE定义转义字符。

例:LIKE  ab\%cd%’  ESCAPE  ‘\’  匹配所有以ab%cd开头的字符串。

LIKE  ab\\cd%’  ESCAPE  ‘\’  匹配所有以ab\cd开头的字符串。

3)空值的比较操作

使用IS  [NOT]  NULL来比较。

例:检索年龄为空值的学生姓名。

       SELECT  SNAME

       FROM  S

       WHERE  AGE  IS  NULL

4)集合成员资格的比较

语法:[NOT]  IN  <集合>

1:检索年龄分别是182021岁的学生姓名。

       SELECT  SNAME

       FROM  S

       WHERE  AGE  IN182021

2:检索男同学选修课程的课程号。

       SELECT  DISTINCT  C#

       FROM  SC

       WHERE  S#  INSELECT  S#  FROM  S  WHERE  SEX=‘男’)

5)集合成员的算术比较

语法:元组  θ  ALL|SOME|ANY(〈集合〉)

说明:ALL表示左边那个元组与右边集合中每一个元组满足θ运算;

ANYSOME含义相同,表示左边那个元组与右边集合中至少一个元组满足θ运算。

1:检索学习C2课程的学生学号和姓名。

       SELECT  S#SNAME 

       FROM  S

       WHERE  S#  =  SOMESELECT  S#

       FROM  SC

       WHERE  C#=C2

2:检索不学C2课程的学生姓名与年龄。

       SELECT  SNAMEAGE

       FROM  S

       WHERE  S#〈〉ALLSELECT  S#

       FROM  SC

       WHERE  C#=C2

6)集合空否的测试

使用[NOT]EXISTS。见前面例子。

关键字:
网友评论