5—单元5 数据查询与维护

2019-08-30 18:07

单元五 数据查询与维护

数据库管理系统DBMS具有数据定义、数据操纵、数据库维护、数据库管理四项功能。这四项功能也是数据库维护管理人员与设计人员的基本工作职责。前面的单元已经介绍了数据定义、数据库维护、数据库管理功能的具体实现。本单元将围绕学生管理系统数据库中的日常数据查询与维护工作,根据具体的数据操纵项目(项目使用的数据库参见附录A、附录B),讲述实现数据操纵功能的SQL语言。

5.1 数据查询语句(Select)

数据查询语句可完成对关系数据表的集合运算(并、交、差)、关系代数运算(投影、选择、连接),还可对数据表进行排序与统计汇总运算,如求某数据项的和、平均值、最大值、最小值等。因此,数据查询语句具有极强的查询与统计汇总功能,语句一般格式如下。

Select [All | Distinct] <目标表达式1>[,…,<目标表达式n>] From <表 | 视图名>[,<表 | 视图名>]… [Where <条件表达式>]

[Order By <表达式> [Asc | Desc]

[Group By <表达式列表> [Having <条件表达式>] ] 其中:

Select <目标表达式1>[,…,<目标表达式n>] 为投影运算; Where <条件表达式>为集合、选择与连接运算; Order By <表达式> [Asc | Desc] 为排序运算;

Group By <表达式列表> [Having <条件表达式>]为分组统计运算;

由上述语句格式看出,Select语句是SQL语言中最复杂的语句,同时也是最重要的语句。为此,将Select语句分为简单查询、连接查询、排序、分组统计、嵌套查询、相关子查询六节,采用由简单到复杂的方法来介绍。

5.1.1 简单查询

1.从数据表中选择列(投影运算)

实际上,从数据表中选择列就是关系代数中的投影运算,分为查询指定列、全部列与计算表达式列三种情况。

(1)查询指定列

语句格式:Select <列名1>,…,<列名n> From <表名>

- 136 -

【例5-1】在学生档案表tblStudent 中查询全体学生的学号与姓名。 Use Studentsys

Select Stud_Id , Stud_Name From tblStudent (2)查询全部列

语句格式:Select * From <表名>

【例5-2】在学生档案表tblStudent 中查询全体学生的所有字段信息。 Select * From tblStudent (3)计算表达式列

语句格式:Select <目标表达式1>,…,<目标表达式n> From <表名> 【例5-3】在学生档案表tblStudent 中查询全体学生的姓名及其年龄。 Select Stud_Name, Year(GetDate())-Year(Birth) From tblStudent

在目标表达式Year(Getdate())-Year(Birth)中,GetDate为系统当前日期,Birth为出生日期,用Year函数取出当前年份及出生年份,相减后得到学生的年龄。

目标表达式可采用别名表示方式,格式为:<列名> As <别名> 或 <列名> <别名> 在上例中采用别名方式的Select语句为:

Select Stud_Name As '姓名', Year(getdate())-Year(Birth) As '年龄' From tblStudent

或 Select Stud_Name 姓名, Year(getdate())-Year(Birth) 年龄

From tblStudent

说明:如果别名中没有空格符,则别名的单引号可以省略。 (4)消除取值重复的行

为了使投影运算后的列值不出现重复,可在列名前添加关键字。 语句格式:Select Distinct <列名1>,…,<列名n> From <表名> 【例5-4】 在班级编码表tblClass中查询出所有的系部编号。 Select Dpt_ID From tblClass

执行该语句后,将出现多个相同的系部编码。 在列名前增加关键字,语句改为: Select Distinct Dpt_ID From tblClass

执行该语句后,消除取值重复的行,各记录内容不同。 2.从表选择行(选择运算)

从数据表中选择行就是关系代数中的选择运算,选择运算是用Where条件子句实现行记录的选择。

语句格式:Select <列名> From <表名> Where <查询条件>

Where子句中常用的6种查询条件如表5-1所示,下面依次介绍这6种查询条件。

- 137 -

表5-1 常用查询条件

序号 1 2 3 4 5 6 查询条件 关系表达式 范围查询 集合查询 模糊查询 空值判断 逻辑表达式 运算符号 =、>、<、>=、<=、<>、!=、!<、!> Between、Not Between In、Not In Like、Not Like Is Null、Is Not Null And、Or、Not (1)关系表达式

关系表达式是将列名、常量等用关系运算符连接而成的式子。常用关系运算符有: =、>、<、>=、<=、<>、!=、!<、!>。后三种运算符分别表示不等于、不小于和不大于。 说明:对Char、Varchar、Text、Datetime和Smalldatetime类型常量要用单引号括起来。 【例5-5】在系部编码表tblDepart与学生成绩表tblScore中,编写满足下列条件的查询语句。

? 查询计算机系(系部编号为'30')的专业名称。 Select DptMj_Name From tblMajor Where Dpt_Id = '30' ? 查询考试不及格学生的学号。

Select Distinct Stud_Id From tblScore Where Score <60

这里使用了Distinct短语,当一个学生有多门课程不及格,他的学号也只出现一次。 (2)用Between运算符进行范围查询

查询条件为:<表达式> [Not] Between <下界> And <上界>

查询结果为数据表中满足表达式值在(或不在) <下界> 与 <上界>之间的记录。 【例5-6】在学生档案表tblStudent中,编写满足下列条件的查询语句。 ? 查询年龄在20至28岁之间的学生的学号、姓名和年龄。 Select Stud_Id ,Stud_Name , Year(GetDate())-Year(Birth) As Age From tblStudent

Where Year(GetDate())-Year(Birth) Between 20 And 28

? 查询年龄不在20至28岁之间的学生的学号、姓名和年龄。 Select Stud_Id ,Stud_Name , Year(GetDate())-Year(Birth) As Age From tblStudent

Where Year(GetDate())-Year(Birth) Not Between 20 And 28 (3)用In运算符指定集合查询 查询条件为:<表达式> [Not] In 集合

- 138 -

查询结果为数据表中满足表达式值在集合(或不在集合)中的记录。 【例5-7】在专业编码表tblMajor中,编写满足下列条件的查询语句。

? 查询机械系(编号为'10 ')、电气系(编号为'20')和计算机系(编号为'30 ')的专业

编号与名称。

Select DptMj_Id , DptMj_Name From tblMajor

Where UpperId In ('10 ','20 ','30 ')

? 查询不是机械系(编号为'10')、电气系(编号为'20'),也不是计算机系(编号为'30')

的专业编号与名称。 Select DptMj_Id , DptMj_Name From tblMajor

Where UpperId Not In ('10 ','20 ','30 ') (4)用Like运算符模糊查询

查询条件为:<表达式> Like ' [<通配符>]<字符串>[<通配符>]' 四种通配符所表示含义如表5-2所示。

表5-2 通配符

序号 1 2 3 4 通配符 % _(下划线) [ ] [^] 说明 代表任意多个字符 代表单个字符 代表指定范围内的单个字符 代表不在指定范围内的单个字符 【例5-8】在学生档案表tblStudent中,编写满足下列条件的查询语句。 ? 查询所有姓刘的学生的学号、姓名和性别。 Select Stud_Id , Stud_Name , Stud_Sex From tblStudent

Where Stud_Name Like '刘%'

? 查询姓名中第二个字为“阳”的学生的学号、姓名和性别。 Select Stud_Id , Stud_Name , Stud_Sex From tblStudent

Where Stud_Name Like '_阳%'

? 查询学号第一位不是1的学生的学号、姓名和性别。 Select Stud_Id , Stud_Name , Stud_Sex

- 139 -

From tblStudent

Where Stud_Id Like '[^1]%' 或 Select Stud_Id , Stud_Name , Stud_Sex From tblStudent

Where Stud_Id Not Like '1%' (5)空值(NULL)查询

空值查询条件为:<字段名> Is Null 非空查询条件为:<字段名> Is Not Null

【例5-9】在学生成绩表tblScore中,编写满足下列条件的查询语句。 ? 查询缺少成绩的学生的学号和相应的课程号。 Select Stud_Id , Course_Id From tblScore Where Score Is Null

注意:这里的“Is”不能用等号(“=”) 代替。 ? 查询所有有成绩的学生的学号和课程号。 Select Stud_Id , Course_Id From tblScore

Where Score Is Not Null (6)逻辑表达式

逻辑表达式是将列名、常量等用逻辑运算符连接而成的式子。常用逻辑运算符有: And(逻辑与)、Or(逻辑或)、Not(逻辑非)。 逻辑运算符优先级为Not最先,And其次,最后为Or。

【例5-10】在学生档案表tblStudent中,查询年龄在20至25岁之间的女生学号、姓名和年龄。

Select Stud_Id , Stud_Name , Year(GetDate())-Year(Birth) As Age From tblStudent

Where Year(GetDate())-Year(Birth) Between 20 And 25

And (Stud_Sex='女')

- 140 -


5—单元5 数据查询与维护.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:苏教版小学语文五年级阅读能力测试卷 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: