zoukankan      html  css  js  c++  java
  • mysql中的多表查询

    多表查询
    多表查询是建立在单表查询的基础之上的
    首先来看一下单表查询的基本操作
    select distinct 字段名1,字段2from 表名
    where 过滤条件1,过滤条件2
    group by (分组)字段1,字段2,
    having 过滤条件3,过滤条件4,
    order by desc(asc),
    limit 5,5;

    执行顺序
    from,where,group by,having,

    基于此 我们来认识一下笛卡尔积
    create table dep(
    id int,
    name varchar(20)
    );

    create table emp(
    id int primary key auto_increment,
    name varchar(20),
    sex enum('male','female')not null default 'male',
    age int,
    dep_id int
    );

    insert into dep values
    (200,'技术'),
    (201,'人力资源'),
    (202,'销售'),
    (203,'运营');

    insert into emp(name,age,dep_id)values
    ('jason','male',18,200),
    ('egon','male',48,201),
    ('kevin','male',38,201),
    ('nick','female',28,202),
    ('owen','male',18,200),
    ('jerry','female',18,204)
    ;

    select * from emp ,dep;
    select * from emp,dep where emp.(dep_id) = dep.id
    select * from emp,dep where emp.dep_id =dep.id and dep.name ='技术';


    内连接(其实也是笛卡尔积,换一种形式)
    select * from emp inner join dep on emp.dep_id = dep.id;
    select * from emp inner join dep on emp.dep_id = dep.id where dep.name = '技术';
    左连接(left inner join)
    select * from emp left join dep on emp.dep_id = dep.id;
    右连接(right inner join)
    select * from emp right join dep on emp.dep_id = dep.id;
    全连接(full join 但是mysql不支持 支持左外连接和右外连接之间加上union)
    select * from emp left join dep on emp.dep_id = dep.id
    union
    select * from emp right join dep on emp.dep_id = dep.id;

    子查询:
    就是将一个查询语句的结果用括号括起来当作另外一个查询语句条件使用
    查询部门是技术或者人力资源的员工信息
    2每个部门最新入职的员工 思路: 先查每个部门最新入职的员工 ,再按部门对应上连表查询

    规律:
    表的查询结果可以作为其他表的查询条件,也可以通过起别名的方式把它作为一张虚拟表去跟其他表做关联查询

    select name from dep where id in
    (select dep_id emp group by dep_id
    having avg(age)>25);

    # exist 关键字
    EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录,
    而是返回一个真假值,True或False。
    当返回True时,外层查询语句将进行查询
    当返回值为False时,外层查询语句不进行查询。
    select * from emp where exists (select * from dep where 1=2);
    select * from emp where exists (select * from dep where id >1);
    承蒙关照
  • 相关阅读:
    力扣leetcode 435. 无重叠区间
    C++中的快读和快写
    python安装wordcloud库报错
    python习题 随机密码生成 + 连续质数计算
    python 四位玫瑰数 + 100以内素数求和
    解决git add README.md 时报错 fatal: pathspec 'README.md' did not match any files
    洛谷P3817 小A的糖果 贪心思想
    多机部署之session共享解决方案-copy
    一点区块链资料-copy
    kafka集群搭建及结合springboot使用-copy
  • 原文地址:https://www.cnblogs.com/guanlei/p/10877333.html
Copyright © 2011-2022 走看看