SQL 自连接

   SQL 自连接

     自连接的本质还是两个表的连接(内存里面只存了一份,另外一份是这个的引用),从看执行计划可以看出。就是对同一行数据,可以反应层次关系的,大部分时候都是有父子关系的。

     简单例子如下,你要看哪个经理管着谁,就用这种做法。

CREATE TABLE Emp(
  empid INT PRIMARY KEY,
  name VARBINARY(50),
  mgrid INT 
)

ALTER TABLE dbo.Emp
ALTER COLUMN name VARCHAR(50)

Insert into Emp(empid,name,mgrid)

values (1001,'zhangzhen',1001); 
Insert into Emp(empid,name,mgrid)values (1002,'Deepti',1001);

Insert into Emp(empid,name,mgrid)values (1003,'Amit',1001);

Insert into Emp(empid,name,mgrid)values (1004,'Sandy',1002);

Insert into Emp(empid,name,mgrid)values (1005,'Ankit',1003);

Insert into Emp(empid,name,mgrid)values (1006,'Kapil',1002);

    经典例子:公交站点和线路

----------R1:s1->s2->s3->s4->s5
----------R2:s6->s7->s2->s8
----------R3:s8->s9->s10

按照上面的关系,插入到表中。

  

 --查询直达线路数据(不用换乘)
CREATE
PROC QueryTo(@startStop VARCHAR(32),@endStop VARCHAR(32)) AS BEGIN SELECT a.Stop AS 起始站点 , b.Stop AS 目的站点 , a.Route AS 乘坐线路 , b.Postion - a.Postion AS 经过站点数 FROM dbo.Stop_Route a , dbo.Stop_Route b WHERE a.Route = b.Route AND a.Postion < b.Postion AND a.Stop =@startStop AND b.Stop =@endStop END

 

posted @ 2018-01-09 09:06  GDOUJKZZ  阅读(536)  评论(0编辑  收藏  举报