Create a copy of a table | 复制表格数据 | MySQL

Create a copy of a table

将一个表的数据复制到另一个表上

案例一

将order表中的数据复制到另一张叫orders_archive(订单存档)的表里

假设order表中有10行数据,那么按照之前学习的INSERT INTO语句,则需要编写10行相关代码

现在示范一个更方便的方法——快速将一张表中所有数据复制到另一张表上面

第一步:创建一张新表:订单存档
需要使用语句CREATE TABLE AS

CREATE TABLE orders_archived AS
SELECT * FROM orders

执行代码后,点击更新按钮即可查看到新建的表
在这里插入图片描述
行和列数据一致
在这里插入图片描述

但该表没有主键,也没有勾选自动递增
在这里插入图片描述

因此使用该方法创建表的时,MySQL会忽略这类属性

案例二

复制某表中一部分记录到新表
我们先清空orders_archived表

右键该表,并选择截断表(删除表中所有行)
在这里插入图片描述
执行结果在这里插入图片描述
此时复制订单表中一部分记录(eg:2019年之前下的订单)到该表中
我们先确认一下需要的数据包括哪些
在这里插入图片描述
执行代码

INSERT INTO orders_archived
-- 将select语句变为INSERT INTO的子查询语句
SELECT *
FROM orders
WHERE order_date < '2019-01-01'

注意这里SELECT代替了VALUES直接将筛选出的值插入了
结果
在这里插入图片描述
但该方法依旧忽视了列属性
在这里插入图片描述

练习

将invoice表的部分数据复制到新表invoice_archive
但在这张表中不想有客户id列,想要客户id名的列、支付过的发票列(payment_date决定了该发票是否有付款)

思路:连接该表和顾客表
将该查询作为CREATE TABLE 语句中的一段子查询
返回的时候只选择有付款日期的发票

我的答案一

Create table invoices_archive
(
SELECT 
	c.first_name,
	c.last_name,
    i.payment_date
FROM invoices i
JOIN sql_store.customers c
	ON c.customer_id = i.client_id
WHERE i.payment_date IS NOT NULL
)

在这里插入图片描述
错误
表就整错了,要的是client

我的答案二

Create table invoices_archive
(
SELECT 
	c.name,
    i.payment_date
FROM invoices i
JOIN clients c
	ON c.client_id = i.client_id
WHERE i.payment_date IS NOT NULL
)

(用JOIN USING语句会更方便噢)
在这里插入图片描述

标准答案

USE sql_invoicing;

Create table invoices_archive AS
(
SELECT 
	invoice_id,
    number,
    c.name AS client,
    invoice_total,
    payment_total,
    invoice_date,
    payment_date,
    due_date
FROM invoices -- 因为本身上述select所需列都是来源于from的发票表,所以不用加前缀
JOIN clients c
	USING (client_id)
WHERE payment_date IS NOT NULL
)

在这里插入图片描述

和自己写的差不多,只是返回的列变多了,棒棒!但是我在CREATE时,后面并没有加AS,但依然执行成功

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值