• SQLite连接


    SQLite -连接

    SQLite的联接子句用于从数据库中的两个或多个表合并的记录。JOIN是用于通过使用共同的每个值从两个表结合域的装置。

    SQL定义了三个主要类型的连接:

    CROSS JOIN

    INNER JOIN

    OUTER JOIN

    在我们继续讨论之前,让我们考虑两个表公司和部门。

    我们已经看到INSERT语句填充表。

    所以我们假设公司表中的可用的记录列表:

    ID NAME AGE ADDRESS SALARY

    ---------- ---------- ---------- ---------- ----------

    1 Paul 32 California 20000.0

    2 Allen 25 Texas 15000.0

    3 Teddy 23 Norway 20000.0

    4 Mark 25 Rich-Mond 65000.0

    5 David 27 Texas 85000.0

    6 Kim 22 South-Hall 45000.0

    7 James 24 Houston 10000.0

    另一个表是部门有以下定义:

    CREATE TABLE DEPARTMENT(

    ID INT PRIMARY KEY NOT NULL,

    DEPT CHAR(50) NOT NULL,

    EMP_ID INT NOT NULL

    );

    这是填充部门表的INSERT语句的列表:

    INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)

    VALUES (1, 'IT Billing', 1 );

    INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)

    VALUES (2, 'Engineering', 2 );

    INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)

    VALUES (3, 'Finance', 7 );

    最后,我们有以下记录列表中可用DEPARTMENT:

     

     

     

    The CROSS JOIN

    交叉连接匹配每一行的第一个表和第二个表的每一行。如果输入表有xy,分别生成的表将x + y列。因为交叉连接可能会产生非常大的表,必须注意只有在适当的时候使用它们

    下面是交叉连接的语法:

    SELECT ... FROM table1 CROSS JOIN table2 ...

    根据上面的表格,我们可以编写一个交叉连接如下:

    sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

    上面的查询将产生以下结果:

    EMP_ID      NAME        DEPT
    
    ----------  ----------  ----------
    
    1           Paul        IT Billing
    
    2           Paul        Engineerin
    
    7           Paul        Finance
    
    1           Allen       IT Billing
    
    2           Allen       Engineerin
    
    7           Allen       Finance
    
    1           Teddy       IT Billing
    
    2           Teddy       Engineerin
    
    7           Teddy       Finance
    
    1           Mark        IT Billing
    
    2           Mark        Engineerin
    
    7           Mark        Finance
    
    1           David       IT Billing
    
    2           David       Engineerin
    
    7           David       Finance
    
    1           Kim         IT Billing
    
    2           Kim         Engineerin
    
    7           Kim         Finance
    
    1           James       IT Billing
    
    2           James       Engineerin
    
    7           James       Finance
    

     

    The INNER JOIN

    一个内部连接创建一个新的结果表通过结合两个表的列值(表一和表二)基于join-predicate。查询比较表一和表二的每一行的表来找到所有两行满足join-predicate连接谓词)。join-predicate当满意,列值为每个匹配配对的行AB的组合成一个结果行。

    一个内部连接是最常见的类型的连接,连接的默认类型。您可以使用内部关键字选择。

    以下是内部连接的语法:

    SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...

    为了避免冗余和措辞短,内加入条件可以用使用表达式声明。

    这个表达式指定一个或多个列的列表:

    SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...

    自然连接类似于JOIN...USING,只有它会自动测试之间的平等存在于两个表的每一列的值:

    SELECT ... FROM table1 NATURAL JOIN table2...

    根据上面的表格,我们可以编写一个内部连接如下:

    sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT

    ON COMPANY.ID = DEPARTMENT.EMP_ID;

    The OUTER JOIN

    外连接是一个扩展的内部连接。虽然SQL标准定义了三种类型的外部连接:,,和完全但SQLite只支持左外连接。    

    外部连接有一个条件是相同的内部连接,表示使用, USING NATURAL的关键字。最初的计算结果表相同的方式。一旦主加入计算,一个外部连接将采取多大的行从一个或两个表,null垫出来,并将它们附加到结果表。

    下面是左外连接的语法:

    SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...

    为了避免冗余和措辞短,外连接条件可以用使用表达式声明。

    这个表达式指定一个或多个列的列表:

    SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...

    根据上面的表格,我们可以编写一个内部连接如下:

    sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;

    上面的查询将产生以下结果:

    EMP_ID      NAME        DEPT
    
    ----------  ----------  ----------
    
    1           Paul        IT Billing
    
    2           Allen       Engineerin
    
                Teddy
    
                Mark
    
                David
    
                Kim
    
    7           James       Finance
  • 相关阅读:
    MVC的各个部分都有那些技术来实现?如何实现?
    spring入门学习
    动态 SQL 及安全性(Birt vs 润乾)
    报表的 SQL 植入风险及规避方法
    web 如何实现精准打印
    birt 报表与润乾报表对比
    ireport 与润乾报表对比
    银行存折套打续打功能 -- 报表如何记录上次打印的位置
    脚本中如何做填报数据校验
    鼠标悬停出现提示信息怎么做
  • 原文地址:https://www.cnblogs.com/orangebook/p/3525468.html
Copyright © 2020-2023  润新知