SQL:Join 原来还可以这么用
来源:互联网 发布:nginx怎么配置ssl 编辑:程序博客网 时间:2024/06/11 18:33
用例子说话
declare @t table(id int,IPS varchar(20),IPE varchar(20),UCountry varchar(20),UAdd varchar(20))
insert into @t values(1,'0.0.0.0 ','0.255.255.255','IANA','CZ88.NET' )
insert into @t values(2,'1.0.0.0 ','1.255.255.255','IANA','CZ88.NET' )
insert into @t values(3,'2.0.0.0 ','2.255.255.255','IANA','CZ88.NET' )
insert into @t values(4,'3.0.0.0 ','3.255.255.255','美国','新泽西通用电气公司')
insert into @t values(5,'4.0.0.0 ','4.10.255.255 ','美国','CZ88.NET' )
insert into @t values(6,'4.11.0.0','4.11.255.255 ','美国','夏威夷' )
insert into @t values(7,'4.12.0.0','4.19.77.255 ','美国','CZ88.NET' )
declare @u table(IP varchar(20))
insert into @u
select '4.12.0.5'
union all select '3.48.5.5'
union all select '2.11.2.5'
union all select '6.11.2.5'
select
*
from
@u b, @t a
where
right('00'+ParseName(b.IP,4),3)+right('00'+ParseName(b.IP,3),3)+right('00'+ParseName(b.IP,2),3)+right('00'+ParseName(b.IP,1),3)
between
right('00'+ParseName(a.IPS,4),3)+right('00'+ParseName(a.IPS,3),3)+right('00'+ParseName(a.IPS,2),3)+right('00'+ParseName(a.IPS,1),3)
and
right('00'+ParseName(a.IPE,4),3)+right('00'+ParseName(a.IPE,3),3)+right('00'+ParseName(a.IPE,2),3)+right('00'+ParseName(a.IPE,1),3)
/*
IP id IPS IPE UCountry UAdd
-------------------- ----------- -------------------- -------------------- -------------------- --------------------
4.12.0.5 7 4.12.0.0 4.19.77.255 美国 CZ88.NET
3.48.5.5 4 3.0.0.0 3.255.255.255 美国 新泽西通用电气公司
2.11.2.5 3 2.0.0.0 2.255.255.255 IANA CZ88.NET
*/
这种情况使用是:inner join 内联接,内联接也是效率最高的一种联接;
但是当如果需要显示a表没有对应信息b表的所有数据的话,这样的联接就不可以了;
select
*
from
@u b
left join
@t a
on
right('00'+ParseName(b.IP,4),3)+right('00'+ParseName(b.IP,3),3)+right('00'+ParseName(b.IP,2),3)+right('00'+ParseName(b.IP,1),3)
between
right('00'+ParseName(a.IPS,4),3)+right('00'+ParseName(a.IPS,3),3)+right('00'+ParseName(a.IPS,2),3)+right('00'+ParseName(a.IPS,1),3)
and
right('00'+ParseName(a.IPE,4),3)+right('00'+ParseName(a.IPE,3),3)+right('00'+ParseName(a.IPE,2),3)+right('00'+ParseName(a.IPE,1),3)
/*
IP id IPS IPE UCountry UAdd
-------------------- ----------- -------------------- -------------------- -------------------- --------------------
4.12.0.5 7 4.12.0.0 4.19.77.255 美国 CZ88.NET
3.48.5.5 4 3.0.0.0 3.255.255.255 美国 新泽西通用电气公司
2.11.2.5 3 2.0.0.0 2.255.255.255 IANA CZ88.NET
6.11.2.5 NULL NULL NULL NULL NULL
*/
只能使用外联接,使用了外联接并牺牲了效率。
在此要多谢libin_ftsafe 的不吝赐教啊~~~
- SQL:Join 原来还可以这么用
- 数组原来还可以这么玩
- 『你不知道的位运算,原来还可以这么用』
- 单链表的反转,原来还可以反转的这么艺术
- as3的递归原来还可以这么写
- 原来可以这么写
- CSS原来还可以这样用
- 原来border还可以这样用
- php str_replace还可以这么用。。。厉害
- Java enum 枚举还可以这么用
- Java enum 枚举还可以这么用
- Java enum 枚举还可以这么用
- Java enum 枚举还可以这么用
- Java enum 枚举还可以这么用
- Java enum 枚举还可以这么用
- 原来还可以这样,原来还可以这样。原来还可以这样,原来还可以这样,原来还可以这样
- JSON解析的成长史——原来还可以这么简单
- 原来python开发后端服务器还可以这么简单(未完成)
- 用UTM构筑安全的小型企业网络
- DBMS_JOB 调用(不知是否正确)
- 透明窗口. 顶层窗口.总结
- MFC消息分类 (理论)
- java反射错误:object is not an instance of declaring class
- SQL:Join 原来还可以这么用
- Flex做的相册(Flex与net通信获取相片)
- 云计算比较:EC2, Mosso和GoGrid
- 你可以来这里加入我们的团队
- 就业理想 公司排名
- 修改Ext.DatePicker使得Ext.form.DateField只选择年月
- VC实现将程序最小化到托盘
- 如何检测浏览器是否禁用了javascript脚本
- 中小企业如何安装OSSIM