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,'') as orderdate
from dbo.Nums
where n <= datediff(day, '', '')+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的记录计算进来
sqlserver 联接查询的一些注意点的更多相关文章
- SqlServer 高级查询
高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student; --all 查询所有 select all sex from ...
- SqlServer 一个查询语句以致tempdb增大55G (转载)
SqlServer 一个查询语句导致tempdb增大55G 今天操作着服务器,突然右下角提示“C盘空间不足”! 吓一跳!~ 看看C盘,还有7M!!!这么大的C盘空间怎么会没了呢?搞不好等下服务器会动不 ...
- 【T-SQL基础】02.联接查询
概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...
- 浅谈T-SQL中的联接查询
引言 平时开发时,经常会使用数据库进行增删改查,免不了会涉及多表联接.今天就简单的记录下T-SQL下的联接操作. 联接类型及其介绍 在T-SQL中联接操作使用的是JOIN表运算符.联接有三种基本的类型 ...
- SQLServer中查询的数字列前面补0返回指定长度的字符串
SQLServer中查询的数字列前面补0返回指定长度的字符串: 如: 角本如下: /****** Script for SelectTopNRows command from SSMS ******/ ...
- SQLServer分页查询存储过程
项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1, ...
- SQLServer 分组查询相邻两条记录的时间差
原文:SQLServer 分组查询相邻两条记录的时间差 首先,我们通过数据库中表的两条记录来引出问题,如下图 以上为一个记录操作记录的表数据.OrderID为自增长列,后面依次为操作类型,操作时间,操 ...
- LINQ to Sql系列二 简单查询和联接查询
这一篇文章主要总结LINQ to sql的简单查询(单表查询)和联接查询(多表查询) 单表查询 需求是我们要输出TClass表中的结果.使用了from-in-select语句,代码如下: public ...
- ibatis中多表联接查询
目前,我在做项目的时候,用到了spring + struts2 +ibatis 框架.平时用到的都是一张简单的表,来进行数据的增.删.改.查.而现在突然需要用到其它的一张表,或多张表进行联接查询 ...
随机推荐
- php 语法错误定位 try catch Throwable
try { } catch (Exception $ex) { // 计算错误 } catch (Throwable $ex) { // 语法错误,致命错误 } Throwable { ...
- jmeter断言之响应code:200
因为Jmeter只要检测到网页的响应,就认为是Pass而并不管当前网页内容的正确性.在进行压力测试时,为了检查Web服务器返回的网页是否正确,我们可以设置断言,这些断言是验证网页上是否存在指定的Tex ...
- 白手起家Django项目发布下篇_Django项目nginx部署
上一篇完成了python的安装,接下来安装python的依赖包和项目的依赖包 1. python-devel 命令:yum -y install python-devel 安装Django1.8.2 ...
- NO23 Linux正则表达式结合三剑客企业级实践--取IP
企业实践: 一.取IP的方法(用三剑客): grep: awk: sed:虽有三种,但是思路是一样的,用到正则有些表达细节不一样而已. 分析: sed***: 课堂试题: |sed -nr 's#^. ...
- windows编程-socket
server部分 ,Initialize Winsock. ,Create a socket. ,Bind the socket. ,Listen on the socket for a client ...
- C++面试常见问题——16函数模板的使用
函数模板的使用 函数模板在使用之前必须在外部对函数模板进行初始化. 函数模板的实例化包含两中 1.隐式实例化: template <class T> //没有: T Fun(T a,T b ...
- docker学习笔记-02:docker常用命令
一.帮助命令: 1.查看版本:docker version 2.查看信息:docker info 3.查看帮助信息:docker --help 二.镜像命令: (一).查看已有镜像: 1.命令:doc ...
- mysql 分组查询入门
- Oracle 建库
Oracle得安装就不多说了 不过还是建议直接去官网下 其他渠道可能会导致安装问题 具体自己慢慢体会吧 ! 下面主要说下怎么用Oracle建库并且建用户角色 Database configur ...
- 基于springboot实现Java阿里短信发送
1.接口TestController import java.util.Random; import com.aliyuncs.DefaultAcsClient; import com.aliyunc ...