数据库联表Sql语句(3个表)建一个新表(MySQL,Postgresql,SQL server)2

数据库联表Sql语句(3个表)建一个新表(MySQL,Postgresql,SQL server)2

若要依据 SELECT USERS.ID,USERS.NAME,USERS.EMAIL,USERS.ID_CARD,USERS.V_CARD,USERS.ADDRESS,v_card.type,v_card.amount,id_card.province FROM USERS JOIN v_card on USERS.V_CARD=v_card.v_card JOIN id_card on USERS.ID_CARD=id_card.id_card 这个查询结果创建一个新表,不同数据库系统有不同的实现方式,下面为你分别介绍。

MySQL

在 MySQL 里,你可以运用 CREATE TABLE ... AS 语句按照查询结果来创建新表,示例如下:

复制代码
CREATE TABLE combined_table AS
SELECT USERS.ID,
       USERS.NAME,
       USERS.EMAIL,
       USERS.ID_CARD,
       USERS.V_CARD,
       USERS.ADDRESS,
       v_card.type,
       v_card.amount,
       id_card.province
FROM USERS
JOIN v_card ON USERS.V_CARD = v_card.v_card
JOIN id_card ON USERS.ID_CARD = id_card.id_card;

这里的 combined_table 是新表的名称,CREATE TABLE ... AS 会把查询结果的列结构和数据复制到新表中。

PostgreSQL

PostgreSQL 同样支持 CREATE TABLE ... AS 语法,示例代码如下:

复制代码
CREATE TABLE combined_table AS
SELECT USERS.ID,
       USERS.NAME,
       USERS.EMAIL,
       USERS.ID_CARD,
       USERS.V_CARD,
       USERS.ADDRESS,
       v_card.type,
       v_card.amount,
       id_card.province
FROM USERS
JOIN v_card ON USERS.V_CARD = v_card.v_card
JOIN id_card ON USERS.ID_CARD = id_card.id_card;

此代码中的 combined_table 是新表名,该语句会依据查询结果生成新表。

SQL Server

在 SQL Server 中,可使用 SELECT ... INTO 语句创建新表,示例如下:

复制代码
SELECT USERS.ID,
       USERS.NAME,
       USERS.EMAIL,
       USERS.ID_CARD,
       USERS.V_CARD,
       USERS.ADDRESS,
       v_card.type,
       v_card.amount,
       id_card.province
INTO combined_table
FROM USERS
JOIN v_card ON USERS.V_CARD = v_card.v_card
JOIN id_card ON USERS.ID_CARD = id_card.id_card;

上述代码会把查询结果插入到新创建的 combined_table 中。

注意事项

  • 新表的列名和数据类型会依据查询结果自动推断生成。
  • 不同数据库系统对于表名、列名等的命名规则可能存在差异,要遵循对应数据库的规则。
  • 上述代码中的 combined_table 可替换为你实际想要的表名。

各数据库建表语句

根据你之前查询语句中涉及的三个表 USERSv_cardid_card,下面为你提供不同数据库系统下创建这三个表的 SQL 语句示例。

MySQL 建表语句

复制代码
-- 创建 USERS 表
CREATE TABLE IF NOT EXISTS USERS (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(255) NOT NULL,
    EMAIL VARCHAR(255) UNIQUE NOT NULL,
    ID_CARD VARCHAR(18) UNIQUE NOT NULL,
    V_CARD VARCHAR(50),
    ADDRESS VARCHAR(255)
);

-- 创建 v_card 表
CREATE TABLE IF NOT EXISTS v_card (
    v_card VARCHAR(50) PRIMARY KEY,
    type VARCHAR(50),
    amount DECIMAL(10, 2)
);

-- 创建 id_card 表
CREATE TABLE IF NOT EXISTS id_card (
    id_card VARCHAR(18) PRIMARY KEY,
    province VARCHAR(100)
);

PostgreSQL 建表语句

复制代码
-- 创建 USERS 表
CREATE TABLE IF NOT EXISTS USERS (
    ID SERIAL PRIMARY KEY,
    NAME VARCHAR(255) NOT NULL,
    EMAIL VARCHAR(255) UNIQUE NOT NULL,
    ID_CARD VARCHAR(18) UNIQUE NOT NULL,
    V_CARD VARCHAR(50),
    ADDRESS VARCHAR(255)
);

-- 创建 v_card 表
CREATE TABLE IF NOT EXISTS v_card (
    v_card VARCHAR(50) PRIMARY KEY,
    type VARCHAR(50),
    amount DECIMAL(10, 2)
);

-- 创建 id_card 表
CREATE TABLE IF NOT EXISTS id_card (
    id_card VARCHAR(18) PRIMARY KEY,
    province VARCHAR(100)
);

SQL Server 建表语句

复制代码
-- 创建 USERS 表
CREATE TABLE USERS (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    NAME NVARCHAR(255) NOT NULL,
    EMAIL NVARCHAR(255) UNIQUE NOT NULL,
    ID_CARD NVARCHAR(18) UNIQUE NOT NULL,
    V_CARD NVARCHAR(50),
    ADDRESS NVARCHAR(255)
);

-- 创建 v_card 表
CREATE TABLE v_card (
    v_card NVARCHAR(50) PRIMARY KEY,
    type NVARCHAR(50),
    amount DECIMAL(10, 2)
);

-- 创建 id_card 表
CREATE TABLE id_card (
    id_card NVARCHAR(18) PRIMARY KEY,
    province NVARCHAR(100)
);

代码解释

  • USERS
    • ID:在 MySQL 中是自增整数类型,PostgreSQL 用 SERIAL 实现自增,SQL Server 用 IDENTITY(1,1) 实现自增,作为主键唯一标识每个用户。
    • NAME:存储用户姓名,非空。
    • EMAIL:存储用户邮箱,要求唯一且非空。
    • ID_CARD:存储用户身份证号,唯一且非空。
    • V_CARD:用于关联 v_card 表。
    • ADDRESS:存储用户地址。
  • v_card
    • v_card:作为主键,唯一标识每张虚拟卡。
    • type:存储虚拟卡类型。
    • amount:存储虚拟卡金额,精确到小数点后两位。
  • id_card
    • id_card:作为主键,对应 USERS 表中的身份证号。
    • province:存储身份证对应的省份信息。

你可以根据实际使用的数据库系统选择相应的建表语句。

相关推荐
The Sheep 20234 分钟前
MongoDB与.Net6
数据库·mongodb
BryceBorder13 分钟前
SCAU--数据库
数据库·oracle·dba
有味道的男人18 分钟前
京东关键词API接口获取
数据库
罗光记35 分钟前
《人工智能安全治理研究报告(2025年)发布
数据库·其他·百度·新浪微博
202321336054 刘1 小时前
Linux常用命令分类整理
linux·运维·数据库
Q741_1471 小时前
海致星图招聘 数据库内核研发实习生 一轮笔试 总结复盘(2) 作答语言:C/C++ 哈夫曼编码 LRU
c语言·数据库·c++·算法·笔试·哈夫曼编码·哈夫曼树
齐 飞1 小时前
快速删除mysql表中所有数据-TRUNCATE TABLE
数据库·mysql
想摆烂的不会研究的研究生1 小时前
每日八股——Redis(2)
数据库·redis·缓存
optimistic_chen1 小时前
【Redis系列】主从复制
linux·数据库·redis·缓存·中间件·命令行·主从复制
一个天蝎座 白勺 程序猿1 小时前
KingbaseES 处理 PL/SQL 运行时错误全解析:从异常捕获到异常处理的实践指南
数据库·sql·oracle·kingbasees