1.exists(xxxxx)后面的子查询被称做相关子查询, 他是不返回列表的值的
(只是返回一个ture或false的结果)
2.当in和exists在查询效率上比较时,in查询的效率快于exists的查询效率
(not exists查询的效率远远高与notin查询的效率。)
执行顺序如下:
1.首先执行一次外部查询
2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。
3.使用子查询的结果来确定外部查询的结果集。
如果外部查询返回100行,SQL<wbr><wbr>就将执行101次查询,一次执行外部查询,然后为外部查询返回</wbr></wbr>
为了理解,举一下例子:(参考:http://www.cnblogs.com/cyjch/archive/2012/03/23/2413525.html)
exists (sql 返回结果集,为真)
not exists (sql 不返回结果集,为真)
表A
ID NAME
1 A1
2 A2
3 A3
表B
ID AID NAME
1 1 B1
2 2 B2
3 2 B3
表A和表B是1对多的关系 A.ID => B.AID
SELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
1 A1
2 A2
原因可以按照如下分析
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
---> SELECT * FROM B WHERE B.AID=1有值,返回真,所以有数据
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
---> SELECT * FROM B WHERE B.AID=2有值,返回真,所以有数据
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)
---> SELECT * FROM B WHERE B.AID=3无值,返回假,所以没有数据
NOT EXISTS 就是反过来
SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
3 A3
/********除法运算及其SQL实现 *******/
分享到:
相关推荐
多数DBMS不需要在单条SQL语句后加分号,但特定的DBMS可能必须在单条SQL语句后加分号。 SQL语句的最后一句要以 “;”号结束 二、写子句顺序 Select column,group_function From table [Where condition] ...
3.exists 判断这个元素是否存在,exists(x) 4.extend方法 不带参数加一个元素 extend(x)加x个元素 extend(x,y) 5.first属性,返回第一个元素的下标 6.last 属性,赶回最后一个元素的下标 7.limit属性 ...
T-SQL中级教程,包括PPT、学习笔记及课后作业,非常经典的教程 --建库之前先建路径的代码 exec xp_cmdshell'mkdir d:\mydata', --也可以用exec xp_cmdshell'md d:\mydata' no_output exec xp_cmdshell'rd d:\...
mysql 最详细的笔记整理 需要的童鞋莫错过! 一.数据库 1.创建数据库 create database [if not exists] db_name [character set xxx] [collate xxx] *创建一个名称为mydb1的数据库。 create database mydb1;...
二、常用SQL: ... SQL Server的: IF EXISTS (SELECT name FROM sysobjects WHERE name = '表名' AND type = 'U') DROP TABLE 表名; Oracle的: create or replace table 表名 ...; -- 直接写建表语句
三、 SQL语句的处理过程 7 3.1 SQL语句处理过程 7 3.2处理一条select语句 7 四、 where子句 8 4.1 where子句后面可以跟什么 8 4.2语法和执行顺序 8 4.3字符串是大小写敏感的,在比较时严格区分大小写 8 4.4 where...
1,exists和in的理解(参考//www.jb51.net/article/28922.htm) exists:如果子查询中包括某一行,那么就为TRUE in:如果操作数为TRUE等于表达式列表中的一个,那么就为TRUE exists总是搞得不太明白 select 。...
if exists(select 1 from inserted) update B set Name=(select Name from inserted) where Name=(select Name from deleted) else delete B where Name=(select Name from deleted) end go 级联更新和级联删除...
MySOL SQL语法 本节用到的架构: 特点: SQL语句可以单行或多行书写,以;结尾 可以使用空格和缩进增强语句的可读性 MySQL的SQL语句不区分大小,关键字建议大写 ...create database if not exists 数据库名
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
问题的背景:在实际使用MySQL时,如果访问量比较大,那么很可能会出现大量Locked状态的进程,但是却不能方便的识别是哪条SQL引起的问题,很多人遇到此类问题时,多半是通过PhpMyAdmin查询可疑SQL,然后KILL掉,但...
运行截图如下: 这里对应的数据库内容如下: 此处的关键代码如下: 通过sql语句去做,这里...32312 IF NOT EXISTS*/`jap_repository_demo` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */; USE
{12.10.1}exists}{165}{subsection.12.10.1} {12.11}集合操作}{165}{section.12.11} {12.11.1}union}{166}{subsection.12.11.1} {12.11.2}intersect与minus}{166}{subsection.12.11.2} {12.11.3}join}{166}{...
根据之前的MYSQL学习笔记(2)的学习,通过一些小练习来加深对索引的理解。 建下表并插入数据最后建立相关索引: CREATE TABLE IF NOT EXISTS `test`( id int PRIMARY KEY auto_increment, c1 char(10), c2 char(10), ...
exist 存在, 发生 [ig'zist] '(SQL关键字 exists) extends (关键字) 继承、扩展 [ik'stend] false (关键字) final (关键字) finally (关键字) fragments 段落; 代码块 ['frægmәnt] FrameWork [java] 结构,...
— 创建事件 –每隔一秒自动调用e_test()存储过程 CREATE EVENT IF NOT EXISTS event_test ON SCHEDULE EVERY 1 SECOND ON COMPLETION PRESERVE DO CALL e_test(); — 开启事件 ALTER EVENT event
2.一次SQL Tuning引出来的not in , not exists 语句的N种写法 3.REF CURSOR 小结 4.日期转换函数的格式参数大小写规则 5.Oracle数据库字符集问题解析 6.关于Oracle10g跨平台传输表空间 7.oracle常用命令(学习笔记)
DROP TABLE [IF EXISTS] table_name ALTER add column ALTER TABLE table_name ADD column_name 字段类型 [字段约束], ADD column_name 字段类型 [字段约束]; modify column:只能修改字段类型或not null约束 ...
最近在学习python爬虫,写一下关于MySQL数据库操作的笔记 有错误的话还请看到的大佬们指正 1.导包 import pymysql 2.链接数据库 conn = pymysql.connect(host='127.0.01',port=3306,\nuser='root',password='123456...