mysql 复合查询

MySQL 的复合查询或者嵌套查询,有表两张,要以 clrTheme 表两张为表列,将 clrColor 横向列出,故选择嵌套查询。

MySQL 复合嵌套查询命令如下

select * from clrTheme as t1,  
(  
  (select * from clrColor where `sort` = 0) as c1,  
  (select * from clrColor where `sort` = 1) as c2,  
  (select * from clrColor where `sort` = 2) as c3,  
  (select * from clrColor where `sort` = 3) as c4,  
  (select * from clrColor where `sort` = 4) as c5  
) where  
  t1.clrThemeId = c1.clrThemeId  
  and t1.clrThemeId = c2.clrThemeId  
  and t1.clrThemeId = c3.clrThemeId  
  and t1.clrThemeId = c4.clrThemeId  
  and t1.clrThemeId = c5.clrThemeId  
  order by t1.clrGroupId, t1.sort asc;  

查询结果将以 clrTheme 为主列,将 clrColor 作为子列,根据条件得到结果。

这里针对 clrColor 的内查询建议加条件,以提高性能。

简单子查询

select name,age from person 
where age > 
(
    select age from person 
    where name = '孙权'
)
in嵌套查询

 in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。

select name from person 
where countryid in 
(
    select countryid from country
    where countryname = '魏国'
)
some 嵌套查询

some在sql中的逻辑运算符号,如果在一系列比较中,有些值为True,那么结果就为True。some的语法是:

<表达式>{ =|<>|!=|>|>=|!>|<|<=|!<}some(子查询)

例子:

select name from person 
where countryid = some       --用等号和以下查询到的值比较,如果与其中一个相等,就返回
(
    select countryid from country
    where countryname = '魏国'
)
all 嵌套查询

 all是sql中的逻辑运算符好,如果一系列的比较都为true,那么结果才能为true。
 

<表达式>{ =|<>|!=|>|>=|!>|<|<=|!<}all(子查询)

例子:

select name from person 
where countryid > all   --当countryid大于以下返回的所有id,此结果才为True,此结果才返回
(
    select countryid from country
    where countryname = '魏国'
)
exists嵌套查询

1、语法

   exists是sql中的逻辑运算符号。如果子查询有结果集返回,那么就为True。exists代表“存在”的意义,它只查找满足条件的那些记录。一旦找到第一个匹配的记录后,就马上停止查找。
其中子查询是一个首先的select语句,不允许有compute子句和into关键字。

   exists 的意思是,子查询是否有结果集返回。
   例如:
   

SELECT * FROM Person
WHERE exists
(
    SELECT 1      --SELECT 0  SELECT NULL 返回结果都一样,因为这三个子查询都有结果集返回,因此总是True  SELECT * FROM Person照常执行
)

 但是如果子查询中因为加了条件而没有结果集返回,则主语句就不执行了:
 

SELECT * FROM Person
WHERE exists
(
    SELECT * FROM Person 
    WHERE Person_Id = 100    --如果不存在Person_Id的记录,则子查询没有结果集返回,主语句不执行
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝鲸123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值