数据库表的连接查询、子查询

一.连接查询包括:交叉连接,内连接,外连接(左外连,右外连)等。

1.交叉连接:一对多,获取两个表相乘后的数据行。

语法:select * from 表1 cross join 表2;
例如:select * from offices cross join users;


2.内连接:获取与连接条件匹配的数据行。

语法:
select 需要查询的列名列表
from 表1
join 表2 on 表1.关联列名= 表2.关联列名;
例如:

select users.uid,users.uname,offices.name

from users

join offices on users.oid=offices.id;

3.外连接:除获取与连接条件匹配的数据行,还获取左表或右表中其他不匹配的所有数据。

左连接语法:
select 需要查询的列名列表
from 表1
left join 表2 on 表1.关联列名= 表2.关联列名;
显示结果中包含匹配的所有数据和左边表1中不匹配的所有数据,不匹配列显示为NULL。

右连接语法:
select 需要查询的列名列表
from 表1
right join 表2 on 表1.关联列名= 表2.关联列名;
显示结果中包含匹配的所有数据和右边表2中不匹配的所有数据,不匹配列显示为NULL。

二.子查询(嵌套查询):指的是一个查询中嵌套另一个查询,执行时先执行子查询中的语句

使用in关键字进行子查询:该查询in后面返回的是数据集合,将集合的数据作为in前面查询的操作数据。
语法:select 字段名列表 from 表名 where 字段名 in(select 字段名 from 表名 where 条件|字段名 in(...));

使用exists进行测试查询:会先判断exists中查询结果是否为true(即是否存在),为true才执行前面的查询,为false就不执行。exists后面的子查询不会产生任何数据,只会返回true或false。
语法:select 字段名列表 from 表名 where exists(select 字段名 from 表名 where 条件|字段名 in(...));

使用any进行子查询:前面查询的条件可以和any结果集合的条件一一比较,只要满足条件就执行前面的查询返回结果。
语法:select 字段名列表 from 表名 where 字段名 比较运算符 any(select 字段名 from 表名 where 条件|字段名 in(...));
例如:select name from users where age > ANY(select age from users);

使用all进行子查询:all要求全部满足条件才执行前面的查询。
语法:select 字段名列表 from 表名 where 字段名 比较运算符 all(select 字段名 from 表名 where 条件|字段名 in(...));
注:any和all之前可以使用比较运算符,返回的是数据集合:>,<,<>(!=),>=,<=,=。

使用union联合结果集:合并两个或者多个select语句的结果集,union all表示合并时允许重复的值。并且联合后的结果集的列名总是等于union中第一个select语句中的列名。
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值