exists的用法
如何理解多个exists sql(查询选修了全部课程的学生姓名)作者:Ewin来源:博客园发布时间:2009-10-07 12:28 阅读:546 次原文链接[收藏]
查询选修了全部课程的学生姓名
student、sc、course
三张表查询如下:
注:exists是用来判断是否存在的,当exists(查询)中的查询存在结果时则返回真,否则返回假。
not exists则相反。
exists做为where 条件时,是先对where 前的主查询询进行查询,然后用主查询的结果一个一个的代入exists的查询进行判断,如果为真则输出当前这一条主查询的结果,否则不输出。
解一:
select sname from student where not exists (select * from course where not exists (select * from sc where cno = o and sno=student.sno))
上面这个列子,先查询出student表的结果,然后将结果代入到student.sno然后再查询出c表中的结果,再一条一条的代入,感觉有点像for的嵌套循环,第一轮外循环中,满足内部的not exists条件的course表中的结果集被保留,然后再判断外部的not exists,这次判断是根据内部Course表中被保留的结果集的情况,如果结果集为空,则输出当前这一条S表的结果集;然后再进行第二轮大的循环,即取出student表的第二条结果代入运算。
以上的sql还可以这样理解,最内部的select * from sc where cno = o and sno=student.sno是查询出所有已经选择过课程的学生及相应课程,select * from course where not exists 则是所有没有被选择的课程,在这个基础上的select sname from student where not exists 则是选取所有没有未选择课程的学生,即选择了所有课程的学员名称。
解二:
select Sname from student where Sno IN (select Sno from SC group by Sno having count(*) = (select count(*) from course ))
================================================ ==============
有两个简单例子,以说明“exists”和“in”的效率问题
1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。
2) select * from T1 where T1.a in (select T2.a from T2) ;
T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。
exists 用法:
请注意1)句中的有颜色字体的部分,理解其含义;
其中“select 1 from T2 where T1.a=T2.a” 相当于一个关联表查询,相当于
“select 1 from T1,T2where T1.a=T2.a”
但是,如果你当当执行1)句括号里的语句,是会报语法错误的,这也是使用exists需要注意的地方。
“exists(xxx)”就表示括号里的语句能不能查出记录,它要查的记录是否存在。
因此“select 1”这里的“1”其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在,这1)句的where 条件成立。
in 的用法:
继续引用上面的例子
“2) select * from T1 where T1.a in (select T2.a from T2) ”
这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,一般来说,T1和T2
这两个表的a字段表达的意义应该是一样的,否则这样查没什么意义。
打个比方:T1,T2表都有一个字段,表示工单号,但是T1表示工单号的字段名叫“ticketid”,T2则为“id”,但是其表达的意义是一样的,而且数据格式也是一样的。
这时,用2)的写法就可以这样:
“select * from T1 where T1.ticketid in (select T2.id from T2) ”
Select name from employee where name not in (select name from student); Select name from employee where not exists (select name from student);
第一句SQL语句的执行效率不如第二句。
通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。
Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。
在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。
这也就是使用EXISTS比使用IN通常查询速度快的原因。
mysql exist的用法
在MySQL中,"EXISTS"是一个用于检查子查询是否返回结果的关键字。
它通常与SELECT语句结合使用,用于判断某个条件是否满足。
"EXISTS"的基本语法如下:sqlSELECT column1, column2, ...FROM table_nameWHERE EXISTS (subquery);在这个语法中,"subquery"是一个子查询,它可以是一个简单的SELECT语句或者更复杂的查询。
子查询的结果将用于判断"EXISTS"条件是否满足。
当子查询返回至少一行结果时,"EXISTS"条件为真(TRUE),否则为假(FALSE)。
下面是一个使用"EXISTS"的示例:假设我们有两个表:Customers(客户)和 Orders(订单)。
我们想找出至少有一个订单的客户。
sqlSELECT CustomerNameFROM CustomersWHERE EXISTS (SELECT *FROM OrdersWHERE Customers.CustomerID = Orders.CustomerID);在上面的示例中,子查询从Orders表中选择与客户表(Customers)中的CustomerID匹配的记录。
如果子查询返回至少一行结果,则"EXISTS"条件为真,表示该客户至少有一个订单。
最终,查询将返回满足条件的客户名称(CustomerName)。
请注意,"EXISTS"只关心子查询是否返回结果,而不关心返回的具体内容。
因此,在子查询中使用"SELECT *"是常见的做法,因为我们只关心是否存在匹配的行,而不需要具体的列数据。
数据库查询exists的用法
数据库查询exists的用法数据库查询exists的用法的用法你知道吗?下面小编就跟你们详细介绍下数据库查询exists的用法的用法,希望对你们有用。
数据库查询exists的用法的用法如下:有一个查询如下:复制代码代码如下:SELECT c.CustomerId, CompanyNameFROM Customers cWHERE EXISTS(SELECT OrderID FROM Orders oWHERE o.CustomerID = cu.CustomerID)这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是如何匹配的呢?EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。
EXISTS 指定一个子查询,检测行的存在。
语法:EXISTS subquery。
参数subquery 是一个受限的SELECT 语句(不允许有COMPUTE 子句和 INTO 关键字)。
结果类型为 Boolean,如果子查询包含行,则返回 TRUE。
在子查询中使用 NULL 仍然返回结果集这个例子在子查询中指定NULL,并返回结果集,通过使用EXISTS 仍取值为 TRUE。
复制代码代码如下:SELECT CategoryNameFROM CategoriesWHERE EXISTS (SELECT NULL)ORDER BY CategoryName ASC比较使用 EXISTS 和 IN 的查询这个例子比较了两个语义类似的查询。
第一个查询使用 EXISTS 而第二个查询使用 IN。
注意两个查询返回相同的信息。
复制代码代码如下:SELECT DISTINCT pub_nameFROM publishersWHERE EXISTS(SELECT *FROM titlesWHERE pub_id = publishers.pub_idAND type = \'business\')复制代码代码如下:SELECT distinct pub_nameFROM publishersWHERE pub_id IN(SELECT pub_idFROM titlesWHERE type = \'business\')比较使用 EXISTS 和 = ANY 的查询本示例显示查找与出版商住在同一城市中的作者的两种查询方法:第一种方法使用 = ANY,第二种方法使用 EXISTS。
mssql exists用法
mssql exists用法在MS SQL Server中,EXISTS是一个用于判断子查询结果是否为空的关键字。
它在查询中起到很重要的作用,可以帮助我们进行复杂的条件判断和过滤。
本文将详细介绍MS SQL Server中的EXISTS用法,并通过实例演示其具体应用。
1. EXISTS的介绍在MS SQL Server中,EXISTS是一个逻辑运算符,用于检查一个子查询是否返回任何行。
如果子查询返回至少一行记录,则EXISTS返回True;如果子查询不返回任何记录,则EXISTS返回False。
这使得我们能够根据子查询结果的存在与否进行条件判断,从而实现更加灵活的查询。
2. EXISTS的语法EXISTS的语法非常简单,其基本格式如下:```SELECT column_name(s)FROM table_nameWHERE EXISTS (subquery);```其中,column_name(s)是你想要查询的列名,table_name是你要查询的表,subquery是一个子查询,用于判断是否存在满足条件的记录。
3. EXISTS的应用场景EXISTS可以在很多场景下发挥作用,下面以几个实例来说明其应用:3.1 检查相关记录是否存在假设我们有两个表:Customers和Orders,它们之间通过一个共享的列CustomerID关联。
我们想要找出所有有关联的顾客,即在Orders 表中存在对应记录的顾客。
可以使用下面的SQL语句来实现:```SELECT CustomerNameFROM CustomersWHERE EXISTS (SELECT *FROM OrdersWHERE Customers.CustomerID = Orders.CustomerID);```这样就可以找出所有在Orders表中有订单记录的顾客。
3.2 过滤复杂条件有时候我们需要对复杂的条件进行判断,使用EXISTS可以使得查询语句更加简洁。
exists用法sql
exists用法sql
在SQL中,`EXISTS`是用于检查子查询返回的结果集是否为空的关键字。
`EXISTS`通常与`WHERE`子句一起使用,用于过滤查询结果。
它的语法如下:
```sql
SELECT column1, column2, ...
FROM table
WHERE EXISTS (subquery)
```
在`EXISTS`后面的括号中,可以使用子查询来指定一个条件。
如果子查询返回的结果集非空,那么`EXISTS`的条件为真,否则为假。
下面是一个示例,使用`EXISTS`查找具有某种特定特征的记录: ```sql
SELECT emp_name
FROM employees
WHERE EXISTS (
SELECT emp_id
FROM departments
WHERE employees.emp_id = departments.emp_id
AND department_name = "Finance"
)
```
在这个例子中,`EXISTS`用于检查是否存在一个具有部门名称为"Finance"的记录。
如果存在,那么该员工的姓名将被返回。
请注意,`EXISTS`只关心子查询返回的结果集是否为空,而不关心实际返回的数据是什么。
因此,子查询可以包含任何有效的SQL语句,只要它返回一个结果集即可。
exists和in的用法
"exists"和"in"在英语中常常用于不同的语境中,表达不同的含义。
以下是关于这两个词的一些基本用法和注意事项:**exists**1. **存在性**:这个词主要用于表达某个实体或概念在某个集合或范围内是存在的。
例如:“Does anyone exist in this class?”(这个班级里有人存在吗?)这里的“exist”是动词,表示“存在”。
2. **存在状态**:当我们谈论某个物体或情况的存在状态时,我们可能会使用“exists”。
例如:“My car exists in my garage.”(我的车在车库里。
)在这个句子中,“exists”表示的是一种存在状态。
**in**1. **在……里面**:这个用法主要用于表示位置或范围。
例如:“The cat is in the kitchen.”(猫在厨房里。
)在这个句子中,“in”表示的是空间位置。
2. **用某种语言或方式**:当我们在描述某种行为或情况时,我们可能会使用“in”。
例如:“She speaks French very well, in a clear and confident way.”(她法语说得非常好,用清晰而自信的方式。
)在这个句子中,“in”表示方式。
3. **在某个时间或时期**:当我们谈论某个事件或活动发生的时间或时期时,我们可能会使用“in”。
例如:“The party started in the early evening.”(晚会开始于傍晚早些时候。
)**用法建议**在使用这两个词时,建议根据语境选择合适的词。
一般来说,“exists”更常用于描述事物的存在状态,而“in”则更常用于描述空间位置、方式或时间。
同时,注意不要混淆这两个词的用法,以免产生误解。
另外,在某些情况下,你可能需要查阅相关词典或语法书籍以获取更准确和详细的解释。
这些资源通常会提供更多关于这两个词的用法、含义和例句的信息,帮助你更好地理解和使用它们。
thinkphp exists用法
thinkphp exists用法ThinkPHP是一个流行的PHP框架,它提供了许多方便的功能和工具,帮助开发者快速构建高效、可扩展的Web应用程序。
在ThinkPHP中,exists是一个常用的方法,用于检查对象或模型是否存在。
本文将介绍exists用法及其在ThinkPHP 中的应用。
一、exists方法的基本用法exists方法用于检查指定的对象或模型是否存在。
它接受一个参数,即要检查的对象或模型实例。
如果对象或模型存在,该方法将返回true;否则,返回false。
以下是exists方法的基本语法:```php$result=$object->exists();```其中,$object是要检查的对象或模型实例。
二、使用exists方法检查对象存在性在ThinkPHP中,可以使用exists方法来检查对象是否存在。
假设你有一个User模型,并且想要检查特定的用户是否存在,可以按照以下步骤进行操作:1.实例化User模型:```php$user=new\app\model\user\User();```2.检查用户是否存在:```phpif($user->exists()){//用户存在,执行相关操作}else{//用户不存在,执行其他操作}```三、使用exists方法检查关联模型的存在性在ThinkPHP中,模型之间通常通过关联关系进行关联。
可以使用exists方法来检查关联模型是否存在。
假设你有一个Product模型,它关联了一个Category模型,并且想要检查特定的产品所属的类别是否存在,可以按照以下步骤进行操作:1.实例化Product模型:```php$product=new\app\model\product\Product();```2.检查类别是否存在:```phpif($product->category->exists()){//类别存在,执行相关操作}else{//类别不存在,执行其他操作}```在上面的示例中,我们通过调用关联模型的exists方法来检查类别是否存在。
oracle中exists用法
oracle中exists用法
在Oracle中,EXISTS是一个条件运算符,用于检查子查询的
结果是否存在。
基本的语法格式如下:
```
SELECT column_name(s)
FROM table_name
WHERE EXISTS (subquery);
```
其中,subquery表示一个子查询语句,它可以是SELECT语句、FROM子句、WHERE子句等。
主查询根据子查询的结果来判
断是否满足条件。
如果子查询返回至少一条记录,则EXISTS
条件为真;如果子查询返回空结果集,则EXISTS条件为假。
通常,EXISTS运算符用于条件判断,它可以与其他条件运算
符(如AND、OR)一起使用。
例如,下面的示例查询返回所有订单中存在具有特定产品的订单的客户:
```
SELECT customer_name
FROM customers
WHERE EXISTS (
SELECT *
FROM orders
WHERE customers.customer_id = orders.customer_id
AND product_id = 123
);
```
这个查询会选择customers表中符合条件的customer_name,条件是orders表中存在customer_id与customers表中customer_id相等的订单,并且订单中的产品ID为123。
需要注意的是,存在多种方式可以使用EXISTS运算符,具体取决于查询的需求和表结构。
oracle中的exists用法
oracle中的exists用法exists用法在Oracle中是用来确定子查询是否返回任何行的一种条件操作符。
它可以在WHERE或HAVING子句中使用,以帮助筛选满足特定条件的数据。
exists用法基本上是通过判断子查询的结果集是否为空来确定条件是否为真。
如果子查询返回至少一行记录,exists条件就被视为真,并返回True;否则,存在条件被视为假,并返回False。
具体用法如下:使用exists关键字和子查询来判断是否存在满足某种条件的记录:```sqlSELECT 列名FROM 表名WHERE EXISTS (SELECT 列名FROM 子查询表名WHERE 子查询条件);```示例:假设我们有一个名为"employees"的表,其中包含员工的姓名和工资信息,并且我们想找出所有工资高于平均工资的员工。
我们可以使用exists来完成这个任务。
```sqlSELECT *FROM employees eWHERE EXISTS (SELECT *FROM employeesWHERE salary > (SELECT AVG(salary)FROM employees));```上述查询将返回所有工资高于平均工资的员工记录。
需要注意的是,在使用exists关键字时,子查询的结果集没有被实际使用,它仅作为判断条件的依据。
所以,子查询的性能非常重要,应该尽量优化。
总结:exists是Oracle中用于判断子查询是否返回任何行的条件操作符。
它能够帮助我们筛选出满足特定条件的数据,用法简单易懂。
在实际应用中,需要注意优化子查询的性能,以提高查询效率。
exists 用法
exists 用法
exists 是PHP语言中的一个关键字,用于检测某个变量是否存在,可以用来判断某些特定变量是否设置成功。
其中,var表示要检测的变量名。
另外,exists你也可以用于检测某个数组键A是否存在,语法如下:
exists (array [A])
其中,Array表示要检测的数组名,A表示要检测的键名。
使用exists关键字时,系统将返回一个布尔值,即TRUE表示变量存在,FALSE表示变量不存在。
使用exists关键词时,用户需要注意的是,如果检测的变量名不存在,则会出现警告信息,提示用户尝试访问的变量不存在,这种情况一般可以使用isset来替代。
示例代码
<?php
$UserName="Jack";
if(exists($UserName)) //检测$UserName是否存在
{
echo "The UserName variable is exist!<br/>";
}
else
{
echo "The UserName variable is not exist!<br/>";
}
>
以上代码执行结果:
The UserName variable is exist!
The Age variable is not exist!。
oracle的exists用法
oracle的exists用法
Oracle中的EXISTS是一个条件表达式,用于检查子查询的结果是否为空。
它的语法形式如下:
```
SELECT column(s)
FROM table
WHERE EXISTS (subquery);
```
在这个语法中,子查询是一个完整的SELECT语句,用于检索数据。
如果子查询返回至少一行结果,则条件表达式返回TRUE,否则返回FALSE。
在使用EXISTS时,一般会将其与主查询的WHERE子句一起使用,用于根据子查询的结果来过滤主查询的数据。
下面是一个例子,演示了EXISTS的用法:
```
SELECT product_name
FROM products
WHERE EXISTS (SELECT * FROM orders WHERE products.product_id = orders.product_id);
```
上述示例中,查询了products表中有哪些产品有订单。
需要注意的是,子查询中的列可以是任何列,因为我们只关心
子查询是否返回了结果,而不关心具体的列值。
因此,使用星号(*)作为子查询中的列是常见的做法,以便简化子查询的编写。
