1、内连接的安全性
(1) inner join 是ANSI sql-92 语法、等值联接是ANSI sql-89 的语法 ,两者已相同方式解释、在性能上没有差别
(2)但是强烈建议使用ANSI sql - 92 联接语法、因为它更安全、 当忘记写联接条件、sql-92 语法会报错,也就是没有ON 会报错、这种安全实际是编码习惯导致的
2、包含缺失值
2.1 需求
查询Tsql2102库中、Order表,要求20060101~20081231每天都有数据输出、对于没有包含订单的日期,以NulL 标记作为订单属性占位符输出
2.2 解决思路
(1)创建数字辅助表dbo.Nums,具有n 的列,将其填充整数 123.....,使用该表生成范围内所有日期的序列
select dateadd(day,n-1,‘20060101‘) as orderdatefrom dbo.Numswhere n <= datediff(day,‘20060101‘,‘20081231‘)+1order by orderdate;
(2) 通过Nums 和 Order 做左外连接即可
3.外部连接的逻辑顺序
(1)在单表查询中 from 、where 后面的子句具有“同时 *** 作”的特性,但是在外联接中,from 后面的表连接运算符,按从左往右的逻辑顺序计算
(2)由于逻辑顺序的存在,在外联结多张表是要考虑到拿NulL 去做比较的情况、NulL 做比较结果一定是UNKONWN,会被ON直接过滤掉
4、外连接使用count聚合引发的一个BUG
(1) 使用外连接,若果直接使用count(*)的话,会将null也计算其中
(2) 但是如果count(col) ,且col 是外部列就不会将NulL的记录计算进来
总结以上是内存溢出为你收集整理的sqlserver 联接查询的一些注意点全部内容,希望文章能够帮你解决sqlserver 联接查询的一些注意点所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)