扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
派生表:比如要查找一个叫张铁牛的人的信息,我们知道他是男性,为了缩小查找范围我把所有的男性都找出来,然后从这些男性中里面再去找张铁牛。这里男性的集合就相当于派生表,转成sql语句是这样select 姓名,住址,身份证 from (select * from 表名 where 性别='男性') t where 姓名='张铁牛'(这里只是为了举例子),这里的t这个数据集就是派生表,它是虚表,在数据库中不存在的,是我们构建的,在这里的目的是为了缩小数据的查找范围。
创新互联主要从事网站建设、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务康县,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
相关子查询:子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。比如:select * from 外表 where 姓名 in (select 姓名 from 内表 where 外表.姓名=内表.姓名),你看在括号里的sql语句,是与外表关联的。这里顺便说一下非相关子查询,还是以上面为例,如:select * from 外表 where 姓名 in (select 姓名 from 内表 where 外表.姓名='张铁牛'),你看这个语句中括号里的sql语句,它是单独执行的,与外表没有任何关联,它只执行一次,执行完后将结果集传递给外部查询使用。
这里只是表面上描述了一下,内部还有其他区别,lz需要通过联系体会,有问题再追问,望采纳。
into #table_1
from (select * from tab1 union all select * from tab2) as tmp
上面建的是临时表
sqlserver的这样写:
insert into table_1 select *
from (select * from tab1 union all select * from tab2) as tmp
差是except 交是intersection
UNION的语法格式为:
SELECT COLUMN_NAME
FROM TABLE_NAME
WHERE CONDITION
UNION [ALL]
SELECT COLUMN_NAME
FROM TABLE_NAME
WHERE CONDITION
[, ...n ]
其中COLUMN_NAME为查询字段的名称。字段的定义(UNION 运算的一部分)不必完全相同,但它们必须能够通过隐式转换相互兼容。UNION 指定组合多个结果集并返回为单个结果集。ALL表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。
EXCEPT和INTERSECT运算符的使用语法如下所示。
SELECT COLUMN_NAME
FROM TABLE_NAME
WHERE CONDITION
{ EXCEPT | INTERSECT }
SELECT COLUMN_NAME
FROM TABLE_NAME
WHERE CONDITION
[,...n ]
运算符的查询选择列表中的所有对应项必须是相容的。有关更多信息,参见 SQL Reference 中的数据类型相容性表。
ORDER BY 子句(如果使用该子句的话)必须放在最后一个带有集合运算符的查询后面。对于每个运算符来说,如果列的名称与查询的选择列表中对应项的名称相同,则该列名只能在 ORDER BY 子句中使用。
在具有相同数据类型和相同长度的列之间进行的运算会产生一个具有该类型和长度的列。针对 UNION、EXCEPT 以及 INTERSECT 集合运算符的结果,参见 SQL Reference 中结果数据类型的规则。
--先把表1和表2的solver合并起来,再分别和表1,表2做连接
With T
As
(
Select solver From 表1
union
Select solver From 表2
)
Select T.solver,Isnull(A.amount1,0) As amount1,isnull(B.amount2,0) As amount2 From T
Left Join 表1 A on T.solver=A.solver
Left Join 表2 B on T.solver=B.solver
你指的是储存集合的容器吧,SqlServer里一边用表变量或者临时表
1、查看表和试图
SELECT * FROM sys.objects WHERE object_id = object_id('表名或视图名')
在sqlserver中一般可通过查询sys.objects系统表来得知结果,不过可以有更方便的方法
如下:
if object_id('tb_table') is not null
print 'exist'
else
print'not exist'
如上,可用object_id()来快速达到相同的目的,tb_table就是我将要创建的资源的名称,所以要先判断当前数据库中不存在相同的资源
object_id()可接受两个参数,第一个如上所示,代表资源的名称,上面的就是表的名字,但往往我们要说明我们所要创建的是什么类型的资源,
这样sql可以明确地在一种类型的资源中查找是否有重复的名字,如下:
if object_id('tb_table','u') is not null
print 'exist'
else
print'not exist'
第二个参数 "u" 就表示tb_table是用户创建的表,即:USER_TABLE地首字母简写
查询sys.objects中可得到各种资源的类型名称(TYPE列),这里之举几个主要的例子
u ----------- 用户创建的表,区别于系统表(USER_TABLE)
s ----------- 系统表(SYSTEM_TABLE)
v ----------- 视图(VIEW)
p ----------- 存储过程(SQL_STORED_PROCEDURE)
2、查看表的列名
select * from syscolumns where id=object_id('表名') and name='列名'
3、查看数据库
select * from sys.databases where name = 'student'
4、查看备份设备
"select * from sys.backup_devices where name ='backupdb'
(添加备份设备:exec sp_addumpdevice 'disk','backupdb','d:\\backup\\backupdb.bak')
5、查看数据文件
select name, physical_name dbfile from sys.master_files where database_id=db_id('student')
master数据库中sysdatabases表(是sqlserver中所有的数据库的库名) :
如果你要查询的是所有数据库(用户/系统):
select * from master..sysdatabases
如果你要查询的是用户数据库,则使用:
select * from master..sysdatabases where dbid 4
如果你要查询的是系统数据库,只需要把where字句改为dbid 4即可。
6、查看执行的sql语句
SELECT cacheobjtype,objtype,usecounts,sql
from sys.syscacheobjects where sql not like'%cach%' and sql not like '%sys.%'
2.对应数据库中sysobjects表(反应的是相应数据库中所有的对象):
这个表的用处是最大的,因为它里面存放的有:表(系统/用户)、存储过程(系统/用户)、视图、主键、外键等。
这里就不一一说明了。
比如你sqlserver中有个数据库名叫 test,如果要查询该数据库中的所有表对象:
select * from test..sysobjects where type = ’u’ or type = ’s’
这里的type = ’u’是表示用户表对象,type = ’s’是系统表对象,怎样单独查询用户表对象或者系统表对象就不用说了吧。
如果你要查询的是存储过程当然也分了系统和用户了:
这个是查询数据库中所有存储过程
select * from test..sysobjects where type = ’p’
如果你要查询的是用户存储过程则加上 and category 2 即可。
查询系统存储过程就不用说了吧(category = 2 谁不知道。。。)
查询视图与查询存储过程一样,比如:
你查询的是数据库中所有视图
select * from test..sysobjects where type = ’v’
如果你要查询的是用户视图则加上 and category 2 即可。
其他的就不说了,就把 它们的type给大家说下:
type = ’ pk’ 表示主键。
type = ’ d’ 外键引用。
type = ’uq’ 唯一索引。
下面附录一些常用系统表
名称 地址 说明
sysaltfiles 主数据库 保存数据库的文件
syscharsets 主数据库 字符集与排序顺序
sysconfigures 主数据库 配置选项
syscurconfigs 主数据库 当前配置选项
sysdatabases 主数据库 服务器中的数据库
syslanguages 主数据库 语言
syslogins 主数据库 登陆帐号信息
sysoledbusers 主数据库 链接服务器登陆信息
sysprocesses 主数据库 进程
sysremotelogins主数据库 远程登录帐号
syscolumns 每个数据库 列
sysconstrains 每个数据库 限制
sysfilegroups 每个数据库 文件组
sysfiles 每个数据库 文件
sysforeignkeys 每个数据库 外部关键字
sysindexs 每个数据库 索引
sysmenbers 每个数据库 角色成员
sysobjects 每个数据库 所有数据库对象
syspermissions 每个数据库 权限
systypes 每个数据库 用户定义数据类型
sysusers 每个数据库 用户
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流