200 likes | 393 Views
SQL 数据查询. SQL 语言的类型. SQL Structured Query Language Transact-SQL PL/SQL. 查询. 功能(与“关系运算”的关系) SELECT 语句功能强大。虽然表面上看来它只用来完成关系代数运算 “ 选择 ” ,但实际上它也可以完成其他两种关系运算 —“ 投影 ” 和 “ 连接 ” , SELECT 语句还可以完成统计并对数据进行排序。. SELECT 语句. 语法格式 SELECT [ALL/DISTINCT < 字段名 >[,< 字段名 >] …
E N D
SQL语言的类型 • SQL Structured Query Language • Transact-SQL • PL/SQL
查询 • 功能(与“关系运算”的关系) SELECT语句功能强大。虽然表面上看来它只用来完成关系代数运算“选择”,但实际上它也可以完成其他两种关系运算—“投影”和“连接”,SELECT语句还可以完成统计并对数据进行排序。
SELECT语句 • 语法格式 SELECT [ALL/DISTINCT <字段名>[,<字段名>]… FROM <表名或视图>[,<表名或视图>]… [WHERE <条件表达式>] [GROUP BY <列名1> [HAVING <条件表达式>]]… [ORDER BY <列名2> [ASC/DESC]] • 说明 • SELECT子句指明要查找的列、列表达式、*等,实现关系运算的投影操作。其中:*代表所有列 。 • FROM子句指明被查找的表或视图(VIEWS) 。 • WHERE子句说明查询的条件或多个表的连接条件。该条件表达式是由列名、函数名,运算符等组成。其中包括关系运算中的比较运算符和逻辑运算符 以下将从简到难介绍select语句的用法。
单表查询 • 功能 从单个表中查询一列或多列数据。 • 查询所有列和所有行(无条件查询) select * from 表/试图名 等价于 select col1,col2,col3,…,coln from 表/试图名 • 举例 • 从titles表中显示所有书籍的所有内容 • 从authors表中显示所有作者的所有内容 select * from titles select * from authors
单表查询 • 查询部分列 有选择的显示部分列信息(同关系运算中的投影) • 方法 select (列表达式1,列表达式1,…,列表达式1n) from 表/试图名 //显示结果中列的次序与选择列中排列一致 • 说明 • 列表达式可以是列名。 • 列表达式可以是常量、变量、函数及列参与的算术表达式。 • 举例 • 从表stores中查询所有商店的商店名称,地址,邮政编码。 Select stor_name , stor_address , zip From stores
举例 • 查询discounts表中的每种折扣的类型和值,并使每种折扣显示时增加1。 declare @v1 varchar(15) set @v1=‘增加后的折扣:’ select ‘折扣类型: ’, discounttype , @v1 , discount+10 from discounts 等同于 select ‘折扣类型: ’, discounttype ‘增加后的折扣:’, discount+10 from discounts
指定列标题 • 指定列标题 当没有特殊声明时,一般查询结果的标题为定义列时的列名。可以为显示结果定义其他标题。 • 方法 在选择列表达式中采用: • 列标题=列名 • 列名 列标题 • 列名 AS 列标题 • 举例 显示titles表中所有书籍的书编号、书名、价格并将标题改为 书编号、书名、价格。 Select title_id as 书编号 , title as 书名 , price as 价格
删除重复行 • 删除重复行 在查询时可能存在重复行,可以使用distinct选项从结果中删除重复行。 • 方法 在需要取消重复的列前使用distinct选项。 • 举例 从表SALES中,查询所有销售过书籍的商店编号 select distinct stor_id as 商店编号 from sales 从表SALES中,查询所有销售过书籍的商店编号,及戏相应数量 select distinct stor_id as 商店编号 , qty as 数量 from sales
限制查询结果行数 • 限制查询结果行数 缺省时查询的结果包含满足条件的所有行,若只显示部分,可以进行适当限制。 • 方法 使用TOP 行数 选项限制查询结果的行数。 • 举例 从SALES中显示前20条销售记录 select top 20 * from sales
条件查询 • 条件查询 关系运算中有选择操作,在select语句中使用条件查询实现,即实现查询满足一定条件的数据行(记录)。 • 方法 添加where字句,可采用比较、范围限定、集合判断、模式匹配、空值判断、条件连接等操作。(具体参见P143表6-1) • 格式 where 条件 注:where字句位于from字句后。 对于使用不同类型的条件,可以达到不同的查询效果,同时这些条件格式,也适用于check约束。
大小比较 • 大小比较 可对数值型、字符串、日期型等数据类型进行: >、<、>=、<=、=、<>、!>、!<等运算。 • 举例 查询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’
范围限定 • 范围限定 限定某列或列表达式的值在某种范围。(可以用比较运算和逻辑运算替代) 使用的运算符有: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
集合判断 • 集合判断 可以用某列或列表达式的值是否在某集合作为选择条件。 使用的运算符有: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’)
字符串匹配 • 字符串匹配 当需要进行相似或不相似的比较时,可以采用字符串匹配运算。 匹配运算包括:like 、 not like。 比如:姓什么,地址中包含什么等 • 匹配符 单独的使用like 、 not like时,相当于=、<>,只有加上通配符,才能完成匹配运算。常用的通配符有: • ‘%’ 代表任意长度的字符串,如‘杨%’代表所有姓杨的人名称。 • ‘_’ 表示任意单个字符,如‘杨_明’代表所名称为‘杨某明’的人名称;
通配符 • ‘[]’ 表示指定范围内或指定字符串中的任意单个字符。如[0-9][0-9]表示包含两个数字的任意字符串;如0757- [0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9][0-9]表示佛山地区电话号码。 • ‘^’ 与‘[]’相反,表示不在指定范围内或指定字符串中的任意单个字符。
字符串匹配-举例 • 举例 从表employee从查询姓名第一各字母为‘D’的所有职员记录,包括所有列。 select * from employee where fname like ‘D%’ 从student表中查询所有名为‘高声’的所有学生记录,包括所有列。 select * from student where name like ‘%高声’ 查询titles表中图书编号以B或P字母开头的图书编号、书名 查询authors表中作者编号中间项是‘56’的作者编号,姓名
空值判断 • 空值判断 当要判断某列是否为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
多重条件查询 • 多重条件查询 当where字句存在多个条件时,可以使用and(与)、or(或)逻辑运算来连接这些条件。 使用‘()’号来改变优先级 • 举例
结果排序 • 结果排序 若要将结果进行排序,可以使用order by字句。可选择升序、降序两种类型;可以是对单个列的排序,也可是多列的组合排序,还可是列表达式的排序等。 • 举例 select * from titles where price>10 order by price desc select * from titles order by type, price desc