美文网首页
数据库3|SQL语法知识(2):表的连接、创建、复制

数据库3|SQL语法知识(2):表的连接、创建、复制

作者: 是蓝先生 | 来源:发表于2016-05-07 11:29 被阅读128次

    今天是5.7号。

    主要介绍表的连接、创建、复制等操作sql语言中对大小写是不敏感的。


    在SQL语言中join 用于把来自两个或多个表的行结合起来,先了解几种不同的连接的区别。

    1.png

    在介绍之前先说:

    自然连接

    自然连接 :即where等值连接,自然连接的一个特点是连接后的结果表中匹配的列只有一个,其他数据均再整合到一行。

         eg:SELECT  SNAME, S.DNAME, S.CNO, TNAME FROM  STUDENT AS S, TEACHER AS T
         WHERE  S.CNO = T.CNO ORDER BY SNAME
    

    (1).inner join
    关键字在表中存在至少一行数据完全匹配时返回行,即返回表1和表2中相交的记录行。

    SELECT column_name(s)
    FROM table1JOIN table2
    ON table1.column_name=table2.column_name;
    
    2.png

    (2).left join
    返回左表(table1)所有的行,右表中所有数据对应横向放在table1表后面,若table1中数据行较多,那么对于table2中的字段若在table1中不存在对应数据行,则用 NULL来填充。

    SELECT column_name(s) 
    FROM table1
    LEFT OUTER JOIN table2
    ON table1.column_name=table2.column_name;
    
    3.png

    (3).right join
    返回右表(table2)所有的行,右表中所有数据对应横向放在table1表后面,若table2中数据行较多,那么对于table1中的字段若在table2中不存在对应的数据行,则用 NULL来填充。

    SELECT column_name(s) 
    FROM table1
    RIGHT OUTER JOIN table2
    ON table1.column_name=table2.column_name;
    
    4.png

    (4).full join
    只要左表(table1)和右表(table2)中有一个 关键字存在匹配,则返回两个表的所有行,没有匹配的地方自动用NULL填充。

    SELECT column_name(s) 
    FROM table1
    FULL OUTER JOIN table2
    ON table1.column_name=table2.column_name;
    
    5.png

    (5).union(联合)
    SQL 中UNION 操作符用于合并两个或多个 SELECT 语句的结果。每个 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型,且各个列的次序相同。

    从 "Customers" 和 "Suppliers" 表中选取所有不同的城市(只有不同的值):

    SELECT City FROM Customers
    UNION
    SELECT City FROM Suppliers
    ORDER BY City;
    #如果一些客户和供应商来自同一个城市,每个城市只会列出一次。UNION 只会选取不同的值,若要使重复的值也选出来,则应将UNION换为UNION ALL。
    

    **
    **
    (6).select into(复制表)
    SELECT INTO 语句用于从一个表复制数据,然后把数据插入到另一个新表中。但是在pysql中会报错找不到变量city1,所以换为:insert into select语句。

    cur.execute( 
       '''insert into city1
          select *
          from city''')
    #上面是在city1表已经创建好的情况下进行的,如果想要在没有创建表的情况下,同时复制
    city表中的值可以如下:
    cur.execute(
        ''' Create table city3
        (    
       Select *
       from city)
        ''')
    

    (7).create/drop database(创建和删除数据库)

    创建一个名为 "my_db" 的数据库:
    CREATE DATABASE my_db;
    创建一个名为 "my_db" 的数据库:    
    DROP DATABASE my_db;
    

    (8).CREATE/drop TABLE (创建和删除表)

    创建表Persons
    CREATE TABLE Persons
    (PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    );
    数据类型一般有: varchar、integer、decimal、date、BOOLEAN 等等
    
    删除表Persons
    DROP TABLE Persons
    

    在创建表时经常会有很多约束要指明,具体如下:

    6.png

    (9).CREATE/drop index (创建和删除索引)
    索引即类似字典数据中的索引,同样可以在表中创建索引,以便更加快速高效地查询数据。注意:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

    在 "Persons" 表的 "LastName" 列上创建一个名为 "PIndex" 的索引:
    CREATE INDEX PIndex
    ON Persons (LastName)
    
    删除表中的索引:(不同的数据库的语法可能不同)
    ALTER TABLE table_name DROP INDEX index_name

    相关文章

      网友评论

          本文标题:数据库3|SQL语法知识(2):表的连接、创建、复制

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