《数据库原理及应用》第五章SQL查询

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单查询----选择记录
SELECT中用于完成选择记录(查询条件)的命令子句是: [WHERE <筛选条件> [AND | OR <筛选条件> ...]]
例7 查询会计学院学生的学号,姓名和院系属性。 SELECT 学号,姓名,所属院系 FROM student WHERE 所属院系="会计学院" 例8 查询学分少于3(不含3学分)的课程名称,课程性质 和学分。 SELECT 课程名称,课程性质,学分 FROM course WHERE 学分<3 例9 查询会计学院的非党员学生。 SELECT 学号,姓名,所属院系,政治面貌 FROM student WHERE 所属院系="会计学院" and 政治面貌 <>"党员"
SQL语言
SQL功能 命令动词
数据查询
数据定义 数据操纵
SELECT
CREATE、DROP、ALTER INSERT、UPDATE、DELETE
数据控制
GRANT、REVOKE
SQL语言
SQL语言的优点在于SQL不是面向过程的 语言,使用SQL语言只需描述做什么,而 不需要描述如何做,为使用者带来极大的 方便。本章将以讨论SQL的数据查询语言 为主,同时介绍数据定义语言和数据操纵 语言。本章中大部分例题使用“学生管理” 数据库,并假定数据库在Access的当前目录 下。
第六章:SQL查询
SQL语言
结构化查询语言SQL(Structured Query Language)是DBMS提供的对数据库进行操作
的语言,称为结构化查询语言。SQL已经成为 关系数据库语言的国际标准。
功能: 数据定义语言(DDL, Data Definition Language) 数据查询语言(DQL, Data Query Language) 数据操纵语言(DML, Data Manipulation Language) 视图控制语言(DCL,Data Control Language)
SELECT 姓名,性别,所属院系 FROM student 注:SELECT指出要查询的属性,FROM指出从哪个表查询。
例2 查询student表中所有字段和记录.SELECT * FROM student
例3 查询已经选课的学生学号。 SELECT DISTINCT 学号 FROM grade DISTINCT选项的作用是去掉查询结果中的重复值,比较下 面的命令: SELECT 学号 FROM grade
数据查询—select语句
Select [All | Distinct] <列名>|<目标列表达式> |<函数>[,……] From <表名或视图名>[,……] [Where <条件表达式>] [Group By <列名1> [Having <条件表达式>]] [Order By <列名2> [Asc] [Desc] 功能:从指定的表或视图中,创建一个由指定范围、满足条 件、按某字段分组、按某字段排序的指定字段组成的新记录 集。 All:查询结果是表的全部记录 Distinct:查询结果不包括重复行的记录集 From<表或视图名>:查询的数据来源
连接查询(多表查询)
例16 查询成绩在60分以上(包括60分)、90分以下 (含90分)学生的学、姓名、课程名称和成绩
SELECT student.学号,姓名,课程名称,成绩 FROM student,grade,course WHERE grade.课程编号=course.课程编号 and student.学号=grade.学号 And 成绩 BETWEEN 60 AND 90 SELECT student.学号,姓名,课程名称,成绩 FROM student,grade,course ; WHERE grade.课程编号=course.课程编号 and student.学号=grade.学号 ; And 成绩>=60 and 成绩<=90
在SQL视图中编写Select命令语句
在设计视图中创建查询,在“显示表”对 话框中直接单击“关闭”按钮,即不添加 任何表或查询;然后单击“视图”菜单下 的“SQL视图”,即进入SQL语句的编写 模式,在SQL视图中就可编写SELECT命 令语句。 在查询设计视图中创建查询时,ACCESS将 在后台构造等效的SELECT语句(可单击” 视图”菜单中的”SQL视图”命令查看).
Select语句说明
SELECT说明要查询的内容(指字段或属性); FROM指明从哪几个表中查询; WHERE说明查询的筛选条件,即选择元组的条 件; GROUP BY短语用于对查询结果进行分组,即对 查询进行分类统计; HAVING短语必须跟随GROUP BY使用,它用来 限定分组必须满足的条件; ORDER BY短语用来对查询结果进行排序, Asc 为升序,Desc为降序,系统默认为升序
SELECT 学号,成绩 FROM grade WHERE 成绩<60 or 成绩>=90
简单查询----选择记录
例11 查询所有信息学院和金融学院的学生信息。
SELECT * FROM student WHERE 所属院系 IN („信息学院’,„金融学院') 比较下面的命令: SELECT * FROM student WHERE 所属院系=„信息 学院’ or 所属院系=„金融学院'
简单查询----选择字段
例4 查询学生的姓名和年龄,列出清单。 SELECT 姓名,year(date())-year(出生日期) AS 年龄 FROM student “AS 年龄”表示为计算结果定义一个属性。 例5 所有课程的学分增加50%,重新计算各门课程的学分并列 出清单。 SELECT 课程名称, INT(学分*(1+0.5)) AS 新学分 FROM course SELECT 课程名称, 学分,INT(学分*(1+0.5)) AS 新学 分 FROM course 例6 查询学生的姓名,所属院系,出生日期和性别。 SELECT 姓名,所属院系,出生日期,性别 FROM student 查询与表中属性顺序无关,通过查询可得到新的属性顺序。
Select命令的执行过程
根据WHERE子句的检索条件,从FROM子 句指定的表中选取满足条件的记录,再按照 字段列表选取字段,得到查询结果 如果有GROUP子句,则将查询结果按照< 列名1>相同的值进行分组。 如果GROUP子句后有HAVING短语,则只 输出满足HAVING条件的元组。 如果有ORDER子句,查询结果还要按照< 列名2>的值进行排序。
连接查询(多表查询)
例13 查询会计系学生选修课程及成绩,要求查询结果中含 属性学号、姓名、课程名称和成绩。 SELECT student.学号,姓名,课程名称,成绩 FROM student,course,grade WHERE 所属院系='会计学院' and student.学号=grade. 学号 and grade.课程编号=course.课程编号 这个查询涉及到两个表,查询所要求的结果来自两个表,查 询的条件也涉及到两个表,所以有“FROM student,grade”; 这两个表之间是有联系的,这种联系是通过父表的主关键字 (student中的学号)和子表的外部关键字(grade表的学号) 建立的,所以有命令子句WHERE中的筛选条件“student. 学号=grade.学号”。 由于student表和grade表都有学号属性,因此在SELECT子 句中要用前缀的形式“student.学号”指明取自哪个表中的 学号;此例中用“grade.学号”的形式,查询结果是一样的。
简单查询----选择记录
WHERE子句通过指定查询条件,可以在表中找出满足条件 的记录。查询条件可以是任意复杂的逻辑表达式。 当WHERE子句需要指定一个以上的查询条件时,要使用逻 辑运算符AND、OR和NOT将其连接成复合的逻辑表达式。 其优先级由高到低为:NOT、AND、OR,可以使用括号改 变优先级。 条件查询还可以使用LIKE或NOT LIKE进行部分匹配查询。* 表示任意长度的字符串;?表示任意单个字符。 在查询中还可以使用查询谓词,查询谓词IN 和NOT IN用于 检索属于(IN)或不属于(NOT IN)指定集合的记录。 例10 查询成绩在60分以下(不包括60分)、90分以上(含 90分)学生的学号。
还可以利用空值查询: 例12 查询所有选修了课程,但没有参加考试(成 绩为“空”)的学生学号。
SELECT 学号 FROM grade WHERE 成绩 IS NULL 比较下面的命令: SELECT 学号 FROM grade WHERE ISNULL(成绩)
连接查询(多表查询)
两表连接:SQL的连接操作是通过相关联的表间 行的匹配而产生的结果。 要连接的表在From子句后列出,表名之间用逗号 分隔,连接条件利用Where子句进行说明。 如果缺少Where子句的条件说明,完成的连接是 两表的笛卡尔积。 注意:在输出的字段列中,如果该字段在连接的 两表中均存在,则必须在字段前面标明该字段的 出处 多表连接的结构与两表连接相同。 多表查询是指SELECT命令的查询内容或查询条 件或查询内容和查询条件同时涉及到数据库中相 关的多个表。
连接查询(多表查询)
例14 查询有不及格成绩学生的学号和姓名。 SELECT DISTINCT student.学号,姓名 FROM student,grade WHERE 成绩<60 and student.学号=grade.学号 比较下面的命令: SELECT student.学号,姓名 FROM student,grade WHERE 成绩<60 and student.学号=grade.学号 查询谓词:利用空值查询。 例15 查询所有选修了课程,但没有参加考试的学生的院系, 姓名,课程名称和成绩。 SELECT 所属院系,姓名,课程名称,成绩 FROM student,grade,course WHERE student.学号=grade.学号 and grade.课程编号=course.课程编号 and 成绩 IS
连接查询(多表查询)
例17 查询课程名称中最后两个字是“管理”的课程信息。 SELECT * FROM course WHERE 课程名称 LIKE '*管理' 例18 查询课程名称中含有“管理”字的所有课程名称。 SELECT * FROM course WHERE 课程名称 LIKE '*管理 *' 查询课程名称中含有“理”字的所有课程名称。 SELECT * FROM course WHERE 课程名称 LIKE '*理*' 例19 查询学号前6位是064001的所有学生信息。 SELECT * FROM student WHERE 学号 LIKE '064001*' 上述命令也可以用函数来完成: SELECT * FROM student WHERE LEFT(学号,6)='064001'
查询计算函数的格式及功能
函数格式 COUNT(*) SUM(字段名) AVG(字段名) MAX(字段名) MIN(字段名) 函数功能 计算记录个数 求字段名所指定字段值的总和 求字段名所指定字段的平均值 求字段名所指定字段的最大值 求字段名所指定字段的最小值
简单查询----选择字段
Select <字段名列表> from <表名> where <条件> 例1 查询学生姓名、性别和所在院系
排序(ORDER BY短语)
来自百度文库
SELECT命令中用于对查询结果排序的命令子句是: [ORDER BY <排序关键字1> [ASC | DESC] [,<排序关键字 2> [ASC | DESC] ...]] ORDER BY短语是对最终的查询结果进行排序,如果是嵌套 查询,不可以在子查询中使用该短语,只能对外层查询的结 果进行排序。 ASC表示升序,DESC表示降序,缺省为升序。排序关键字 还可以是属性名或属性在该查询中的排列序号1、2或3等,但 不是原表中的排列序号。 按排序关键字在ORDER BY子句中出现的顺序,排序关键字 分为第一排序关键字、第二排序关键字、第三排序关键字等; 只有在第一排序关键字相同的情况下,第二排序关键字才会 有效,依此类推只有第二排序关键字相同时,第三排序关键 字才会起作用。
相关文档
最新文档