zoukankan      html  css  js  c++  java
  • sqlserver 联接查询的一些注意点

    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 orderdate
    from dbo.Nums
    where n <= datediff(day, '20060101', '20081231')+1
    order 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的记录计算进来

  • 相关阅读:
    OpenUrl 的跨平台实现
    通用性站点管理后台(Bee OPOA Platform)
    使用Lucene.net提升网站搜索速度整合记录
    ASP.NET MVC相关
    LeetCode:Copy List with Random Pointer
    ASP.NET交互Rest服务接口(Jquery的Get与Post方式)
    How to Prevent Cross-Site Scripting Attacks
    高性能网站建设指南
    异常
    soket.io.js + angular.js + express.js(node.js)
  • 原文地址:https://www.cnblogs.com/dehigher/p/10662038.html
Copyright © 2011-2022 走看看