在写SQL语句的时候,若where条件是判断用户不在某个集合当中,我们习惯使用 where 列名 not in (集合) 子句,这种写法本身没有问题,但实践过程中却发现很多人在写类似的SQL语句时,写的代码存在隐患,而这种隐患往往难以发现. 1. 存在隐患的写法 首先,我们来评估一条简单的SQL语句的输出结果.语句如下: , null) 简单,输出结果是1嘛. 错!答案是没有输出结果. 为什么会这样?数据库管理系统在执行查询之前,会对上面语句进行简单的转化,转化之后的语句如下: != null…
一.介绍 聚合函数如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多条记录上.而通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用.当你指定 GROUP BY region 时,只有属于同一个region的一组数 据才返回一个值. HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前 HAVING子句在聚合后对组记录进行筛选.…
一.where和on的区别 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户.  在使用left jion时,on和where条件的区别如下:   1.on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录.   2.where条件是在临时表生成好后,再对临时表进行过滤的条件.这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉.   假设有两张表: 表1:tab1 id size…
摘要: 介绍在多表关联SQL语句中,过滤条件放在on和where子句中的区别--inner join中没区别,外连接就不一样. 综述   蚂蚁金服的一道SQL面试题如下:SQL语句中,过滤条件放在on和where子句中的区别.当时满脑子是left join和inner join等,觉得没区别啊!细思极恐,故梳理一下. 过滤条件放在on和where中的区别   数据库在通过连接两张或多张表来查询记录时,都会先通过join on子句生成一张中间的临时表,然后再在临时表中通过where子句过滤数据并将…
sql语句中----删除表数据drop.truncate和delete的用法 --drop drop table  tb   --tb表示数据表的名字,下同 删除内容和定义,释放空间.简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表, 例如:一个班就是一个表,学生就是表中的数据,学生的职务就是定义 drop table class,就是把整个班移除.学生和职务都消失 ---truncate truncate table tb 删除内容.释放空间但不删除定义.与drop不同的是,…
转自:http://blog.163.com/yuer_d/blog/static/76761152201010203719835 SQL语句中Group by语句的详细介绍                                                一.创建数据表(表名:Sales)                        Create table Sales(ID numeric(28,0) identity,InvNo char(8),InvDate datetim…
原文:SQL点滴35-SQL语句中的exists 比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID FROM Orders o WHERE o.CustomerID=c.CustomerID) 这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定…
sql语句进行 like和in 参数化,按照正常的方式是无法实现的 我们一般的思维是: Like参数化查询:string sqlstmt = "select * from users where user_name like '%@word%' or mobile like '%@word%'";SqlParameter[] Parameters=new SqlParameter[1];Parameters[0] = new SqlParameter("@word"…
sql语句中left join.right join 以及innerjoin之间的使用与区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录  right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 左连接和右连接的区别在于 以哪个表为主(主表中的数据都会出现在表中) 举例如下:  --------------------------------------------…
为了防止程序SQL语句错误以及SQL注入,单引号必须经过处理.有2种办法: 1.使用参数,比如SELECT * FROM yourTable WHERE name = @name; 在C#中使用SqlParameter parameter = new SqlParameter("@name", objValue);来添加参数,懒得写SqlDbType这东西了,因为不写也完全可以,只需要参数名和值. 在JAVA中就是用预处理PreparedStatement来添加参数. 2.如果不用参数…