`
zwein
  • 浏览: 13181 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

SQL EXISTS笔记

 
阅读更多

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实现 *******/



分享到:
评论

相关推荐

    2009达内SQL学习笔记

    多数DBMS不需要在单条SQL语句后加分号,但特定的DBMS可能必须在单条SQL语句后加分号。 SQL语句的最后一句要以 “;”号结束 二、写子句顺序 Select column,group_function From table [Where condition] ...

    PL/SQL学习笔记

    3.exists 判断这个元素是否存在,exists(x) 4.extend方法 不带参数加一个元素 extend(x)加x个元素 extend(x,y) 5.first属性,返回第一个元素的下标 6.last 属性,赶回最后一个元素的下标 7.limit属性 ...

    T-SQL电子书包含PPT及学习笔记、课后作业 非常好的sql学习资料

    T-SQL中级教程,包括PPT、学习笔记及课后作业,非常经典的教程 --建库之前先建路径的代码 exec xp_cmdshell'mkdir d:\mydata', --也可以用exec xp_cmdshell'md d:\mydata' no_output exec xp_cmdshell'rd d:\...

    Mysql和SQL最常用简单详细的笔记(2015整理)

    mysql 最详细的笔记整理 需要的童鞋莫错过! 一.数据库 1.创建数据库 create database [if not exists] db_name [character set xxx] [collate xxx] *创建一个名称为mydb1的数据库。 create database mydb1;...

    oracle数据库学习笔记总结

    二、常用SQL: ... SQL Server的: IF EXISTS (SELECT name FROM sysobjects WHERE name = '表名' AND type = 'U') DROP TABLE 表名; Oracle的: create or replace table 表名 ...; -- 直接写建表语句

    Oracle数据库、SQL

    三、 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...

    sqlserver 数据库学习笔记

    1,exists和in的理解(参考//www.jb51.net/article/28922.htm) exists:如果子查询中包括某一行,那么就为TRUE in:如果操作数为TRUE等于表达式列表中的一个,那么就为TRUE exists总是搞得不太明白 select 。...

    级联删除笔记【自用0分】

    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 级联更新和级联删除...

    2020年MySQL课堂笔记

    MySOL SQL语法 本节用到的架构: 特点: SQL语句可以单行或多行书写,以;结尾 可以使用空格和缩进增强语句的可读性 MySQL的SQL语句不区分大小,关键字建议大写 ...create database if not exists 数据库名

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    高性能MySQL读书笔记 找出谁持有锁

    问题的背景:在实际使用MySQL时,如果访问量比较大,那么很可能会出现大量Locked状态的进程,但是却不能方便的识别是哪条SQL引起的问题,很多人遇到此类问题时,多半是通过PhpMyAdmin查询可疑SQL,然后KILL掉,但...

    Java工作笔记-JPA中使用@query注解(分页查询实例)

    运行截图如下: 这里对应的数据库内容如下: 此处的关键代码如下: 通过sql语句去做,这里...32312 IF NOT EXISTS*/`jap_repository_demo` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */; USE

    Java学习笔记-个人整理的

    {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学习笔记(3)——索引练习

    根据之前的MYSQL学习笔记(2)的学习,通过一些小练习来加深对索引的理解。 建下表并插入数据最后建立相关索引: CREATE TABLE IF NOT EXISTS `test`( id int PRIMARY KEY auto_increment, c1 char(10), c2 char(10), ...

    整理后java开发全套达内学习笔记(含练习)

    exist 存在, 发生 [ig'zist] '(SQL关键字 exists) extends (关键字) 继承、扩展 [ik'stend] false (关键字) final (关键字) finally (关键字) fragments 段落; 代码块 ['frægmәnt] FrameWork [java] 结构,...

    MySQL定时器EVENT学习笔记

    — 创建事件 –每隔一秒自动调用e_test()存储过程 CREATE EVENT IF NOT EXISTS event_test ON SCHEDULE EVERY 1 SECOND ON COMPLETION PRESERVE DO CALL e_test(); — 开启事件 ALTER EVENT event

    ITPUB电子杂志第11期-论坛精华内容选辑

    2.一次SQL Tuning引出来的not in , not exists 语句的N种写法 3.REF CURSOR 小结 4.日期转换函数的格式参数大小写规则 5.Oracle数据库字符集问题解析 6.关于Oracle10g跨平台传输表空间 7.oracle常用命令(学习笔记)

    Mysql学习笔记

    DROP TABLE [IF EXISTS] table_name ALTER add column ALTER TABLE table_name ADD column_name 字段类型 [字段约束], ADD column_name 字段类型 [字段约束]; modify column:只能修改字段类型或not null约束 ...

    python使用pymysql操作MySQL的基础操作

    最近在学习python爬虫,写一下关于MySQL数据库操作的笔记 有错误的话还请看到的大佬们指正 1.导包 import pymysql 2.链接数据库 conn = pymysql.connect(host='127.0.01',port=3306,\nuser='root',password='123456...

Global site tag (gtag.js) - Google Analytics