T-Sql(四)表关联和视图(view)

原文:T-Sql(四)表关联和视图(view)

  今天讲下T-sql中用于查询的表关联和视图,我们平时做项目的时候会遇到一些复杂的查询操作,比如有班级表,学生表,现在要查询一个学生列表,要求把学生所属班级名称也查询出来,这时候简单的select查询就不行了,需要关联班级表,因为学生是一定属于某一个班级的,所以关联的示例需要自关联。

  表关联(join)  

  下面列一些示例代码,帮助大家理解。

select t2.*         --表自关联
from Tree t1
inner join Tree t2
on t1.NO=t2.ParentNo
where t1.Name='Node1_2';

select * from tree      --子嵌套查询
where ParentNo = (select NO from tree where Name = 'Node1_2');

select * from tree
where parentNo in (select no from tree where Name = 'Node1_2');

  上面是表自关联,关键字inner,就是返回t1.NO=t2.ParentNo条件的所有t2表的数据,

  有表自关联,当然还有左关联,右关联,示例代码:

select t2.*         --左关联
from Tree t1
left join Tree t2
on t1.NO=t2.ParentNo
where t1.Name='Node1_2';

select t2.*         --右关联
from Tree t1
right join Tree t2
on t1.NO=t2.ParentNo
where t1.Name='Node1_2';

  视图View

  视图的关键字是View,就是一个查询集合,方便我们去查询数据,视图其实就是表,多表连接的表,我们查询的时候不需要反复的去拼接语句,直接查询视图就可以,方便我们的操作,当然一些简单的查询操作就没必要去创建视图了。

  示例代码:

create view Production.vw_Product
as
    select t1.* from Production.Product t1
    left outer join Production.ProductModel t2 on t2.ProductModelID=t1.ProductModelID
    left outer join Production.ProductSubcategory t3 on t3.ProductSubcategoryID=t1.ProductSubcategoryID
    left outer join Production.UnitMeasure t4 on t4.UnitMeasureCode=t1.SizeUnitMeasureCode and t4.UnitMeasureCode=t1.SizeUnitMeasureCode
    --order by t1.ProductID
    

  查询视图:

select *from Production.vw_Product

  表关联和视图都是比较简单的数据库操作,但也是比较常用的。大家好好练习。

  还有一些相关编程知识的整理,希望大家关注下。。。

 

时间: 2024-10-24 08:21:58

T-Sql(四)表关联和视图(view)的相关文章

sql 数据库表关联查询

问题描述 sql 数据库表关联查询 sql表关联查询出的结果想再次约束(where)取出结果如何做,如下图,图为已取出的结果,想将 publiction_set_id 的值为null的数据提出,怎么做? 解决方案 有两种可能,因为是左连接,可能左边的表有数据,右边的表没数据.另外一种,右边的表这个字段是null.所以最好的选择是在这个查询结果外层在加一个 select * from ( 你的上面SQL语句) ) a where publiction_set_id is null 解决方案二: a

sql-关于SQL多表关联的问题

问题描述 关于SQL多表关联的问题 我想知道多表关联在什么情况下会出现取出的行变多的情况? 就是在多表关联之后,什么情况下select出来的结果会比你本来希望查询到的结果多? 谢谢. 解决方案 SQL多表关联求和问题 解决方案二: 那要看你的查询条件是不是超过了你的期望,同时用内连接,而不是left join等 解决方案三: 关于你想知道的情况,你可以查询一下 "笛卡尔乘积".笛卡尔乘积就会导致取出的数据比我们需要的数据多的问题. 我们在表查询的时候,要注意避免出现笛卡尔乘积. 使用交

sql多表关联查询语句

#temptest1                 #temptest2     实现方法如下:  代码如下 复制代码 Update t1 Set t1 .age = t2.age From  #temptest1 t1 Join #temptest2 t2 On  t1.id = t2.id   (补充)Sql Server 2008 Merge命令写法: merge into #temptest1 t1 using(select age,id from #temptest2) t2 on

sql多表联查实例

  sql多表联查实例 下面提供四款sql多表关联查询的实例,个个效率不一样. select * from order_info as a ,ivrlog4ivrdlvinst as b where (a.saleorder=b.ext1_skill and b.start_date=@date1 and se_id='55' and b.ext1_skill!='') and convert(varchar(10),a.instime,112)=@date2 and max(a.instime

mpp-sql两表关联,两边字段类型不一致的问题。

问题描述 sql两表关联,两边字段类型不一致的问题. 两个表用id字段关联,主表大概4000w条数据,副表大概1.6亿条,id字段在主表为bigint类型,在副表为varchar类型,环境为db2的mpp,之前不知道存在类型不一致的情况,关联了不止十小时无果,改正类型不一致问题后,十多分钟出结果.两边的id也都是数字类型,我想知道为什么性能前后差别这么大,而且sql作为面向查询的语言,为什么需要我显式的转换数据类型? 解决方案 类型不一致怎么去关联 解决方案二: int和varchar的存储方式

Oracle\MS SQL Server Update多表关联更新

原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表   一.MS    SQL    Server   多表关联更新      sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来.虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就

MySQL千万级多表关联SQL语句调优

本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使千万级表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果).   需要优化的查询:使用explain      出现了Using temporary:      有分页时出现了Using filesort则表示使用不了索引,需要根据下面的技巧来调整语句      rows过多,或者几乎是全表的记录数:      key 是 (NULL):      possible_keys 出现过多(

sql-oracle 实现多表关联SQL脚本

问题描述 oracle 实现多表关联SQL脚本 A表: XH IDA NAME AGE 1 1 张三 20 2 2 李四 18 3 3 王五 19 4 4 lily 19 B表 XH IDB IDA 1 1 1 2 2 1 3 3 1 4 4 3 5 5 3 6 6 4 7 7 4 C表 XH IDC IDB 1 1 1 2 1 2 3 1 3 4 2 6 5 2 7 A表的IDA与B表的IDA有关系,B表的IDB与C表的IDB有关系 实现效果: XH IDA NAME AGE IDB IDC

sql-Oracle怎样分析多表关联SQL

问题描述 Oracle怎样分析多表关联SQL 两三个表的关联查询还能明白,但是四个以上的关联感觉搞不懂,请问多表关联有什么规律吗?比如 SELECT * FROM XUTEST LEFT JOIN XUTEST2 LEFT JOIN XUTEST3 ON XUTEST3.SUPID=XUTEST2.SUPID ON XUTEST3.SUPID=XUTEST.SUPID 与 SELECT * FROM XUTEST LEFT JOIN XUTEST2 ON XUTEST2.SUPID=XUTEST