美文网首页
DQL:数据查询语言(多表)

DQL:数据查询语言(多表)

作者: 别动我名字呀 | 来源:发表于2018-09-29 23:01 被阅读7次

    一、合并结果集

    合并结果集就是把两个select语句的查询结果合并到一起,注意被合并的两个表:列、列类型必须相同

    合并结果集的两种方式:

    1. union(合并时去除重复记录)
    select * from A 
      union 
    select * from B
    
    1. union all(合并时不去除重复记录)
    select * from A
      union all 
    select * from B
    

    二、连接查询(也叫跨表查询,需要关联多个表查询)

    同时查询两张表,出现的就是笛卡尔集结果。隐士的去笛卡尔集就是在查询时保持主键和外键的一致,主表当中的数据参照子表当中的数据

    1.多表连查:起别名

    select * from stu st , score sc;
    
    1. 99连接查询(隐士连接): 两者满足相同条件的数据,不相等的不要
    select * from 
        stu st, score sc
        where 
        st.id=sc.id;
    
    1. 内连接
    1. inner join 等值连接:
    查询两者满足相同条件的数据,与99连接查询主外键是一样的,
    只是换了一种写法。on 后面只写主外键
    SELECT * FROM  stu st , score WHERE st.id =sc.sid
    SELECT * FROM  stu st INNER JOIN score sc ON st.id=sc.sid  
    以上两种结果一致,INNER可以省略
    
    2.多表连接
    select * from stu st 
        join score sc on st.id = sc.sid
        join course c on sc.cid=c.cid;
    
    3.非等值连接(后面不一定是等于,可能是 < 或者 >)
    select * from 
          emp e, dept d,  salgrade g
    where e.deptno = d.deptno
          and e.salary >= g.lowSalary and e.salary<=g.highSalary;
    
    select * from emp e
         JOIN dept d ON e.deptno = d.deptno
         JOIN  salgrade g ON e.salary >= g.lowSalary and e.salary<=g.highSalary;
    
    
    

    4.外连接

    1. LEFT JOIN (左连接)
    查询两表满足相同条件的数据,如果左边表中有不相同的数据,也把左边表中的数据查出来
    左边表中的数据全部查出来,右边表中指查满足条件的内容
    SELECT * FRM stu st LEFT JOIN score ON st.id = sc.sid
    
    2.RIGHT JOIN (右连接)
    右边表中的数据全部查出来,左边表中指查满足条件的内容
    SELECT * FRM stu st RIGHT JOIN score ON st.id = sc.sid
    
    

    5.自然连接(两张连接的表中列名和类型完全一致的列作为条件,会去除相同的列)

    select * from stu NATIRAL JOIN score;
    
    

    三、子查询

    一个select语句中包含另一个完整的select语句,或者两个select语句;就是子查询
    where后面:把select查询的结果当成另一个select的条件值

    from后面:把查询结果当作一张新表

    1.查询跟张三同一个部门的员工
    select * from emp dep=(select dep from where ename='张三')
    
    2.查询30号部门薪资大于两千的员工
    select ename,salary from
      (select ename,salary from emp dep=30) s
      where s.salary>2000;
    
    3.查询工资与名字都与李四相同的员工
    
    select * from  emp e ,(select name,salary from emp where name='李四') r
      where e.name= r.name AND e.salary= r.salary;
    

    四、自连接

    自己连接自己 ;起别名

    求员工编号为732的姓名、经理编号、经理姓名
    select  e1.empN,e.name, e2.mgr,e2.name from emp e1, emp e2
      where e1.empNo=e2.mgr
       ADN e1.empNo=732;
    

    相关文章

      网友评论

          本文标题:DQL:数据查询语言(多表)

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