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
终极目标:世界大同