第五章 数据查询
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【例5.7】 查询Book表中单价大于30的图书情况。
SELECT * FROM Book WHERE 单价>30;
逻辑运算
通过逻辑运算符(AND、OR、XOR和NOT)组成更为复杂的查询条件。 逻辑运算操作的结果是“1”或“0”,分别表示“true”或“false”。
符号1
符号2
说明
示例
说明 如果x是"true",那么示例的结果是"false"; 如果x是"false",那么示例的结果是"true"。 如果x或y任一是"true",那么示例的结果是 "true",否则示例的结果是"false"。 如果x和y都是"True",那么示例结果是"true", 否则示例的结果是"false"。 如果x和y不相同,那么示例结果是"true",否 则示例的结果是"false"。
表达式 IN (表达式1 [,…n])
【例5.14】 查询Book表中“高等教育出版社”、“北京大学出版社” 和“人民邮电出版社”出版的图书的情况。
SELECT * FROM Book WHERE 出版社 IN ( '高等教育出版社', '北京大学出版社', '人民邮电出版社');
说明:IN关键字最主要的作用是表达子查询。
LIKE运算符
2. 模式匹配(LIKE运算符) LIKE运算符用于指出一个字符串是否与指定的字符串相匹配,其运 算对象可以是char、varchar、text、datetime等类型的数据,返回逻辑 值TRUE或FALSE。 使用LIKE进行模式匹配时,常使用特殊符号_和%,可进行模糊查询。 “%”代表0个或多个字符,“_”代表单个字符。由于MySQL默认不区分大 小写,要区分大小写时需要更换字符集的校对规则。 【例5.10】 查询Members表中姓“张”的会员的身份证号、姓名及 注册时间。
比较运算
WHERE子句会根据条件对FROM子句的中间结果中的行一行一行地进行 判断,当条件为TRUE的时候,一行就被包含到WHERE子句的中间结果中。 在SQL中,返回逻辑值(TRUE或FALSE)的运算符或关键字都可称为谓 词。 判定运算包括比较运算、模式匹配、范围比较、空值比较和子查询。 1. 比较运算 比较运算符用于比较(除TEXT和BLOB类型外) 两个表达式值,MySQL 支持的比较运算符有:=(等于)、<(小于)、<=(小于等于)、>(大 于)、>=(大于等于)、<=>(相等或都等于空)、<>(不等于)、!= (不等于)。
SELECT 图书编号,书名 FROM Book WHERE 书名 LIKE '%#_%' ESCAPE '#';
范围比较
3. 范围比较
用于范围比较的关键字有两个:BETWEEN和IN。 当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。 BETWEEN关键字指出查询范围,格式为:
表达式 [ NOT ] BETWEEN 表达式1 AND 表达式2
SELECT 用户号,会员姓名, 注册时间 FROM Members WHERE 会员姓名 LIKE '张%';
【例5.11】 查询Book表中图书编号倒数第二位为T的图书的图书编 号和书名。
SELECT 图书编号, 书名 FROM Book WHERE 图书编号 LIKE '%T_';
例【 5.12】 查询Book表中书名中包含下画线的图书。
CASE WHEN 条件1 THEN 表达式1 WHEN 条件2 THEN 表达式2 ……
ELSE 表达式
END
替换查询结果举例
【例5.3】 查询Book表中图书编号、书名和数量,对其库存数量按 以下规则进行替换:若数量为空值,替换为“尚未进货”;若数量小于 5,替换为“需进货”;若数量在5-50之间,替换为“库存正常”;若 总学分大于50,替换为“库存积压”。列标题更改为“库存”。
顺序严格地排序。例如,一个HAVING子句必须位于GROUP BY子句之后, 并位于ORDER BY子句之前。
选择列
1. 选择指定的列
使用SELECT语句选择一个表中的某些列的语法格式如下:
SELECT 字段列表 FROM 表名
各列名之间要以逗号分隔。 【例5.1】 查询Bookstore数据库的Members表中各会员的会员姓名、 联系电话和注册时间。
SELECT 图书编号, 书名, CASE WHEN 数量 IS NULL THEN '尚未进货' WHEN 数量 < 5 THEN '需进货' WHEN 数量 >=5 and 数量<=50 THEN '库存正常' ELSE '库存积压' END AS 库存 FROM Book;
计算列值
4. 计算列值
消除结果集中的重复行
5. 消除结果集中的重复行
对表只选择其某些列时,可能会出现重复行。例如,若对XSCJ数 据库的XS表只选择专业名和总学分,则出现多行重复的情况。可以 使用DISTINCT或DISTINCTROW关键字消除结果集中的重复行,其格式 是:
SELECT DISTINCT字段列表
其含义是对结果集中的重复行只选择一个,保证行的唯一性。 【例5.5】 对Book表只选择图书类别和出版社,消除结果集中的 重复行。
SELECT DISTINCT 图书类别, 出版社 FROM Book;
WHERE子句
WHERE子句必须紧跟FROM子句之后,在WHERE子句中,使用一个条件 从FROM子句的中间结果中选取行。其基本格式为:
WHERE 列名 运算符 值 操 作 符 = <> > < >= <= BETWEEN LIKE 描 等于 不等于 大于 小于 大于等于 小于等于 在某个范围内 搜索某种模式 述
SELECT * FROM Book WHERE 出版时间 BETWEEN '2010-1-1' AND '2010-12-31';
范围比较举例
使用IN关键字可以指定一个值表,值表中列出所有可能的值,当与 值表中的任一个匹配时,即返回TRUE,否则返回FALSE。 使用IN关键字指定值表的格式为:
SELECT字段列表 [AS] 别名
【例5.2】 查询Book表中图书类别为计算机的图书书名、作者和出版 社,结果中各列的标题分别指定为name、auther和publisher。
SELECT 书名 AS name, 作者 AS auther, 出版社 AS publisher FROM Book WHERE 图书类别= '计算机';
第五章
数据查询
项目知识要点与目标
项目知识要点
任务1 单表查询 1 SELECT语句定义 2 选择指定的列 3 WHERE子句 任务2 多表查询 1 FROM子句 2 多表连接 任务3 排序与分类汇总 1 聚合函数 2 GROUP BY子句 3 HAVING子句 4 ORDER BY子句 项目实训
知识能力目标
当两个表达式值均不为空值(NULL)时,除了“<=>”运算符,其他比 较运算返回逻辑值TRUE(真)或FALSE(假);而当两个表达式值中有一 个为空值或都为空值时,将返回UNKNOWN。
Baidu Nhomakorabea较运算举例
【例5.6】 查询Bookstore数据库Book表中书名为“网页程序设计” 的记录。
SELECT 书名,单价 FROM Book WHERE 书名='网页程序设计';
与: select (1 and 1), (0 and 1), (3 and 1), (1 and null);
异或: select (1 xor 1), (0 xor 0), (1 xor 0), (0 xor 1), (null xor 1);
WHERE子句举例
【例5.8】 查询Sell表中已收货且已结清的订单情况。 SELECT 订单号,是否收货,是否结清 FROM Sell WHERE 是否收货='已收货' AND 是否结清='已结清'; 【例5.9】 查询Book表中清华大学出版社和北京大学出版社出版的价格大于25 元的图书。 SELECT 书名,出版社,单价 FROM Book WHERE (出版社='清华大学出版社' OR 出版社='北京大学出版社' ) AND 单价>=25; 或: SELECT书名,出版社,单价 FROM Book WHERE (出版社='清华大学出版社' AND 单价>=25) OR (出版社='北京大学出版社' AND 单价>=25); 【思考题】以下语句能否得到正确结果?为什么? SELECT 书名,出版社,单价 FROM Book WHERE 出版社='清华大学出版社' OR 出版社='北京大学出版社' AND 单价>=25;
USE Bookstore; SELECT 会员姓名,联系电话,注册时间 FROM Members;
说明:当在SELECT语句指定列的位置上使用*号时,表示选择表的 所有列,如要显示Members表中所有列,不必将所有字段名一一列出, 使用
SELECT * FROM Members;
列别名
2. 定义列别名 当希望查询结果中的某些列或所有列显示时且使用自己选择的列标题 时,可以在列名之后使用AS子句来更改查询结果的列别名。 语法格式为:
使用SELECT对列进行查询时,在结果中可以输出对列值计算后的值, 即SELECT子句可使用表达式作为结果,格式为:
SELECT 表达式1[ , 表达式2… ]
【例5.4】 对Sell表已发货的记录计算订购金额(订购金额=订购册 数*订购单价),并显示图书编号和订购金额。
SELECT 图书编号, 订购册数*订购单价 AS 订购金额 FROM Sell WHERE 是否发货= '已发货';
SELECT [ALL | DISTINCT] 输出列表达式, ... [FROM 表名1 [ , 表名2] …] /*FROM子句*/ [WHERE 条件] /*WHERE子句*/ [GROUP BY {列名 | 表达式 | 列编号} [ASC | DESC], ... /* GROUP BY 子句*/ [HAVING 条件] /* HAVING 子句*/ [ORDER BY {列名 | 表达式 | 列编号} [ASC | DESC] , ...] /*ORDER BY子句*/ [LIMIT {[偏移量,] 行数|行数OFFSET偏移量}] /*LIMIT子句*/
【典型工作任务】 单表查询、多表查询、子查询 【技能要求】 1 使用MySQL命令完成多功能数据 查询; 2 使用图形工具完成多功能数据查 询 【知识要求】 1 简单查询、分类汇总 2 联接和嵌套查询 3 数据查询的SQL语句
学时
6
“员工管理系统”数据库查询操作
6
单表查询
使用数据库和表的主要目的是存储数据以便在需要时进行检 索、统计或组织输出,通过SQL语句的查询可以从表或视图中迅 速方便地检索数据。 一、SELECT语句 语法格式:
not
or and xor
!
|| && ^
非运算
或运算 与运算 异或运算
!x
x || y x && y x ^y
逻辑运算举例
非:select not 0, not 1, not null;
或: select (1 or 0), (0 or 0), (1 or null), (1 or 1), (null or null);
当不使用NOT时,若表达式expression的值在表达式expression1与
expression2之间(包括这两个值),则返回TRUE,否则返回FALSE;使
用NOT时,返回值刚好相反。 注意:expression1的值不能大于expression2的值。 【例5.13】 查询Book表中2010年出版的图书的情况。
注意:当自定义的列标题中含有空格时,必须使用引号将标题括起来。
SELECT 图书编号 AS ‘book number’, 书名 AS ‘book name', FROM Book WHERE 图书类别= '计算机';
替换查询结果中的数据
3. 替换查询结果中的数据
在对表进行查询时,有时对所查询的某些列希望得到的是一种概念 而不是具体的数据。例如查询XS表的总学分,所希望知道的是学习的总 体情况,这时,就可以用等级来替换总学分的具体数字。 要替换查询结果中的数据,则要使用查询中的CASE表达式,格式为: