1 / 20

SQL 数据查询

SQL 数据查询. SQL 语言的类型. SQL Structured Query Language Transact-SQL PL/SQL. 查询. 功能(与“关系运算”的关系) SELECT 语句功能强大。虽然表面上看来它只用来完成关系代数运算 “ 选择 ” ,但实际上它也可以完成其他两种关系运算 —“ 投影 ” 和 “ 连接 ” , SELECT 语句还可以完成统计并对数据进行排序。. SELECT 语句. 语法格式 SELECT [ALL/DISTINCT < 字段名 >[,< 字段名 >] …

kizzy
Télécharger la présentation

SQL 数据查询

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SQL 数据查询

  2. SQL语言的类型 • SQL Structured Query Language • Transact-SQL • PL/SQL

  3. 查询 • 功能(与“关系运算”的关系) SELECT语句功能强大。虽然表面上看来它只用来完成关系代数运算“选择”,但实际上它也可以完成其他两种关系运算—“投影”和“连接”,SELECT语句还可以完成统计并对数据进行排序。

  4. SELECT语句 • 语法格式 SELECT [ALL/DISTINCT <字段名>[,<字段名>]… FROM <表名或视图>[,<表名或视图>]… [WHERE <条件表达式>] [GROUP BY <列名1> [HAVING <条件表达式>]]… [ORDER BY <列名2> [ASC/DESC]] • 说明 • SELECT子句指明要查找的列、列表达式、*等,实现关系运算的投影操作。其中:*代表所有列 。 • FROM子句指明被查找的表或视图(VIEWS) 。 • WHERE子句说明查询的条件或多个表的连接条件。该条件表达式是由列名、函数名,运算符等组成。其中包括关系运算中的比较运算符和逻辑运算符 以下将从简到难介绍select语句的用法。

  5. 单表查询 • 功能 从单个表中查询一列或多列数据。 • 查询所有列和所有行(无条件查询) select * from 表/试图名 等价于 select col1,col2,col3,…,coln from 表/试图名 • 举例 • 从titles表中显示所有书籍的所有内容 • 从authors表中显示所有作者的所有内容 select * from titles select * from authors

  6. 单表查询 • 查询部分列 有选择的显示部分列信息(同关系运算中的投影) • 方法 select (列表达式1,列表达式1,…,列表达式1n) from 表/试图名 //显示结果中列的次序与选择列中排列一致 • 说明 • 列表达式可以是列名。 • 列表达式可以是常量、变量、函数及列参与的算术表达式。 • 举例 • 从表stores中查询所有商店的商店名称,地址,邮政编码。 Select stor_name , stor_address , zip From stores

  7. 举例 • 查询discounts表中的每种折扣的类型和值,并使每种折扣显示时增加1。 declare @v1 varchar(15) set @v1=‘增加后的折扣:’ select ‘折扣类型: ’, discounttype , @v1 , discount+10 from discounts 等同于 select ‘折扣类型: ’, discounttype ‘增加后的折扣:’, discount+10 from discounts

  8. 指定列标题 • 指定列标题 当没有特殊声明时,一般查询结果的标题为定义列时的列名。可以为显示结果定义其他标题。 • 方法 在选择列表达式中采用: • 列标题=列名 • 列名 列标题 • 列名 AS 列标题 • 举例 显示titles表中所有书籍的书编号、书名、价格并将标题改为 书编号、书名、价格。 Select title_id as 书编号 , title as 书名 , price as 价格

  9. 删除重复行 • 删除重复行 在查询时可能存在重复行,可以使用distinct选项从结果中删除重复行。 • 方法 在需要取消重复的列前使用distinct选项。 • 举例 从表SALES中,查询所有销售过书籍的商店编号 select distinct stor_id as 商店编号 from sales 从表SALES中,查询所有销售过书籍的商店编号,及戏相应数量 select distinct stor_id as 商店编号 , qty as 数量 from sales

  10. 限制查询结果行数 • 限制查询结果行数 缺省时查询的结果包含满足条件的所有行,若只显示部分,可以进行适当限制。 • 方法 使用TOP 行数 选项限制查询结果的行数。 • 举例 从SALES中显示前20条销售记录 select top 20 * from sales

  11. 条件查询 • 条件查询 关系运算中有选择操作,在select语句中使用条件查询实现,即实现查询满足一定条件的数据行(记录)。 • 方法 添加where字句,可采用比较、范围限定、集合判断、模式匹配、空值判断、条件连接等操作。(具体参见P143表6-1) • 格式 where 条件 注:where字句位于from字句后。 对于使用不同类型的条件,可以达到不同的查询效果,同时这些条件格式,也适用于check约束。

  12. 大小比较 • 大小比较 可对数值型、字符串、日期型等数据类型进行: >、<、>=、<=、=、<>、!>、!<等运算。 • 举例 查询titles表中价格高于10元的图书名、价格、版税 select title,price, royalty from titles where price>10 查询authors表中姓为Smith的作者姓,名、电话号码,地址 select au_lname , au_fname , phone , address 查询sales表中订单号不为P2121的所有销售,包括商店编号、书编号、订单号、数量 select stor_id, title_id , ord_num , qty form sales where ord_num <>’ P2121’

  13. 范围限定 • 范围限定 限定某列或列表达式的值在某种范围。(可以用比较运算和逻辑运算替代) 使用的运算符有:between…and…、not between…and…。 • 举例 查询titles表中价格高于10元小于100元的图书名、价格、版税 select title,price, royalty from titles where price between 10 and 100 查询titles表中价格不在10元~100元的图书名、价格、版税 select title,price, royalty from titles where price not between 10 and 100

  14. 集合判断 • 集合判断 可以用某列或列表达式的值是否在某集合作为选择条件。 使用的运算符有:in, not in 集合的各元素用‘,’分隔。 • 举例 从表SALES中查找订单号为:‘P2121’,’P3087a’,’ 423LL922’,’ A2976’的销售记录。 select * from sales where ord_id in (‘P2121’,’P3087a’,’ 423LL922’,’ A2976’) 从表SALES中查找所有订单号不为:‘P2121’,’P3087a’,’ 423LL922’,’ A2976’的销售记录。 select * from sales where ord_id not in (‘P2121’,’P3087a’,’ 423LL922’,’ A2976’)

  15. 字符串匹配 • 字符串匹配 当需要进行相似或不相似的比较时,可以采用字符串匹配运算。 匹配运算包括:like 、 not like。 比如:姓什么,地址中包含什么等 • 匹配符 单独的使用like 、 not like时,相当于=、<>,只有加上通配符,才能完成匹配运算。常用的通配符有: • ‘%’ 代表任意长度的字符串,如‘杨%’代表所有姓杨的人名称。 • ‘_’ 表示任意单个字符,如‘杨_明’代表所名称为‘杨某明’的人名称;

  16. 通配符 • ‘[]’ 表示指定范围内或指定字符串中的任意单个字符。如[0-9][0-9]表示包含两个数字的任意字符串;如0757- [0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9][0-9]表示佛山地区电话号码。 • ‘^’ 与‘[]’相反,表示不在指定范围内或指定字符串中的任意单个字符。

  17. 字符串匹配-举例 • 举例 从表employee从查询姓名第一各字母为‘D’的所有职员记录,包括所有列。 select * from employee where fname like ‘D%’ 从student表中查询所有名为‘高声’的所有学生记录,包括所有列。 select * from student where name like ‘%高声’ 查询titles表中图书编号以B或P字母开头的图书编号、书名 查询authors表中作者编号中间项是‘56’的作者编号,姓名

  18. 空值判断 • 空值判断 当要判断某列是否为NULL时,不能直接写成:列名=NULL,必须使用is null或is not null • 举例 查询titles中没有定价的图书编号、书名和价格 select title_id, title, price from titles where price is null 查询discount表中最低数量已确定的折扣类型、商店编号、最高数量和最低数量 select discounttype , stor_id , lowqty , highqty from discount where lowqty is not null

  19. 多重条件查询 • 多重条件查询 当where字句存在多个条件时,可以使用and(与)、or(或)逻辑运算来连接这些条件。 使用‘()’号来改变优先级 • 举例

  20. 结果排序 • 结果排序 若要将结果进行排序,可以使用order by字句。可选择升序、降序两种类型;可以是对单个列的排序,也可是多列的组合排序,还可是列表达式的排序等。 • 举例 select * from titles where price>10 order by price desc select * from titles order by type, price desc

More Related