• [转][SQL]表连接(JOIN)收藏


    Student: Book:
    ID Name SID Book
    1 feng 1 abc
    2 yong null def
    [Inner] Join
    ID Name SID Book
    1 feng 1 abc
    Left [Outer] Join: 左表所有行, 右表没有匹配行则均为null
    ID Name SID Book
    1 feng 1 abc
    2 yong null null
    Right [Outer] Join
    ID Name SID Book
    1 feng 1 abc
    null null null def
    Full [Outer] Join
    ID Name SID Book
    1 feng 1 abc
    2 yong null null
    null null null def
    CROSS JOIN
    ID Name SID Book
    1 feng 1 abc
    1 feng null def
    2 yong 1 abc
    2 yong null def

    现在有三张表  
      a表    
      id   goodsid   数量  
      1             1           12  
      2             2           13  
       
      b表  
      id   name   unitid  
      1     材料1         1  
      2     材料2         2  
       
      c表  
      unitid     name  
      2               吨  
      3               kg  

    如果采用select   b.name,c.name,a.数量   from   a,b,c   where   a.goodsid     =   b.id   and   b.unitid=c.unitid   就无法检索出材料一,

    此时应该用:

    select   b.name,c.name,a.数量    
      from   a   left   outer   join   b   on   a.goodsid     =   b.id    
      left   outer   join   c   on   b.unitid=c.unitid

    子查询例子:

    1、单行子查询
            select ename,deptno,sal
            from emp
            where deptno=(select deptno from dept where loc='NEW YORK');

         2、多行子查询
            SELECT ename,job,sal
            FROM EMP
            WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE 'A%');

         3、多列子查询
            SELECT deptno,ename,job,sal
            FROM EMP
            WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMP GROUP BY deptno);

         4、内联视图子查询
           (1)SELECT ename,job,sal,rownum
              FROM (SELECT ename,job,sal FROM EMP ORDER BY sal);
           (2)SELECT ename,job,sal,rownum
              FROM ( SELECT ename,job,sal FROM EMP ORDER BY sal)
              WHERE rownum<=5;
     
         5、在HAVING子句中使用子查询
            SELECT deptno,job,AVG(sal) FROM EMP GROUP BY deptno,job HAVING AVG(sal)>(SELECT sal FROM EMP WHERE ename='MARTIN');

    INNER JOIN 查询:

    FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表X ON Member.字段号=表X.字段号

    Tips:

    如下两段代码等价

    Code

    UNION操作:

    UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 Select DISTINCT)。 union只是将两个结果联结起来一起显示,并不是联结两个表………… 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列,UNION 的语法如下:

    [SQL 语句 1]
    UNION
    [SQL 语句 2] 
     

  • 相关阅读:
    React Native商城项目实战08
    React Native商城项目实战07
    React Native商城项目实战05
    React Native商城项目实战06
    React Native商城项目实战04
    React Native商城项目实战03
    React Native商城项目实战02
    单选框input:radio
    myDate97用法
    STRUTS2配置动态页面
  • 原文地址:https://www.cnblogs.com/yanluckly/p/1397013.html
Copyright © 2020-2023  润新知