第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

SQL Select Into

1. 定義

慕課解釋:Select Into既可以給表做備份,也可以通過某張表的數(shù)據(jù)新建另一張表。

2. 前言

本小節(jié),我們將介紹一個(gè)數(shù)據(jù)備份利器——Select Into。

在數(shù)據(jù)維護(hù)工作中,我們經(jīng)常需要對(duì)某張重要的數(shù)據(jù)表做備份,又或者只對(duì)某張表中的某些重要字段做備份,甚至需要從一張表從提取某些字段組織成另一張表。

對(duì)于這些需求,雖然通過多條 SQL 語(yǔ)句來實(shí)現(xiàn),但是 Select Into 讓它們變得更加簡(jiǎn)單。

本小節(jié)測(cè)試數(shù)據(jù)如下,請(qǐng)先在數(shù)據(jù)庫(kù)中執(zhí)行:

DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
  id int PRIMARY KEY,
  username varchar(20),
  age int,
  birthday date
);
INSERT INTO imooc_user(id,username,age,birthday)
VALUES (1,'peter', 18, '2002-10-21'), (2,'pedro', 24, '1996-03-15'), 
(3,'jerry', 28, '1992-02-13'), (4,'mike', 38, '1982-04-01');

3. 初級(jí)使用

Select Into 可以將數(shù)據(jù)從某一張表(表 A)備份到另一張表(表 B)中。

使用語(yǔ)法如下:

SELECT [col] INTO [new_table_name] FROM [table_name];

其中col表示字段名,此處可以使用*來表示所有字段,new_table_name表示備份表名稱,table_name是被備份表名稱。

3.1 例1 Select Into 備份用戶表

請(qǐng)書寫 SQL 語(yǔ)句,備份imooc_user表,但剔除掉其中的birthday字段,新表名稱為imooc_user_backup。

分析:

按照語(yǔ)法直接使用 Select Into 即可,但需剔除掉birthday字段。

語(yǔ)句:

整理可得語(yǔ)句如下:

SELECT id,username,age INTO imooc_user_backup FROM imooc_user;

執(zhí)行成功后,結(jié)果如下:

+----+----------+-----+
| id | username | age |
+----+----------+-----+
| 1  | peter    | 18  |
| 2  | pedro    | 24  |
| 3  | jerry    | 28  |
| 4  | mike     | 38  |
+----+----------+-----+

注意: MySQL 不支持 Select Into 直接創(chuàng)建數(shù)據(jù)表,你可以使用如下方式替代:

CREATE TABLE imooc_user_backup(SELECT id,username,age FROM imooc_user);

4. 高級(jí)使用

Select Into 還可以搭配 Where 以及 Join 來更加有選擇性備份。

使用語(yǔ)法如下:

SELECT [col] INTO [new_table_name] FROM [table_name] WHERE [col] [condition];
SELECT [col] INTO [new_table_name] FROM [table_name1] JOIN [table_name2] ON [condition];

其中col表示字段名稱,table_name表示數(shù)據(jù)表名稱,condition表示條件子句,數(shù)字1、2表示多張表。

4.1 例2 Select Into 搭配 Where

請(qǐng)書寫SQL語(yǔ)句,備份imooc_user表中id大于2的記錄,新表名稱為imooc_user_backup

分析:

按照語(yǔ)法使用 Select Into 搭配 Where,且過濾條件為id > 2。

語(yǔ)句:

整理可得語(yǔ)句如下:

SELECT * INTO imooc_user_backup FROM imooc_user WHERE id > 2;

執(zhí)行成功后,結(jié)果如下:

+----+----------+-----+------------+
| id | username | age | birthday   |
+----+----------+-----+------------+
| 3  | jerry    | 28  | 1992-02-13 |
| 4  | mike     | 38  | 1982-04-01 |
+----+----------+-----+------------+

MySQL 不支持 Select Into,可使用如下語(yǔ)句替代:

CREATE TABLE imooc_user_backup LIKE imooc_user;
INSERT INTO imooc_user_backup SELECT * FROM imooc_user WHERE id > 2;

4.2 例3 Select Into 搭配 Join

使用 Join 之前,我們需要新建一張 imooc_user_score 表與 imooc_user 表關(guān)聯(lián),新建語(yǔ)句如下:

DROP TABLE IF EXISTS imooc_user_score;
CREATE TABLE imooc_user_score
(
  id int PRIMARY KEY,
  user_id int references imooc_user(id),
  user_score int
);
INSERT INTO imooc_user_score VALUES(1,1,10), (2,2,15);

請(qǐng)書寫 SQL 語(yǔ)句,備份imooc_userimooc_user_score表,要求新表?yè)碛杏脩?id,用戶積分,用戶名這三個(gè)字段,且名稱為imooc_user_score_backup。

分析:

使用 Select Into 搭配 Join,連接條件為imooc_user.id = imooc_user_score.user_id。

語(yǔ)句:

整理可得語(yǔ)句如下:

SELECT imooc_user.id,username,user_score INTO imooc_user_score_backup FROM imooc_user
JOIN imooc_user_score ON imooc_user.id = imooc_user_score.user_id;

執(zhí)行成功后,結(jié)果如下:

+----+----------+------------+
| id | username | user_score |
+----+----------+------------+
| 1  | peter    | 10         |
| 2  | pedro    | 15         |
+----+----------+------------+

MySQL 不支持 Select Into,可使用如下語(yǔ)句替代:

CREATE TABLE imooc_user_score_backup 
(
  id int PRIMARY KEY,
  username varchar(20),
  user_score int
);
INSERT INTO imooc_user_score_backup 
SELECT imooc_user.id,username,user_score
FROM imooc_user
JOIN imooc_user_score ON imooc_user.id = imooc_user_score.user_id;

5. 小結(jié)

  • Select Into 不常用于項(xiàng)目開發(fā),但卻是數(shù)據(jù)庫(kù)運(yùn)維的利器。
  • MySQL 數(shù)據(jù)庫(kù)不支持 Select Into,而在 PostgreSQL 中卻可以良好使用,如果你使用 MySQL 則需要有良好的 SQL 基礎(chǔ)。