SQLite CREATE TABLE 语句用于创建新表。创建表涉及为表提供名称并定义每列的名称和数据类型(例如 varchar、整数、日期等)。
语法
使用的语法CREATE TABLE 语句如下:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
.....
.....
);
示例:创建一个表
下面提到的语句创建一个名为Employee的表,其中包含五个列:EmpID、Name、City、Age和Salary。
CREATE TABLE Employee (
EmpID INT NOT NULL PRIMARY KEY,
Name VARCHAR(255) NOT NULL,
City VARCHAR(100),
Age INT,
Salary DECIMAL(18,2)
);
在上面的语句中,数据类型指定该列可以保存什么类型的数据。在数据类型之后,可以为每列提供可选属性,例如 NOT NULL 用于确保列不能有 NULL 值。有关详细信息,请参阅 SQLite 约束。
上述语句将创建一个名为 Employee 的空表包含五列。当表创建成功后,可以使用pragma table_info语句进行检查,如下所示:
pragma table_info('Employee');
这将产生如下所示的结果:
cid | Name | Type | notnull | dflt_value | pk |
---|---|---|---|---|---|
0 | EmpID | INT | 1 | 1 | |
1 | Name | VARCHAR(255) | 1 | 0 | |
2 | City | VARCHAR( 100) | 0 | 0 | |
3 | Age | INT | 0 | 0 | |
4 | Salary | DECIMAL(18,2) | 0 | 0 |
这表明Employee现在在数据库中可用于存储与员工相关的信息的数据库结构。
使用另一个表创建一个表
SQLite CREATE TABLE AS 语句用于通过复制现有表的列来创建表。以这种方式创建表时,新表将填充现有表中的记录(基于 SELECT 语句)。
语法
使用 CREATE TABLE 的语法SQLite 中的 AS 语句如下:
/* 复制所有列 */
CREATE TABLE new_table
AS SELECT * FROM old_table;
/* 复制选中的列 */
CREATE TABLE new_table
AS SELECT column_1, column2, ...
FROM old_table;
/* 从多个表复制列 */
CREATE TABLE new_table
AS SELECT column_1, column2, ...
FROM old_table_1, old_table_2, ...;
示例:
考虑一个名为 Employee 的数据库表,其中包含以下记录:
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | New York | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
4 | Kim | Amsterdam | 30 | 3100 |
5 | Ramesh | New Delhi | 28 | 3000 |
6 | Huang | Beijing | 28 | 2800 |
复制表的所有列:以下语句用于创建一个名为Employee_PT 通过复制 Employee 表的所有列。新表将包含 Employee 表中员工年龄小于 28 岁的记录。
CREATE TABLE Employee_PT
AS SELECT * FROM Employee
WHERE Age < 28;
-- 查看结果
SELECT * FROM Employee_PT;
这将产生如下所示的结果:
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | New York | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
复制表的选定列:使用 CREATE TABLE AS 语句时也可以复制选定的列。在下面的示例中,复制的列为:EmpID、Name 和 City。
CREATE TABLE Employee_PT
AS SELECT EmpID, Name, City FROM Employee
WHERE Age < 28;
-- 查看结果
SELECT * FROM Employee_PT;
这将产生如下所示的结果:
EmpID | Name | City |
---|---|---|
1 | John | London |
2 | Marry | New York |
3 | Jo | Paris |
使用AS子句:AS子句可用于重命名列名。请参阅下面的示例:
CREATE TABLE Employee_PT
AS SELECT EmpID, Name AS EmployeeName, City FROM Employee
WHERE Age < 28;
-- 查看结果
SELECT * FROM Employee_PT;
这将产生如下所示的结果:
EmpID | EmployeeName | City |
---|---|---|
1 | John | London |
2 | Marry | New York |
3 | Jo | Paris |
从多个表复制列:考虑再添加一个表名为 Contact_Info,包含以下记录:
Phone_Number | EmpID | Address | Gender |
---|---|---|---|
+1-8054098000 | 2 | Brooklyn, New York, USA | F |
+33-147996101 | 3 | Grenelle, Paris, France | M |
+31-201150319 | 4 | Geuzenveld, Amsterdam, Netherlands | F |
+86-1099732458 | 6 | Yizhuangzhen, Beijing, China | M |
+65-67234824 | 7 | Yishun, Singapore | M |
+81-357799072 | 8 | Koto City, Tokyo, Japan | M |
以下语句用于创建一个名为 Employee_PT 的新表,该表将包含 Employee 和 Contact_Info 表的选定列。新表将包含基于 INNER JOIN 的记录。
CREATE TABLE Employee_PT
AS SELECT A.EmpID, A.Name, A.City, B.Address
FROM Employee A
INNER JOIN Contact_Info B
ON A.EmpID = B.EmpID;
-- 查看结果
SELECT * FROM Employee_PT;
这将产生如下所示的结果:
EmpID | Name | City | Address |
---|---|---|---|
2 | Marry | New York | Brooklyn, New York, USA |
3 | Jo | Paris | Grenelle, Paris, France |
4 | Kim | Amsterdam | Geuzenveld, Amsterdam, Netherlands |
6 | Huang | Beijing | Yizhuangzhen, Beijing, China |