数据库的多表查询

一.多表连接查询

  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;
比较运算符
原文地址:https://www.cnblogs.com/q767498226/p/10296585.html