mysql exists 如何使用

还没时间看,exists用的少  ==》当你只需要判断后面的查询结果是否存 在时使用exists()

http://edu.codepub.com/2011/0208/29218.php

今天正好做一个查询,两个表中过滤数据,当T1中字段F1在T2表的F2中存在时,返回这条件数据。刚刚开始觉得简单,就想到子查询和连接查询,但是发现
两个表中如果数据量多时,这样就不行,并且效率不高,后来想到用Mysql中的In函数

今天正好做一个查询,两个表中过滤数据,当T1中字段F1在T2表的F2中存在时,返回这条件数据。刚刚开始觉得简单,就想到子查询和连接查询,但是发现
两个表中如果数据量多时,这样就不行,并且效率不高,后来想到用Mysql中的In函数,当用完后,也做出来了。但是想了一下,觉得应该有更好用的才对,
于是打开MYSQL手册,查IN,结果找到exist函数。 
exist:用法如下: 
select * from
T1 where exist(select * from T2 where
T1.F1=T2.F2); 
其中,exist()中返回的只有TRUE和FALSE,这样过滤的速度也比In快,也不用很麻烦。 
其实exist()用的最常见的,应该是在数据的插入,当数据库中存在时,不要插入数据,以防止数据重复插入。 
Insert
into T1 set F1=’xxx’,F2=’xxcc’ where not exist(select * from T1 where
F1=’xxxx’); 
上面意思就是当表T1中F1存在值为xxxx的值记录时,不插入数据。 

  
实际上确实如此。当你只需要判断后面的查询结果是否存在时使用exists(); 
                  
当你需要使用里面的结果集的时候必须用in(); 

      比方说:
select fathername from atable where exists( select id from studenttable
where
name=‘tao2ge‘); 
     
    
当要查询一个叫淘二哥同学的爸爸的时候,需要使用exists(); 

      
但如果有一群学生需要查爸爸。 那就得用in了。 
    select fathername from
atable where fatherid in (select id from student);

时间: 2024-10-02 02:50:47

mysql exists 如何使用的相关文章

mysql 有报错  ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists

sh-4.1# /etc/init.d/mysqld status ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists sh-4.1# /etc/init.d/mysqld start Starting MySQL. ERROR! The server quit without updating PID file (/data1/mysql/mysql.pid). sh-4.1# rm mysql

mysql exists用法

在mysql中,有个关键字exists比较难理解,今天就来搞明白其含义和应用 exists的使用总是跟子查询关联起来,一种是不相关子查询,对于exists来说更常用的是相关子查询 不相关子查询:子查询和父查询没有直接的关系.只要子查询为真,则返回父查询的所有结果.否则返回空 select A.id from A where exists (select B.name from B where B.name = "hello world"); 相关子查询: select A.id fro

mysql exists 和 in的效率比较

这条语句适用于a表比b表大的情况 select * from ecs_goods a where cat_id in(select cat_id from ecs_category); 这条语句适用于b表比a表大的情况select * from ecs_goods a where EXISTS(select cat_id from ecs_category b where a.cat_id = b.cat_id); 原因:(转发) select * from Awhere id in(selec

Mysql exists和in

今天在学习sql语句时,遇到关于exsits的用法,下面是题目: 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题: 查询学过"001"并且也学过编号"002"课程的同学的学号.姓名: 即执行主句查询前,先查询是否子句是否为真,若存在学过002课程的学生,再执行查询学过001的, 此时查询出来的结果,就符合既

MySQL - exists与in的用法

[1]exists 对外表用loop逐条查询,每次查询都会查看exists的条件语句. 当 exists里的条件语句能够返回记录行时(无论记录行是多少,只要能返回),条件就为真 , 返回当前loop到的这条记录.反之如果exists里的条件语句不能返回记录行,条件为假,则当前loop到的这条记录被丢弃. exists的条件就像一个boolean条件,当能返回结果集则为1,不能返回结果集则为 0. 语法格式如下: select * from tables_name where [not] exis

MySQL exists 和 not exists 的用法

有一个查询如下: 1 SELECT c.CustomerId, c.CompanyName   2 FROM Customers c   3 WHERE EXISTS(   4     SELECT OrderID FROM Orders o   5     WHERE o.CustomerID = c.CustomerID)   这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在Orde

mysql高可用之PXC(Percona XtraDB Cluster)

借鉴 http://www.cnblogs.com/xiaoboluo768/p/5135619.html 服务器环境信息如下: node1    192.168.0.100 node2    192.168.0.101 node3    192.168.0.102 1.安装软件依赖包(添加repl源,再安装依赖,3台server操作一样.) [[email protected] ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64

msyql中子查询IN,EXISTS,ANY,ALL,SOME,UNION介绍

1.ANY关键字 假设any内部的查询语句返回的结果个数是三个,如:result1,result2,result3,那么, select ...from ... where a > any(...); -> select ...from ... where a > result1 or a > result2 or a > result3; 2.ALL关键字 ALL关键字与any关键字类似,只不过上面的or改成and.即: select ...from ... where a

linux 下mysql的安装,并设置必要的密码

首先,我使用的是redhat linux ,版本号为: 1 [[email protected] init.d]# cat /proc/version 2 Linux version 2.4.20-8 ([email protected]) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #1 Thu Mar 13 17:54:28 EST 2003 1.  第一步,下载一个mysql版本...我下载的是.tar压缩包,所以对于其他的压缩