--表数据查询--
--数据的基本查询--
--数据简单的查询--
select * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式]
例:
use 商品管理数据库
go
select * from 商品信息表
select 商品编号,商品名称,产地 from 商品信息表
selelct * from 商品信息表 where 产地='辽宁沈阳'
理解例子
--关键字辅助查询--
--1)distinct关键字 (用来消除查询结果中的重复行,使用时紧跟在select命令后)--
select distinct * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式]
例:
use 商品管理数据库
go
select distinct 产地 from 商品信息表
理解例子
--2)top关键字 (用来查找结果中前n条或前n%条记录,用法:top n | n percent,使用时紧跟在select命令后)--
select top n | n percent * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式]
例:
use 商品管理数据库
go
select top 3 * from 商品信息表 --查询结果的前3条记录
select top 30 percent * from 商品信息表 --查询结果的30%条记录
--3)between...and...关键字 (用来查找结果在一定范围内的记录,使用时放于where后面,作为筛选条件)--
字段名[not] between 低值 and 高值 --加"not"表示对满足between...and...关键字的查找结果取反值
例:
use 商品管理数据库
go
selelct * from 库存信息表 where 库存数量 between 100 and 200 --查询"库存信息表"中"库存数量"在100到200之间的记录
--4)in 关键字 (用来查找结果为指定值的记录,使用时放于where后面,作为筛选条件)--
字段名[not] int (值1,值2,值3,...) --加"not"表示对满足in关键字的查找结果取反值
例:
use 商品管理数据库
go
selelct * from 库存信息表 where 库存数量 in(100,200) --查询"库存信息表"中"库存数量"为100或者200的记录
--5)like 关键字 (用来实现表示一定范围的模糊查询,主要用于字符型字段,使用时放于where后面,作为筛选条件)--
字段名 [not] like '<字符表达式>' --加"not"表示对满足like关键字的查找结果取反值
例:
use 商品管理数据库
go
select * from 客户信息表 where 客户姓名 like '_小%' --查询"客户信息表"中"客户姓名"满足筛选条件'_小%'的记录
--6)in null 关键字 (用来查询字段中是否包含空值,使用时放在where后面,作为条件筛选)--
字段名 is null --is不可以用"="代替,null也不能用"0"或空格等代替
例:
use 商品管理数据库
go
selelct * from 客户信息表 where 邮箱 is null
--数据的统计查询--
-- 聚合函数查询--
count( * | 字段名) --统计数据表中的数据总数
sum( 表达式 | 字段名) --计算表达式或字段名中数据的和,表达式或字段名的数据类型要求是数值型
avg( 表达式 | 字段名) --计算表达式或字段名中数据的平均值,表达式或字段名的数据类型要求是数值型
max( 表达式 | 字段名) --求出表达式或字段名中数据的最大值,表达式或字段名的数据类型可以是数值型、字符型或日期时间型
min( 表达式 | 字段名) --求出表达式或字段名中数据的最小值,表达式或字段名的数据类型可以是数值型、字符型或日期时间型
--为查询结果重命名的3种方法:--
原字段名 '新字段名'
原字段名 as '新字段名'
'新字段名'=原字段名
例:
use 商品管理数据库
go
select COUNT(*),SUM(进货数量),AVG(进货金额),MAX(进货金额),MIN(进货金额) from 进货信息表
select COUNT(*)as'总记录',SUM(进货数量)as'进货数量和',AVG(进货金额) '进货金额平均数',MAX(进货金额) '进货金额最大值','进货金额最小值'=MIN(进货金额) from 进货信息表
--查询结果排序 (order by 语句用于实现排序操作,可以出现在from或者where语句的后面)--
order by 字段名1 [,字段名2, ...] [asc | desc] --加asc表示升序,加desc表示降序,默认升序,关键字asc可以省略
例:
use 商品管理数据库
go
select*from 进货信息表 order by 进货数量 desc --查询进货信息表中的所有字段,并将进货数量进行降序排序
--查询结果分组小计--
--1)group by...语句 --使用时可出现在from语句或者where语句后面
group by 字段名列表 [ having 条件表达式] --"字段名列表"表示按该字段分组。通常在select语句后面加聚合函数来表示求值小计,select语句后的字段名要么放在聚合函数中要么放在group by语句中,否则出错。having对结果做进一步的条件筛选,可加聚合函数
例:
use 商品管理数据库
go
select 进货日期,SUM(进货数量)as'进货数量和',SUM(进货金额)as'进货金额和' from 进货信息表 group by 进货日期
select 商品编号,SUM(进货数量)as'进货数量和' from 进货信息表 group by 商品编号 having SUM(进货数量)>30
--2)compute...by...语句 --使用时必须放在order...by...语句后面配合使用,表示先排序(分组),再小计
compute 聚合函数列表 by 被分组字段名 --compute...by...语句中by后面的分组字段必须与order...by...语句中by后面的排序字段相同
例:
use 商品管理数据库
go
select * from 进货信息表 order by 进货日期 compute SUM(进货数量),SUM(进货金额)by 进货日期
--数据的高级查询--
--多表连接查询--
--笛卡尔积查询
select * from A,B --A,B为两张表
--条件连接 (多表连接)
select 字段名列表 from 表1,表2,表3,... where 表1.的公共字段=表2.的公共字段 and 表2.的公共字段=表3.的公共字段 ... ... --select后面跟随被查询的字段名,有公共字段需指明是那张数据表。一定要有where条件,表与表的公共字段即为连接媒介,通常n张表的连接查询至少有n-1个连接条件支撑
例:
use 商品管理数据库
go
select 客户信息表.客户编号,客户姓名,商品编号,销售日期 from 客户信息表,销售信息表 where 客户信息表.客户编号=销售信息表.客户编号 --查询客户购买信息 例:
use 商品管理数据库
go
select 客户信息表.客户编号,客户姓名,商品信息表.商品编号,商品名称,销售金额,商品类型名
from 客户信息表,商品信息表,销售信息表,商品类型表
where 客户信息表.客户编号=销售信息表.客户编号 and 商品信息表.商品编号=销售信息表.商品编号 and 商品信息表.商品类型编号=商品类型表.商品类型编号 --查询客户购买信息
理解例子
--1)内连接(条件连接的一种)
select * | 字段列表 from 数据表1 [inner] join 数据表2 on 连接条件表达式 [inner] jion 数据表3 on 连接条件表达式 ... [where 条件表达式] --实现两张以上表连接时,按照数据表1连接数据表2,数据表2连接数据表3的顺序依次相连
例:
use 商品管理数据库
go
select 客户信息表.客户编号,客户姓名,商品信息表.商品编号,商品名称,销售金额,商品类型名
from 客户信息表
join 销售信息表 on 销售信息表.客户编号=客户信息表.客户编号
join 商品信息表 on 商品信息表.商品编号=销售信息表.商品编号
join 商品类型表 on 商品类型表.商品类型编号=商品信息表.商品类型编号 --查询客户购买信息
理解例子
--外连接
--1)左外连接 (即以左表为主表,用主表中的每条记录与右表中的每条记录连接组合,满足条件和不满足条件的记录都会出现在结果中,不满住条件的记录用空值填补)
select 字段名列表 from 表1 left join 表2 on 表1.公共字段=表2.公共字段 --表1为主表,on关键字表示连接条件
例:
select*from A.学号,姓名,课程名
from A left join B
on A.学号=B.学号 例:
use 商品管理数据库
go
select 客户信息表.客户编号,客户姓名,商品编号,销售日期
from 客户信息表 left join 销售信息表
on 客户信息表.客户编号=销售信息表.客户编号
理解例子
--2)右外连接 (即以右表为主表,用主表中的每条记录与左表中的每条记录连接组合,满足条件和不满足条件的记录都会出现在结果中,不满住条件的记录用空值填补)
select 字段名列表 from 表1 right join 表2 on表1.公共字段=表2.公共字段 --表2为主表,on关键字表示连接条件
例:
use 商品管理数据库
go
select 客户信息表.客户编号,客户姓名,商品编号,销售日期
from 销售信息表 right join 客户信息表
on 客户信息表.客户编号=销售信息表.客户编号
--3)全外连接 (即将左表中所有记录分别与右表中每一条记录连接,满足条件和左右表中不满足条件的记录都会出现在结果中,不满住条件的记录用空值填补)
select 字段名列表 from 表1 full join 表2 on 表1.公共字段=表2.公共字段 --左右表不分主次,相互连接,表1表2位置可以互换,on关键字表示连接条件
例:
use 商品管理数据库
go
select A.学号,姓名,课程名
from A full join C
on A.学号=C.学号
--自连接 (指数据表与其自身实现连接查询操作,也是多表连接的一种形式)
from 数据表名 表别名 [, ...] 或者 from 数据表名 as 表别名 [, ...] --表别名在使用from语句查询数据表时使用,用as关键字指定表别名,可以用空格。可以为多张数据表指定别名,可以为一张数据表指定多个别名,即为一张数据表制作多个副本
例:
use 商品管理数据库
go
select distinct a.商品编号,a.客户编号 from 销售信息表 a, 销售信息表 as b where a.客户编号=b.客户编号 and a.商品编号 < > b.商品编号
--子查询(子查询存在于查询语句的嵌套中)--
--in运算子查询
select * | 字段名[,字段名2, ...] from 数据表名 where 条件表达式 in (select * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式])
例:
use 商品管理数据库
go
select 客户姓名,联系电话 from 客户信息表 where 客户编号 in (select 客户编号 from 销售信息表 where 销售日期='2012-12-11') --查询查在2012年12月11日购买商品的客户姓名和联系电话
--比较子查询 (指主查询的where条件中使用比较运算符与子查询构成查询条件,程序先执行子查询,与in运算符不同的是,比较运算符后面的子查询得到的结果只是一个值,而非一个集合)
(常用比较运算符:=,>,>=,<,<=,<>,!=,!>,!<)
例:
use 商品管理数据库
go
select 商品类型编号,商品名称 from 商品信息表 where 商品编号 in (select 商品编号 from 销售信息表 where 销售数量< (select AVG(销售数量) from 销售信息表))
--exists运算子查询 (exists表示"存在",它后面的子查询不产生查询结果,而是产生一个逻辑值true或者false,当字查询有纪录被查找出结果为true,反之为false,只有子查询结果为true时才显示结果)
例:
use 商品管理数据库
go
select 客户姓名,联系电话 from 客户信息表 where exists (select * from 销售信息表 where 客户编号=客户信息表.客户编号)
注:"--"可看成说明或者注释文本