美文网首页
复制表select into from和拷贝表insert in

复制表select into from和拷贝表insert in

作者: 酸甜柠檬26 | 来源:发表于2019-10-28 13:17 被阅读0次

    1、复制表( 只复制结构, 源表名:a新表名:b)
    select * into b from a where 1=2;

    将表结构都复制到新表中

    在mysql中上述语句报错:Undeclared variable: b
    原因:在mysql中不支持select * into b from a这种语法
    改进:1、create table b select * from a
    2、insert into b select * from a
    这种语法是将a表的所有语法复制到b表中,前提是b表已经存在了
    从多个表中查询数据
    INSERT INTO a(field1,field2)
    SELECT * FROM (SELECT f1,f2 FROM b JOIN c) AS tb
    tb存在的意义:在mysql中任何一个派生出来的新表都必须有别名

    3、mysql在插入数据前判断数据是否存在,若不存在,再插入
    语法:

    INSERT INTO movie ( id, category ) 
    SELECT 1,11
    FROM dual
    WHERE
        NOT EXISTS ( SELECT * FROM movie WHERE id = 4 );
    

    (1)dual:dual 是一张虚拟表用来构成select语句的语法规则,mysql中,dual表中没有任何数据,只是构成完整的语法规则。oracle保证dual里面只有一条记录。
    (2)from dual:上面的代码中,from dual可以删除不写,原代码仍然可以运行成功,
    原因:在Mysql和SQL Server中可以直接:
    select 1 不需要加from 表名就可以执行
    (3)把dual表换成movie表,如果movie表中有3条记录,那么执行此语句后,movie表中会被添加3条记录(1,11),原因,当判断where not exists时,会对movie表的每一条记录执行一次:where not exists(select * from movie where id=4)。
    当不写from movie 或换成 from dual时,只会单独执行后面的where子句,对一个movie整体执行依稀where,所以此时只添加一条记录。

    关于exists:
    1、最常用的if not exists
    create table if not exists A
    如果表A不存在(返回true)则创建表
    2、select 语句中使用exists
    select a.id,a.name from user
    where exists (select * from class where a.class_id = c.class_id)

    相关文章

      网友评论

          本文标题:复制表select into from和拷贝表insert in

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