当前位置:文档之家› 《数据库原理及应用》第五章SQL查询

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


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