数据库操作之SELECT...INTO语法(较全)

您所在的位置:网站首页 sql语句两个表合并创建一个新表的函数 数据库操作之SELECT...INTO语法(较全)

数据库操作之SELECT...INTO语法(较全)

2024-07-14 13:43| 来源: 网络整理| 查看: 265

一丶SELECT INTO 语句

        SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。

        SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

二丶SQL SELECT INTO 语法

一、SELECT…INTO介绍         SELECT…INTO用来将查询结果存储在变量或者写入文件中。

SELECT ... ... [INTO OUTFILE 'file_name'         [CHARACTER SET charset_name]         export_options       | INTO DUMPFILE 'file_name'       | INTO var_name [, var_name]]

通常有以下三种用法:

        1.SELECT…INTO var_list,将查询结果存储在变量中;         2.SELECT…INTO OUTFILE 将查询结果写入一个文件,还可以指定列和行终止符以生成特定的输出格式。         3.SELECT…INTO DUMPFILE 将单行数据写入文件,没有任何格式。         在SELECT的语法展示中,INTO子句在整个语句的尾部。但是让INTO子句紧跟select_expr列表后。         一个INTO子句不应该在内嵌的SELECT中使用,因为这样一个SELECT必须将它的查询结果返回给外部上下文。

您可以把所有的列插入新表:

SELECT * INTO new_table [IN externaldatabase] FROM old_table

或者只把希望的列插入新表:

SELECT column_name1,column_name2... INTO new_table [IN externaldatabase] FROM old_table

二丶SQL SELECT INTO 实例

1丶SQL SELECT INTO 实例 - 制作备份复件

下面的例子会制作 "persons" 表的备份复件:

SELECT * INTO persons_backup (备份表) FROM persons (旧表)

IN 子句可用于向另一个数据库中拷贝表:

SELECT * INTO Persons IN 'Backup.mdb' FROM Persons

如果我们希望拷贝某些域,可以在 SELECT 语句后列出这些域:

SELECT person_name,person_id,person_career... INTO persons_backup FROM persons

2.SQL SELECT INTO 实例 - 带有 WHERE 子句

我们也可以添加 WHERE 子句。

下面的例子通过从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表:

SELECT last_name, first_name INTO persons_backup FROM persons WHERE city='Beijing'

3.SQL SELECT INTO 实例 - 被连接的表

从一个以上的表中选取数据也是可以做到的。

下面的例子会创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:

SELECT persons.last_name, orders.order_no INTO persons_order_backup FROM persons INNER JOIN orders ON persons.person_id=orders.order_id

语法错误注意

需要注意的是嵌套查询部分最后一定要有设置表别名,如下:

SELECT * FROM (SELECT f1,f2 FROM b JOIN c) AS tb

即最后的AS tb是必须的(tb这个名称可以随意取),即指定一个别名,每个派生出来的新表都必须指定别名,否则在mysql中会报如下错误:

ERROR 1248 (42000): Every derived TABLE must have its own alias

另外,MySQL中INSERT INTO SELECT不能加VALUES,即不能写成如下形式:

INSERT INTO db1_name(field1,field2) VALUES SELECT field1,field2 FROM db2_name

三、SELECT INTO FROM与INSERT INTO SELECT区别:

1.INSERT INTO SELECT语句 语句形式为:INSERT INTO table2(field1,field2,…) select value1,value2,… from table1 要求目标表table2必须存在,由于目标表table2已经存在,所以我们除了插入源表table1的字段外,还可以插入常量

2.SELECT INTO FROM语句 语句形式为:SELECT vale1, value2 INTO table2 FROM table1 要求目标表table2不存在,因为在插入时会自动创建表table2,并将table1中指定字段数据复制到table2中。

比较两种语句的差别,选择适合自己情况的语句。 此外,ispass是个经过处理的字段,其值类型可能无法自动创建,所以,建议使用第一种形式的语句,建立一个表,然后再插入查询。  

 但是SELECT ... INTO.. 用法不适用于MySQL直接备份表结构和数据,一些种方法可以代替,如下:

#MYSQL不支持:  SELECT * INTO new_table_name FROM old_table_name; 这是sql server中的用法 #替代方法:  CREATE table new_table_name (SELECT * FROM old_table_name); 或 INSERT INTO new_table_name(field1,field2,…) select value1,value2,… from old_table_name

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3