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);
    承蒙关照
  • 相关阅读:
    WSGI应用程序示例
    UDP 网络程序-发送_接收数据
    【C语言】定义一个函数,求长方体的体积
    【C语言】输入三个正整数a,b,c,求最大值,要求定义一个计算最大值的函数max(a,b),返回a,b的值
    人工智能发展史-从图灵测试到大数据
    漫画 |《程序员十二时辰》,内容过于真实 ...
    漫画 | 外行对程序员误会有多深!
    爬虫究竟是合法还是违法的?
    【C语言】用指针作为形参完成数据的升序排列
    【C语言】数组名作函数参数,完成数据的升序排列
  • 原文地址:https://www.cnblogs.com/guanlei/p/10877333.html
Copyright © 2011-2022 走看看