MariaDB exists 学习
2016-06-03 08:23
405 查看
MariaDB exists 学习
exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录,反之如果exists里的条件语句不能返回记录行,则当前loop到的这条记录被丢弃,exists的条件就像一个bool条件,当能返回结果集则为true,不能返回结果集则为 false。
如下:
对A表的记录逐条取出,由于子条件中的select 1永远能返回记录行,那么A表的所有记录都将被加入结果集,所以与 select * from A;是一样的。
又如下:
可以知道对A表进行loop时,检查条件语句(select * from A where a = 0),由于a永远不为0,所以条件语句永远返回空集,条件永远为false,那么A表的所有记录都将被丢弃。
not exists与exists相反,也就是当exists条件有结果集返回时,loop到的记录将被丢弃,否则将loop到的记录加入结果集。
总的来说,如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件。
exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录,反之如果exists里的条件语句不能返回记录行,则当前loop到的这条记录被丢弃,exists的条件就像一个bool条件,当能返回结果集则为true,不能返回结果集则为 false。
如下:
select * from A where exists (select 1);
对A表的记录逐条取出,由于子条件中的select 1永远能返回记录行,那么A表的所有记录都将被加入结果集,所以与 select * from A;是一样的。
又如下:
select * from A where exists (select * from A where a = 0);
可以知道对A表进行loop时,检查条件语句(select * from A where a = 0),由于a永远不为0,所以条件语句永远返回空集,条件永远为false,那么A表的所有记录都将被丢弃。
not exists与exists相反,也就是当exists条件有结果集返回时,loop到的记录将被丢弃,否则将loop到的记录加入结果集。
总的来说,如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件。
相关文章推荐
- Centos安装完MariaDB后启动不了 MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
- mariadb-5.5.48-win32 XP下最后一个版本
- MariaDB Galera Cluster部署手册
- MariaDB/MySQL Galera服务器的防火墙规则
- MariaDB GTID 复制同步
- Mariadb galera 群集
- ubuntu14.04LTS安装nginx+mariaDB+php7+YAF的方法
- MariaDB链接超时优化
- corosync v2 + pacemaker 高可用mariadb服务
- mysql(mariadb)重装
- centos安装mariadb出现错误的解决方法
- Centos6.6下安装MariaDB步骤,利用yum进行安装 第二篇
- MariaDB允许远程连接
- MariaDB忘记root密码
- Centos6.6下安装MariaDB步骤,利用yum进行安装
- CentOS7下安装并设置MariaDB并配置
- CentOS-6上安装二进制Mariadb
- 安装MariaDB Galera Cluster
- centos7安装mariadb
- MariaDB在外网授权的坑