SQL Server 的表数据简单操作(表数据查询)

时间:2024-03-06 15:39:17


--表数据查询--
--数据的基本查询--

--数据简单的查询--
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 客户编号=客户信息表.客户编号)

 

 


 注:"--"可看成说明或者注释文本