第10讲 SELECT 查询

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

查询命令
2.选择表中的行
------在WHERE子句中规定查询条件
例: 列出所有教授的信息。 SELECT * FROM T WHERE Ttitle='教授'; 例:列出在“D01”系工作的所有教师的信息。 SELECT * FROM T WHERE Dnum='D01';
例:列出月工资在1800元和2400元之间的教师 信息。 SELECT * FROM T WHERE Tsalary BETWEEN 1800 AND 2400;
第十讲
SQL的数据操纵功能

SQL的DDL是用来生成、修改、删除数据库结构的, 它并不涉及数据。 数据库的数据操作由数据操纵语言DML来完成, 主要包括SELECT、INSERT、DELETE和UPDATE等4 个语句,即通过它们实现查询和更新(查、插、 删、改)。

查询的基本语句
SQL中的核心是数据库查询语句,它的一般格式是: SELECT <目标列> FROM <表或视图名> [WHERE <条件表达式>] [GROUP BY <列名> [HAVING <条件>]] [ORDER BY <列名> [ASC/DESC]];
例:计算SC表中学号为S030101的学生所选修课程的总成绩
例:计算SC表中学号为S030101的学生所选修课程的总成绩
SELECT SUM(Score) FROM SC WHERE Snum=‘S030101’
AVG 函数
语法: AVG(表达式) 说明:该函数只能对数值类型的字段进行计算。
例1:计算SC表中学号为S030101的学生所选修课程的平均分。 SELECT AVG(Score) FROM SC; 例2:计算T表中所有女教师的平均工资。
计算T表中男教授的人数。
COUNT函数:统计记录数
①使用COUNT(列名)时,函数指定的列中的 空值(NULL值)的记录不统计在内。 ②使用COUNT(*)时,统计的数目包括空值的 数目,即统计一张关系表中所有行的数目。
SUM 函数
语法: SUM(表达式) 说明:该函数不计算包含Null 值的字段。
格式说明:
ORDER BY子句 P46
使用ORDER BY子句可以把查询到的行按指 定列的值进行排序(升序或降序)后再予以输 出。ASC指明为升序,可缺省,DESC降序。 注意:若选用ORDER BY子句,则它必须是 查询语句中的最后子句。
条件表达式
<条件表达式>常用的有以下六种: (1)比较大小 应用比较运算符构成表达式,主要的比较运算符有:=, >,<,>=,<=,!=,<>,!>(不大于),!<(不小于), NOT(与比较运算符同用,对条件求非)。 (2)指定范围P52 BETWEEN„AND„ ,NOT BETWEEN„AND„ 查找字段值在(或不在)指定范围内的记录。BETWEEN 后是范围的下限(即低值),AND后是范围的上限(即高 值)。
例:列出除讲师、助教以外,工资低于1800元的所 有教师信息。
SELECT * FROM T WHERE NOT(Ttitle='讲师'OR Ttitle='助教 ')AND Tsalary<1800;
匹配查询
匹配查询 有时用户并不精确地知道需要查询的条件,这时可 通配符: 以使用匹配查询。 _(下划线):表示任意单个字符; 例:列出所有张姓教师的信息。 SELECT * FROM T
注意: MIN() 函数与 MAX() 函数可以用在任何数据 类型中,例如选出最小或最大的字符串,最早或最 近的日期等。
例:统计C表中课程学分Cfreq总学分
C表
例:统计C表中课程学分Cfreq总学分

SELECT SUM(Cfreq) as 总学分
FROM C;
例:统计C表中课程学分Cfreq平均学分
② 平均值(AVG 函数)
③ 求和(SUM 函数)
④ 最小值(MIN 函数)
⑤ 最大值(MAX 函数)
聚合函数
返回值
数,忽略null值。可用于数字和字符列。
COUNT(表达式) 返回表达式中非 null 值的数量,即统计记录个
COUNT(*) SUM(表达式)
返回表中的行数 (包括有 null 值的行)。 返回表达式中所有值的总和,忽略 null 值。 仅用于数字列。 返回表达式中所有值的平均值,忽略 null 值。 仅用于数字列。 返回表达式中的最大值,忽略 null 值。 可用于数字、字符和日期时间列。 返回表达式中最小值,忽略 null 值。 可用于数字、字符和日期时间列。
查询的基本语句
顺 序 号 1 2 3 4 5 6 子句关键词 SELECT FROM WHERE GROUP BY HAVING ORDER BY 子句功能
从指定表中取出指定的列的数据 指定要查询操作的表 用来规定一种选择查询的标准 对结果集进行分组,常与聚合函数一起使用 返回选取的结果集中行的数目 指定分组的搜寻条件
条件表达式
(6)多重条件 AND,OR AND含义为查找字段值满足所有与AND相连的查 询条件的记录;OR含义为查找字段值满足查询条 件之一的记录。AND的优先级高于OR,但可通过括 号改变优先级。
查询命令
1.选择表中的列
------选择表中的若干列
例:显示D表中的Dnum、Dname列。
SELECT Dnum,Dname FROM d; 结果
查询的基本语句
顺 序 号 1 2 3 4 5 6 子句关键词 SELECT FROM WHERE GROUP BY HAVING ORDER BY 子句功能
从指定表中取出指定的列的数据 指定要查询操作的表 用来规定一种选择查询的标准 对结果集进行分组,常与聚合函数一起使用 返回选取的结果集中行的数目 指定分组的搜寻条件
002013
高林
汽车管理
78--04-06
北京
30
在WHERE子句中有关条件表达式的创建 ①处理空值 P45 ( IS NULL短语) ②逻辑运算符 P49-50 (AND、OR、NOT) ③ IN运算符 P51 ④BETWEEN…AND…运算符 P52 ⑤LIKE运算符 P52-54
2.6 聚集查询
一、选择唯一值 DISTINCT 二、聚集函数 三、分类聚集(GROUP BY 子句)
唯一值 DISTINCT
使用关键字 DISTINCT (P54-56) 例:查询“旅客”表中所有不同的工作单位。 SELECT DISTINCT 工作单位 FROM 旅客;
SQL 聚集函数
SQL Server 支持五种类型的聚集函数: ① 统计记录数目(COUNT 函数)
如果条件子句换成:
WHERE Tsalary NOT BETWEEN 1800 AND 2400 则结果恰是T表中上一结果未选中的行。
例:列出职称是副教授或讲师或助教的教师信息。
SELECT * FROM T WHERE Ttitle IN('副教授','讲师','助教');
IN运算符 用于决定被检验的值是否是某组值中的一 个,该子句可以取代多个OR运算符,以简化查询。
%:表示0或者多个字符的集合。
WHERE Tname LIKE‘张%';
我们也可以用 WHERE Tname LIKE'__小%' 来查询姓名中第二个字是‘小’的这样一些教师。
驾驶员简况表
驾照号 002011 002012 姓名 王明 高兵 所学专业 汽车指挥 汽车管理 出生时间 80-12-01 79-02-15 籍贯 积分 天津 四川 20 25
格式说明: 目标列
一个或多个(用逗号分隔),是对列的选择, 可以是列名、常数、表达式或内部函数。 用“*”可选择被查询的表中所有的列。
FROM子句
一个表或多个表,比如两个表时,实际上 将生成一个由这两个表的笛卡尔乘积构成 的虚拟表,查询在虚拟表上实现。
格式说明:
WHERE子句 P42
指定被选取的数据行所满足的条件。条件 可以是单一条件也可能是复合条件。在条 件表达式中可包含算术表达式、关系表达 式、逻辑表达式以及一些特殊比较判断运 算符等。 算术比较符:>、>=、<、<=、=、(<>,!=); 逻辑运算符:AND与、OR或、NOT非。
AVG(表达式)
MAX(表达式)
MIN(表达式)
COUNT函数:统计记录数
语法:COUNT(字段名) ★计算“旅客”表中的副教授人数 select count(*) as 副教授 from 旅客 where 职 称=‘副教授’;
关于空值、唯一值
select count(贵宾) from 旅客 select count(*) from 旅客 ★计算“旅客”表中旅客有几种不同的职称。 select count(distinct 职称) as 职称 from 旅客
条件表达式
(3)集合P51 IN„,NOT IN„ 查找字段值属于(或不属于)指定集合内的记录。 (4)字符匹配P52-53 LIKE,NOT LIKE’<匹配串>’ 通配符_和%。其中_代表任意单个字符;%代表任 意长度的字符串。
条件表达式
(5)空值 P45 IS NULL,IS NOT NULL 查找字段值为空(或不为空)的记录。SQL规定, 在含有运算符+、-、*、/的算术表达式中,若有 一个值是空值,则该算术表达式的值也是空值; 任何一个含有NULL比较操作结果的取值都为 “假”。
例:计算T表中所有女教师的平均工资。
例:计算T表中所有女教师的平均工资。
SELECT AVG(Tsalary) FROM T WHERE Tsex=‘女’;
MIN 函数与 MAX 函数
语法: MIN(表达式) 、 MAX(表达式)
例:统计“SC”中成绩最小值与最大值。
select m in(Score) as 最低分from SC select max(Score) as 最高分from SC
查询命令
在SELECT语句中,不仅可以指定希望显示的列, 还可以显示表达式的结果。
例:显示每一个教师的月收入,若每个教师 每月补贴1000元。 SELECT Tname,Tsalary+1000 FROM T; 结果
对属性列或表达式使用AS取别名
例 从表T中查询出所有老师的月收入
Select Tname,Tsalary+1000 as 月收入 From T 结果
查询命令
例:显示D表的所有列。 SELECT * FROM D; 结果
控制列的显示顺序
列的显示顺序由SELECT命令中的列名的顺序决定, 与表中定义时各列的顺序无关。 例如语句: SELECT Dnum,Tnum,Dname FROM D; 它的结果是Dname列和Tnum列显示的位置互换一下。 当使用星号“*”来选择表中所有列时,列的显示顺 序与建表时的顺序相同。
例:从表s中查询所有性别
Select Ssex from s 结果
例:从表s中查询不同性别
Select distinct Ssex from s 结果
查询命令
1.选择表中的列
------选择表中所有列
若要显示表中所有的列,可以在SELECT命令中写 出每列的名字;也可以用星号“*” ,就可显示表 的所有列。例:列出不在“D来自4”系工作的所有副教授的信息。
SELECT * FROM T WHERE(Ttitle='副教授')AND(Dnum<>'D04');
例:列出1970年1月1日前出生,目前工资低于1800 元或高于2300元的教师信息。
SELECT * FROM T WHERE(Tsalary<1800 OR Tsalary>2300)AND(Tbirth<'1970-1-1');

SELECT AVG(Cfreq) as 总学分 FROM C;
格式说明:
GROUP BY子句 P59
按子句中指定的列名把相关的行分成一组。
当目标列中出现内部函数时,将查询到的各
行按指定的列名分组时对内部函数进行计算,
并作为结果输出 。
格式说明:
HAVING子句 P61 HAVING子句相当于一个过滤器。它作为GROUP BY 的一个可选的子句,用来在分组查询中加上进一步的 组选择限制,就像WHERE子句剔除查询中不需要的 行,而HAVING子句剔除不需要的组。 HAVING子句必须含有一个条件,这个条件一般是对 分组作某一集函数计算所得的值与一个常数相比较。
相关文档
最新文档