啊啊啊啊...狗蛋的学校编译器坑我6分大题....


关于本次期末考试

关于期末考试,感觉难度差差不多就那样,中规中矩,但是,我还是被坑了两道编程题....
这次的大题考察了两个平时实验报告没有的题型,分别是:

  • 怎么通过SQL代码创建新表,然后新表的数据来源是数据库中的已有表。
  • 要求在指定的两列之间插入一个新列。

第一个问题其实不难,有以下方法:

第一种

sql
-- 创建新表并复制数据(结构+数据)
SELECT *
INTO 新表名
FROM 已有表名
[WHERE 条件];

第二种 带条件创建(Oracle/PostgreSQL语法)

sql
-- 创建表时直接筛选数据(Oracle/PostgreSQL)
CREATE TABLE 新表名 AS
SELECT 列1, 列2 
FROM 已有表名
WHERE 条件;

-- 示例:创建高薪员工表
CREATE TABLE high_salary_employees AS
SELECT employee_id, name, salary
FROM employees
WHERE salary > 10000;

第三种 CREATE TABLE + INSERT(分步操作)

sql
-- 步骤1:创建空表(复制结构)
CREATE TABLE 新表名 AS
SELECT * FROM 已有表名
WHERE 1=0;  -- 只复制结构不复制数据

-- 步骤2:插入数据
INSERT INTO 新表名
SELECT * FROM 已有表名
[WHERE 条件];

-- 示例:创建销售部门员工表
CREATE TABLE sales_employees AS
SELECT * FROM employees WHERE 1=0;

INSERT INTO sales_employees
SELECT * FROM employees 
WHERE department = 'Sales';

第四种 复制表结构+部分数据(SQL Server)

sql
-- 使用WHERE 1=0只复制结构
SELECT * 
INTO 新表名
FROM 已有表名
WHERE 1=0;

-- 再插入需要的数据
INSERT INTO 新表名
SELECT * FROM 已有表名
WHERE salary > 5000;

其实第一种和第二种方法我想到了,第一种想到的不完全,只想到了一个into,所以当时代码并没有完全敲出来。
但是第二种方法,我完整的敲出来了,但是学校的编译器不知道为什么在 as 那里给我标红了,我当时以为错了,就没运行了😭


然后第二个问题,就是要求在指定的两列之间插入一个新列。 代码:

sql
ALTER TABLE 表名
ADD 新列名 数据类型 
[约束条件] 
AFTER 指定列名;  -- 在指定列后插入

这个我当时也想到了,但是不知道为什么,在指定列名那里编译器给我爆红了😭


总结感慨

反正就挺无语的吧,两道题,都想到正确思路了,但是因为编译器爆红我就没运行了。罢了,反正不挂科,但是想要上90很难了,有点小悲伤。