数据库操作之多表联合查询sql语句

表准备

假设数据库有两张表 名为personcity

person字段如下:

id name c_id
1 张三 1
2 李四 2
3 王五 5

city字段如下

id city
1 北京
2 上海
3 广州

多表合一查询

  1. 第一种
1
select xxx,xxx from1,表2 where1.xxx=表2.xxx

示例:

1
select name, city from person, city where name.c_id = city.id;

查询结果:

city name
北京 张三
上海 李四
  1. 第二种 使用 join
1
select xxx,xxx from1 inner join2 on1.xxx=表2.xxx

示例:

1
select name, city from person inner join city on name.c_id = city.id;

查询结果和第一种一致

根据一张表字段查询另外一张表

  1. 查询所属北京的都有哪些人
1
2
3
4
5
6
7
8
9
# 嵌套查询方式
select name
from person
where c_id = ( select id from city where city = '北京')

#或者非嵌套查询方式
select name
from person p, city c
where p.c_id = c.id and c.city= '北京'
  1. like关键字查询姓张的有多少人
1
2
3
select count(distinct(name)) 
from person
where name like '张%';
  1. in嵌套查询 判断查询的表达式是否在多个值的列表中
1
2
3
select name 
from person
where c_id in ( select id from city);
  1. some部分匹配查询 如果在一系列比较中,有些值为True,那么结果就为True
1
2
3
select name 
from person
where c_id = some ( select id from city);
  1. all全部匹配查询 如果一系列的比较都为true,那么结果才能为true
1
2
3
4
#大于以下返回的所有id,此结果才为True,此结果才返回
select name
from person
where c_id > all ( select id from city);
  1. exists嵌套查询 如果子查询有结果集返回,那么就为True 一旦找到第一个匹配的记录后,就马上停止查找
1
2
3
select * 
from person
where exists ( select * from city);

子查询必定返回true的三种情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#第一种select 1
select *
from person
where exists ( select 1);

#第二种select 0
select *
from person
where exists ( select 0);

#第三种select null
select *
from person
where exists ( select null);

根据子查询结果充当临时表进行查询

  1. 子查询是一种嵌套查询,将一个查询用小括号包围起来,然后作为下一个查询的结果,子查询必须有别名 ,一般用于二次或多次筛查。
1
SELECT nan.id FROM (SELECT name,c_id FROM person WHERE id=2) AS nan WHERE c_id = 1;

关于join的特殊用法

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

LEFT JOIN示例:

1
select name, city from person left join city on name.c_id = city.id;

返回结果:

city name
北京 张三
上海 李四
王五

RIGHT JOIN示例:

1
select name, city from person right join city on name.c_id = city.id;

返回结果:

city name
北京 张三
上海 李四
广州

FULL JOIN示例:

1
select name, city from person full join city on name.c_id = city.id;

返回结果:

city name
北京 张三
上海 李四
广州
王五

本文为作者原创 转载时请注明出处 谢谢

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%