1、合并结果集(union/union all):被合并的结果集必须列数与列类型完全相同。
    
   
    
     去重合并:
     
      SELECT * FROM g
      
       
        UNION
       
      
      SELECT * FROM h;
     
    
   
    
     不去重:
     
      SELECT * FROM g
      
       
        UNION ALL
       
      
      SELECT * FROM h;
     
    
   
    
     2、连接查询(
     
      crossjoin
     
     ):多表的乘积。
    
   
    
     
      内连接:inner(可省略) join on
     
    
   
隐式:SELECT e.ename,d.dname,e.job FROM emp AS e,dept AS d WHERE e.deptno = d.deptno;                             
显式:SELECT e.ename,d.dname,e.job FROM emp e INNER join dept d ON e.deptno = d.deptno;
    
     
      外链接:outer(可省略) join on
     
    
   
    
     左外连接:先查询左表(以左表为主),然后查询右表,满足条件的显示,不满足的显示为null。
     
    
   
左外连接:SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno;
    
     右外连接:同左外。
    
   
    
     全外连接(MySQL不支持,故不写)。
    
   
    
     
      总结:在外链接中,如果SQL用的是Left join,on后面条件对left表没作用,只是对right表起过滤作用,where语句是在生成临时表后过滤left表。
     
     
    
   
    
     
      自然连接:Natural join,两张连接表中列名称和数据类型完全一致的列作为条件。
     
    
   
    
     
      SELECT * FROM emp NATURAL JOIN dept;
      
      SELECT * FROM emp NATURAL LEFT JOIN dept;
      
      SELECT * FROM emp NATURAL RIGHT JOIN dept;
      
     
    
   
    
     
      
       总结: 1.查两张表关联列相等的数据 用内连接
       
       2.right表是left表的子集 用左外连接
       
       3.left表是right表的子集 用右外连接
       
      
     
    
   
    
     
      
       4.right 和 left 彼此之间有交集 但是互不为子集 使用全外连接
      
     
    
   
    
     
      
       
        3、子查询:嵌套查询
       
      
     
    
   
    
     
      
       
        子查询语句在
        
         
          
           
            from 后:作为子表出现
           
          
         
        
        ;
        
         
          
           
            where后: 作为查询条件的一部分
           
          
         
        
        ,并且
        
         
          
           
            可以使用关键字any(任意一个,相当于min)和all(所有的,相当于max)
           
          
         
        
        。
        
       
      
     
    
   
    
     
      
       
        
         作为查询条件出现:
        
       
      
     
    
   
    
     
      
       
        
         单行单列:子查询结果只有一个单元格
        
       
      
     
    
   
    
     
      
       
        select * from emp where sal > (select sal from emp where ename=”CLARK”)。
       
      
     
    
   
    
     
      
       
        
         单行多列:
        
       
      
     
    
   
    
     
      
       
        查询员工表中 工作 和 工资 与 MARTIN完全相同的员工信息
       
      
     
    
   
    
     
      
       
        select * from emp where (job,sal) in (select job,sal from emp where ename=”MARTIN”)
       
      
     
    
   
    
     
      
       
        
         多行单列:
        
       
      
     
    
   
    
     
      
       
        SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30);
        
       
      
     
    
   
    
     
      
       
        
         作为查询子表出现:
        
        
       
      
     
    
   
    
     
      
       
        
         多行多列:
        
       
      
     
    
   
    
     
      
       
        select e.ename,e.sal,d.dname,d.loc from emp e,(select dname,loc,deptno from dept) d where e.deptno = d.deptno and e.empno=7788
       
       
      
     
    
   
    
     
     
     
    
   
 
