美文网首页
数据库--多表查询

数据库--多表查询

作者: 何以解君愁 | 来源:发表于2022-05-26 19:49 被阅读0次

    笛卡尔积:有A,B两个集合,取A,B集合的所有组合情况

    多表查询:从多张表中查询数据
    连接查询:
    内连接:相当于查询A B交集数据
    外连接:左外连接:相当于查询A(左)表所有数据和交际部分数据 右外连接相当于查询B(右)表所有数据和交际部分数据
    (此交际部分有A的内容,也有B的内容,左外连接和右外连接不能看作左表或右表)
    (左外连接相当于左表全部内容加上右表关联的内容,如果左表有内容不关联右表,显示左表内容,右表内容显示null)
    子查询

    以下案例首字母为d且其中无_的为一个表中的字段,emp.dep_id = dept.did为外键约束所关联的主键:
    内连接:
        隐式内连接:SELECT 字段列表 FROM 表1,表2... WHERE 条件
        select t1.name,t1.gender,t2.dname from emp as t1,dept as t2 where t1.dep_id = t2.did;
        显式内连接:SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 条件
        select emp.name,emp.gender,dept.dname from emp inner join dept on emp.dep_id = dept.did;
    
    左外连接:SELECT 字段列表 FROM 表1 LEFT[OUTER] JOIN 表2 ON 条件
    select 
    emp.name,emp.gender,dept.dname 
    from 
    emp left join dept on emp.dep_id = dept.did;
    (left:emp表全部展示)
    
    右外连接:SELECT 字段列表 FROM 表1 RIGHT[OUTER] JOIN 表2 ON 条件
    select 
    emp.name,emp.gender,dept.dname
    from 
    emp right join dept on emp.dep_id = dept.did;(right:dept表全部展示)
    相当于
    select 
    emp.name,emp.gender,dept.dname
    from 
    dept left join emp on emp.dep_id = dept.did;
    但是左右表表格会产生变化
    
    子查询:
        单行单列:作为条件值,用=!=><等判断
        SELECT 字段列表 FROM  表 WHERE 字段名 > (子查询);
        select name,salary from emp where salary > (select salary from emp where name = '小李子');
    
        多行单列:作为条件值,用in等关键字判断
        SELECT 字段列表 FROM  表 WHERE 字段名 IN (子查询);
        select name,salary from emp where dep_id in (select did from dept where dname = '电器' or dname  = '餐饮');
    
        单行多列:作为虚拟表
        SELECT 字段列表 FROM (子查询) WHERE 条件;
        select name,salary,did from (select name,salary from where join_date > '2010-10-14') as t1,dept where t1.dep_id = dept.did;
        (将表要求的条件先筛选出来,然后与另外的表进行内连接)
    

    相关文章

      网友评论

          本文标题:数据库--多表查询

          本文链接:https://www.haomeiwen.com/subject/gqlpprtx.html