码迷,mamicode.com
首页 > 数据库 > 详细

数据库的多表查询

时间:2019-01-20 23:38:34      阅读:333      评论:0      收藏:0      [点我收藏+]

标签:lse   style   color   一个   连接   pen   one   sts   nio   

一.多表连接查询

  1.交叉连接:不适用任何匹配条件,生成笛卡儿积

    select * from 表1,表2;

  2.内连接:只连接匹配的行

    select * from 表1,表2 where 表1.字段 = 表2.字段;

    select * from 表1 inner join 表2 on 表1.字段 = 表2.字段;  

  3.左连接:优先显示左表全部记录

    select * from 表1 left join 表2 on 表1.字段 = 表2.字段;

  4.右连接:优先显示右表全部记录

    select * from 表1 right join 表2 on 表1.字段 = 表2.字段;

  5.全外连接:显示两个表全部记录,union all 显示两个表拼接的有重复的,union可以去重.

    select * from 表1 left join 表2 on 表1.字段 = 表2.字段

    union

    select * from 表1 right join 表2 on 表1.字段 = 表2.字段;

二.子查询

  子查询是将一个查询语句嵌套在另一个查询语句中,子查询中的关键字有in,not in , all ,any ,exists,not exists,还有运算符 = ,!= ,< ,>

  1.in关键字子查询 

技术分享图片
#查看技术部员工姓名
   select name from employee
      where dep_id in 
        (select id from department where name=技术);
关键字

  2.exists关键字子查询

    exists关键字表示存在,如果exists后面的内层查询存在就查询外层,否则不进行查询.

技术分享图片
#department表中存在dept_id=203,Ture
mysql> select * from employee
    ->     where exists  
    ->         (select id from department where id=200); 
+----+------------+--------+------+--------+
| id | name       | sex    | age  | dep_id |
+----+------------+--------+------+--------+
|  1 | egon       | male   |   18 |    200 |
|  2 | alex       | female |   48 |    201 |
|  3 | wupeiqi    | male   |   38 |    201 |
|  4 | yuanhao    | female |   28 |    202 |
|  5 | liwenzhou  | male   |   18 |    200 |
|  6 | jingliyang | female |   18 |    204 |
+----+------------+--------+------+--------+

#department表中存在dept_id=205,False
mysql> select * from employee
    ->     where exists
    ->         (select id from department where id=204);
Empty set (0.00 sec)
exists关键字

  3.比较运算符子查询

技术分享图片
#比较运算符:=、!=、>、>=、<、<=、<>
#查询大于所有人平均年龄的员工名与年龄
mysql> select name,age from emp where age > (select avg(age) from emp);
+---------+------+
| name | age |
+---------+------+
| alex | 48 |
| wupeiqi | 38 |
+---------+------+
rows in set (0.00 sec)


#查询大于部门内平均年龄的员工名、年龄
select t1.name,t1.age from emp t1
inner join 
(select dep_id,avg(age) avg_age from emp group by dep_id) t2
on t1.dep_id = t2.dep_id
where t1.age > t2.avg_age;
比较运算符

数据库的多表查询

标签:lse   style   color   一个   连接   pen   one   sts   nio   

原文地址:https://www.cnblogs.com/q767498226/p/10296585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!