SELECT语句

SELECT column_name(s) FROM table_name

查询一个服务器的所有数据库
Show databases

查询一个数据库的所有表
Show tables

查询一个表的所有字段
Show columns from table_name

SELECT语句和WHERE子句

SELECT [*] FROM [TableName] WHERE [condition1]

SELECT语句与WHERE和/或子句

SELECT [*] FROM [TableName] WHERE [condition1] [AND [OR]] [condition2]…

WHERE子句中可以使用以下运算符:
运算符 描述
= 等于
<> 不等于。 注意:在某些版本的SQL中,这个操作符可能写成!=

大于
< 小于
= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 为列指定多个可能的值

SELECT语句与ORDER BY

SELECT column_name() FROM table_name ORDER BY column_name() ASC or DESC

INSERT INTO语句

INSERT INTO table_name (column, column1, column2, column3, …) VALUES (value, value1, value2, value3 …)

DELETE语句

DELETE FROM tableName WHERE someColumn = someValue

SQL Select(选择) 语法

SELECT column1, column2, … FROM table_name;

SQL SELECT DISTINCT(选择不同) 语法

SELECT DISTINCT column1, column2, … FROM table_name; 
 以下SQL语句列出了不同(distinct)column的数量: 
 SELECT COUNT(DISTINCT column) FROM table_name;

SQL WHERE Clause(查询子句)

SELECT column1, column2, … FROM table_name WHERE condition; 
 SQL AND, OR and NOT(与,或不是运算符) 
 AND语法 
 SELECT column1, column2, … FROM table_name WHERE condition1 AND condition2 AND condition3 …; 
 OR语法 
 SELECT column1, column2, … FROM table_name WHERE condition1 OR condition2 OR condition3 …; 
 NOT语法 
 SELECT column1, column2, … FROM table_name WHERE NOT condition; 
 结合 AND & OR 
 SELECT * FROM table_name WHERE condition1 AND (condition2 OR condition3); 
 结合AND,OR和NOT 
 SELECT * FROM table_name WHERE NOT condition1 AND NOT condition2;SQL ORDER BY 语法 
 SELECT column1, column2, … FROM table_name ORDER BY column1, column2, … ASC|DESC; 
ORDER BY 多列 
 SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC;

SQL INSERT INTO 语法
INSERT INTO 语句可以用两种形式编写。
第一个表单没有指定要插入数据的列的名称,只提供要插入的值:
INSERT INTO table_name (column1, column2, column3, …) VALUES (value1, value2, value3, …);
如果要为表中的所有列添加值,则不需要在SQL查询中指定列名称。但是,请确保值的顺序与表中的列顺序相同。INSERT INTO语法如下所示:
INSERT INTO table_name VALUES (value1, value2, value3, …);

SQL NULL Values(空值)
什么是SQL NULL值?
SQL 中,NULL 用于表示缺失的值。数据表中的 NULL 值表示该值所处的字段为空。
具有NULL值的字段是没有值的字段。
如果表中的字段是可选的,则可以插入新记录或更新记录而不向该字段添加值。然后,该字段将被保存为NULL值。
值为 NULL 的字段没有值。尤其要明白的是,NULL 值与 0 或者包含空白(spaces)的字段是不同的。
IS NULL语法
SELECT column_names FROM table_name WHERE column_name IS NULL;
IS NOT NULL语法
SELECT column_names FROM table_name WHERE column_name IS NOT NULL;

SQL UPDATE 语句(更新表中的记录)
SQL UPDATE 语法
UPDATE table_name SET column1 = value1, column2 = value2, … WHERE condition;
请注意
更新表中的记录时要小心!
要注意SQL UPDATE 语句中的 WHERE 子句!
WHERE子句指定哪些记录需要更新。如果省略WHERE子句,所有记录都将更新!

SQL Delete 语句(删除表中的记录)
SQL DELETE 语法
DELETE FROM table_name WHERE condition;
删除所有数据
DELETE FROM table_name;
或者
DELETE * FROM table_name;

SQL SELECT TOP, LIMIT, ROWNUM
SQL SELECT TOP 子句
• SELECT TOP 子句用于指定要返回的记录数量。
• SELECT TOP子句在包含数千条记录的大型表上很有用。返回大量记录会影响性能。
注:并不是所有的数据库系统都支持SELECT TOP子句。MySQL支持LIMIT子句来选择有限数量的记录,而Oracle使用ROWNUM。
SQL Server / MS Access 语法
SELECT TOP number|percent column_name(s) FROM table_name WHERE condition;
MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的
MySQL语法:
SELECT column_name(s) FROM table_name WHERE condition LIMIT number;
实例:
SELECT * FROM Persons LIMIT 5;
Oracle 语法
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number;
实例:
SELECT * FROM Persons WHERE ROWNUM <=5;
添加一个条件
MySQL
SELECT * FROM Customers WHERE Country=’Germany’ LIMIT 3;

Oracle
SELECT * FROM Customers WHERE Country=’Germany’ AND ROWNUM <= 3;

SQL LIKE 运算符
SQL LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
有两个通配符与LIKE运算符一起使用:
• % - 百分号表示零个,一个或多个字符
• _ - 下划线表示单个字符
注意: MS Access使用问号(?)而不是下划线(_)。
百分号和下划线也可以组合使用!
SQL LIKE 语法
SELECT column1, column2, … FROM table_name WHERE columnN LIKE pattern;
提示:您还可以使用AND或OR运算符组合任意数量的条件。
下面是一些使用’%’和’_’通配符显示不同LIKE运算符的例子:
LIKE 运算符 描述
WHERE CustomerName LIKE ‘a%’ 查找以“a”开头的任何值
WHERE CustomerName LIKE ‘%a’ 查找以“a”结尾的任何值
WHERE CustomerName LIKE ‘%or%’ 在任何位置查找任何具有“or”的值
WHERE CustomerName LIKE ‘_r%’ 在第二个位置查找任何具有“r”的值
WHERE CustomerName LIKE ‘a_%_%’ 查找以“a”开头且长度至少为3个字符的值
WHERE ContactName LIKE ‘a%o’ 找到以”a”开头,以”o”结尾的值
SQL Wildcards 通配符
SQL Wildcards通配符
通配符用于替换字符串中的任何其他字符。
通配符与SQL LIKE运算符一起使用。在WHERE子句中使用LIKE运算符来搜索列中的指定模式。
有两个通配符与LIKE运算符一起使用:
• %- 百分号表示零个,一个或多个字符
• _- 下划线表示单个字符
注意:MS Access使用问号(?)而不是下划线(_)。
在MS Access和SQL Server中,你也可以使用:
• [charlist] - 定义要匹配的字符的集合和范围
• [^charlist]或[!charlist] - 定义不匹配字符的集合和范围
通配符也可以组合使用!
下面是一些使用’%’和’_’通配符显示不同LIKE运算符的例子:
LIKE运算符 描述
WHERE CustomerName LIKE ‘a%’ 查找以“a”开头的任何值
WHERE CustomerName LIKE ‘%a’ 查找以”a”结尾的任何值
WHERE CustomerName LIKE ‘%or%’ 在任何位置查找任何具有“or”的值
WHERE CustomerName LIKE ‘_r%’ 在第二个位置查找任何具有“r”的值
WHERE CustomerName LIKE ‘a_%_%’ 查找以“a”开头并且长度至少为3个字符的值
WHERE ContactName LIKE ‘a%o’ 查找以“a”开始并以“o”结尾的任何值
使用 SQL % 通配符
以下SQL语句选择所有客户City以字母“ber”开头:
SELECT * FROM Customers
WHERE City LIKE ‘ber%’;
以下SQL语句选择City中包含“es”模式的所有客户:
SELECT * FROM Customers
WHERE City LIKE ‘%es%’;
使用 SQL _ 通配符
以下SQL语句选择City以任意字符开头,然后是“erlin”的所有客户:
SELECT * FROM Customers
WHERE City LIKE ‘_erlin’;
以下SQL语句选择City开头为“L”,后面是任意字符,后面是“n”,后面是任意字符,后面是“on”的所有客户:
SELECT * FROM Customers
WHERE City LIKE ‘L_n_on’;
使用 SQL [charlist] 通配符
以下SQL语句选择所有客户City以”b”、”s”或”p”开头:
SELECT * FROM Customers
WHERE City LIKE ‘[bsp]%’;
以下SQL语句选择“City”以“a”、“b”或“c”开头的所有客户:
SELECT * FROM Customers
WHERE City LIKE ‘[a-c]%’;
以下SQL语句选择所有客户City不以”b”、”s”或”p”开头:
SELECT * FROM Customers
WHERE City LIKE ‘[!bsp]%’;
使用[!charlist]通配符
以下两个SQL语句选择所有客户的城市不以“b”,“s”或“p”开头:
SELECT * FROM Customers WHERE City LIKE ‘[!bsp]%’;
或者
SELECT * FROM Customers WHERE City NOT LIKE ‘[bsp]%’;

SQL IN 运算符
IN运算符允许您在WHERE子句中指定多个值。
IN运算符是多个OR条件的简写。
SQL IN 语法
SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, …);
或者
SELECT column_name(s) FROM table_name WHERE column_name IN (SELECT STATEMENT);
以下SQL语句选择来自同一国家的所有客户作为供应商:
SELECT * FROM Customers WHERE Country IN (SELECT Country FROM Suppliers);

SQL BETWEEN运算符
BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。
BETWEEN运算符选择给定范围内的值。值可以是数字,文本或日期。
BETWEEN运算符是包含性的:包括开始和结束
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
以下SQL语句选择价格在10到20之间的所有产品:
SELECT*FROMProducts
WHERE Price BETWEEN 10 AND 20;
要显示前面示例范围之外的产品,请使用NOT BETWEEN:
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
带有 IN 的 BETWEEN 操作符实例
以下SQL语句选择价格在10到20之间但CategoryID不是1、2或3的所有产品:
SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);
带有文本值的 BETWEEN 操作符实例
以下SQL语句选择所有带有ProductName BETWEEN’Carnarvon Tigers’和’Mozzarella di Giovanni’的产品:
SELECT * FROM Products
WHERE ProductName BETWEEN ‘Carnarvon Tigers’ AND ‘Mozzarella di Giovanni’
ORDER BY ProductName;
带有文本值的 NOT BETWEEN 操作符实例
以下SQL语句选择ProductName不是BETWEEN’Carnarvon Tigers’和’Mozzarella di Giovanni’的所有产品:
SELECT * FROM Products
WHERE ProductName NOT BETWEEN ‘Carnarvon Tigers’ AND ‘Mozzarella di Giovanni’
ORDER BY ProductName;
带有日期值的 BETWEEN 操作符实例
以下 SQL 语句选取 OrderDate 介于 ‘04-July-1996’ 和 ‘09-July-1996’ 之间的所有订单:
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;

SQL 通用数据类型
数据类型定义了存储在列中的值的类型。数据库表中的每一列都需要有一个名称和数据类型。
SQL 开发人员必须在创建 SQL 表时决定表中的每个列将要存储的数据的类型。数据类型是一个标签,是便于 SQL 了解每个列期望存储什么类型的数据的指南,它也标识了 SQL 如何与存储的数据进行交互。
下面的表格列出了 SQL 中通用的数据类型:
数据类型 描述
CHARACTER(n) 字符/字符串。固定长度 n。
VARCHAR(n) 或
CHARACTER VARYING(n) 字符/字符串。可变长度。最大长度 n。
BINARY(n) 二进制串。固定长度 n。
BOOLEAN 存储 TRUE 或 FALSE 值
VARBINARY(n) 或
BINARY VARYING(n) 二进制串。可变长度。最大长度 n。
INTEGER(p) 整数值(没有小数点)。精度 p。
SMALLINT 整数值(没有小数点)。精度 5。
INTEGER 整数值(没有小数点)。精度 10。
BIGINT 整数值(没有小数点)。精度 19。
DECIMAL(p,s) 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数小数点后有 2 位数的数字。
NUMERIC(p,s) 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同)
FLOAT(p) 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。
REAL 近似数值,尾数精度 7。
FLOAT 近似数值,尾数精度 16。
DOUBLE PRECISION 近似数值,尾数精度 16。
DATE 存储年、月、日的值。
TIME 存储小时、分、秒的值。
TIMESTAMP 存储年、月、日、小时、分、秒的值。
INTERVAL 由一些整数字段组成,代表一段时间,取决于区间的类型。
ARRAY 元素的固定长度的有序集合
MULTISET 元素的可变长度的无序集合
XML 存储 XML 数据

SQL 语句快速参考
SQL 语句 语法

AND / OR SELECT column_name(s) 
 FROM table_name 
 WHERE condition 
 AND|OR condition 
 ALTER TABLE ALTER TABLE table_name 
 ADD column_name datatype 
 or 
 ALTER TABLE table_name 
 DROP COLUMN column_name 
 AS (alias) SELECT column_name AS column_alias 
 FROM table_name 
 or 
 SELECT column_name 
 FROM table_name AS table_alias 
 BETWEEN SELECT column_name(s) 
 FROM table_name 
 WHERE column_name 
 BETWEEN value1 AND value2 
 CREATE DATABASE CREATE DATABASE database_name 
 CREATE TABLE CREATE TABLE table_name 
 ( 
 column_name1 data_type, 
 column_name2 data_type, 
 column_name2 data_type, 
 … 
 ) 
 CREATE INDEX CREATE INDEX index_name 
 ON table_name (column_name) 
 or 
 CREATE UNIQUE INDEX index_name 
 ON table_name (column_name) 
 CREATE VIEW CREATE VIEW view_name AS 
 SELECT column_name(s) 
 FROM table_name 
 WHERE condition 
 DELETE DELETE FROM table_name 
 WHERE some_column=some_value 
 or 
 DELETE FROM table_name 
 (Note: Deletes the entire table!!) 
 DELETE * FROM table_name 
 (Note: Deletes the entire table!!) 
 DROP DATABASE DROP DATABASE database_name 
 DROP INDEX DROP INDEX table_name.index_name (SQL Server) 
 DROP INDEX index_name ON table_name (MS Access) 
 DROP INDEX index_name (DB2/Oracle) 
 ALTER TABLE table_name 
 DROP INDEX index_name (MySQL) 
 DROP TABLE DROP TABLE table_name 
 GROUP BY SELECT column_name, aggregate_function(column_name) 
 FROM table_name 
 WHERE column_name operator value 
 GROUP BY column_name 
 HAVING SELECT column_name, aggregate_function(column_name) 
 FROM table_name 
 WHERE column_name operator value 
 GROUP BY column_name 
 HAVING aggregate_function(column_name) operator value 
 IN SELECT column_name(s) 
 FROM table_name 
 WHERE column_name 
 IN (value1,value2,..) 
 INSERT INTO INSERT INTO table_name 
 VALUES (value1, value2, value3,….) 
 or 
 INSERT INTO table_name 
 (column1, column2, column3,…) 
 VALUES (value1, value2, value3,….) 
 INNER JOIN SELECT column_name(s) 
 FROM table_name1 
 INNER JOIN table_name2 
 ON table_name1.column_name=table_name2.column_name 
 LEFT JOIN SELECT column_name(s) 
 FROM table_name1 
 LEFT JOIN table_name2 
 ON table_name1.column_name=table_name2.column_name 
 RIGHT JOIN SELECT column_name(s) 
 FROM table_name1 
 RIGHT JOIN table_name2 
 ON table_name1.column_name=table_name2.column_name 
 FULL JOIN SELECT column_name(s) 
 FROM table_name1 
 FULL JOIN table_name2 
 ON table_name1.column_name=table_name2.column_name 
 LIKE SELECT column_name(s) 
 FROM table_name 
 WHERE column_nameLIKE pattern 
 ORDER BY SELECT column_name(s) 
 FROM table_name 
 ORDER BY column_name [ASC|DESC] 
 SELECT SELECT column_name(s) 
 FROM table_name 
 SELECT * SELECT * 
 FROM table_name 
 SELECT DISTINCT SELECT DISTINCT column_name(s) 
 FROM table_name 
 SELECT INTO SELECT * 
 INTO new_table_name [IN externaldatabase] 
 FROM old_table_name 
 or 
 SELECT column_name(s) 
 INTO new_table_name [IN externaldatabase] 
 FROM old_table_name 
 SELECT TOP SELECT TOP number|percent column_name(s) 
 FROM table_name 
 TRUNCATE TABLE TRUNCATE TABLE table_name 
 UNION SELECT column_name(s) FROM table_name1 
 UNION 
 SELECT column_name(s) FROM table_name2 
 UNION ALL SELECT column_name(s) FROM table_name1 
 UNION ALL 
 SELECT column_name(s) FROM table_name2 
 UPDATE UPDATE table_name 
 SET column1=value, column2=value,… 
 WHERE some_column=some_value 
 WHERE SELECT column_name(s) 
 FROM table_name 
 WHERE column_name operator valueSQL Join连接 
 SELECT column_name(s) 
 FROM table_name1 
 INNER JOIN table_name2 
 ON table_name1.column_name=table_name2.column_name 
 例: 
 select t_user.id,t_user.name,t_house.id 
 -> from t_user 
 -> inner join t_house 
 -> on t_user.id=t_house.id 
 -> order by t_user.id; 
 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo 
 FROM Persons 
 INNER JOIN Orders 
 ON Persons.Id_P = Orders.Id_P 
 ORDER BY Persons.LastName

SQL连接(Joins)
SQL join 用于把来自两个或多个表的行结合起来。
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。

我们可以通过引用两个表的方式,从两个表中获取数据:

SELECT table_name1.column1,tables_name2.column2,tables_name1.column2
FROM table_name1,table_name2
WHERE table_name1.column = table_name2.column;

不同的 SQL JOIN
• INNER JOIN:如果表中有至少一个匹配,则返回行
• LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
• RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
• FULL JOIN:只要其中一个表中存在匹配,则返回行

SQL INNER JOIN 关键字(内部连接)
SQL INNER JOIN 语法
内部链接INNER JOIN关键字选择两个表中具有匹配值的记录。
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
加入三张表
以下SQL语句选择包含客户和货运单信息的所有订单:
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName FROM ((Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID) INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

SQL 左连接 LEFT JOIN 关键字
SQL左链接LEFT JOIN关键字返回左表(表1)中的所有行,即使在右表(表2)中没有匹配。如果在正确的表中没有匹配,结果是NULL。

SQL LEFT JOIN 语法

SELECT column_name(s) 
 FROM table1 
 LEFT JOIN table2 
 ON table1.column_name=table2.column_name;



SELECT column_name(s) 
 FROM table1 
 LEFT OUTER JOIN table2 
 ON table1.column_name=table2.column_name;


SQL右连接 RIGHT JOIN 关键字
SQL右链接 RIGHT JOIN 关键字返回右表(table2)的所有行,即使在左表(table1)上没有匹配。如果左表没有匹配,则结果为NULL。

SQL RIGHT JOIN 语法
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
SQL FULL OUTER JOIN 关键字(完整外部连接)
SQL FULL OUTER JOIN 关键字
当左(表1)或右(表2)表记录匹配时,FULL OUTER JOIN关键字将返回所有记录。
注意: FULL OUTER JOIN可能会返回非常大的结果集!
SQL FULL OUTER JOIN 语法
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

SQL自连接 Self JOIN
SQL自联接
自联接是一种常规联接,但表本身是连接的。
Self JOIN语法
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition;
SQL UNION 运算符
UNION运算符用于组合两个或更多SELECT语句的结果集。
SQL UNION 运算符
• UNION中的每个SELECT语句必须具有相同的列数
• 这些列也必须具有相似的数据类型
• 每个SELECT语句中的列也必须以相同的顺序排列

SQL UNION 语法

SELECT column_name(s) FROM table1 
 UNION 
 SELECT column_name(s) FROM table2;


注释:默认情况下,UNION 运算符选择一个不同的值。如果允许重复值,请使用 UNION ALL。

SQL UNION ALL 语法
SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
带有 WHERE 的 SQL UNION ALL
以下SQL语句使用UNIONALL从”Customers”和”Suppliers”表中选择所有德国城市(也是重复数值):

SELECT City, Country FROM Customers 
 WHERE Country=’Germany’ 
 UNION ALL 
 SELECT City, Country FROM Suppliers 
 WHERE Country=’Germany’ 
 ORDER BY City;

SQL UNION与WHERE
以下SQL语句从“客户”和“供应商”中选择所有不同的德国城市(只有不同的值):
SELECT City, Country FROM Customers WHERE Country=’Germany’ UNION SELECT City, Country FROM Suppliers WHERE Country=’Germany’ ORDER BY City;
另一个UNION示例
以下SQL语句列出了所有客户和供应商:
SELECT ‘Customer’ As Type, ContactName, City, Country
FROM Customers
UNION
SELECT ‘Supplier’, ContactName, City, Country
FROM Suppliers;

SQL SELECT INTO语句
使用 SQL,您可以将信息从一个表中复制到另一个表中。
SELECT INTO 语句从一个表中复制数据,然后将数据插入到另一个新表中。
SQL SELECT INTO 语句
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
SQL SELECT INTO 语法
我们可以把所有的列都复制到新表中:
SELECT *
INTO newtable [IN externaldb]
FROM table1;
或者只复制希望的列插入到新表中:
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
SQL SELECT INTO 实例
创建 Customers 的备份复件:
SELECT *
INTO CustomersBackup2013
FROM Customers;
请使用 IN 子句来复制表到另一个数据库中:
SELECT *
INTO CustomersBackup2013 IN ‘Backup.mdb’
FROM Customers;
只复制一些列插入到新表中:
SELECT CustomerName, ContactName
INTO CustomersBackup2013
FROM Customers;
只复制德国的客户插入到新表中:
SELECT *
INTO CustomersBackup2013
FROM Customers
WHERE Country=’Germany’;
复制多个表中的数据插入到新表中:
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2013
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID;
提示:SELECT INTO 语句可以用于在另一种模式下创建一个新的空表。只需添加WHERE子句,使查询返回时没有数据:
SELECT *
INTO newtable
FROM table1
WHERE 1=0;

SQL INSERT INTO SELECT 语句
使用SQL,您可以将信息从一个表中复制到另一个表中。
INSERT INTO SELECT 从表中复制数据,并将数据插入现有的表中。
INSERT INTO SELECT 语句从表中复制数据,并将数据插入现有的表中。目标表中的任何现有行都不会受到影响。
我们可以将所有列从一个表中复制到另一个已经存在的表中:
INSERT INTO table2
SELECT * FROM table1;
或者我们可以把想要的列复制到另一个现有的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
SQL 撤销索引、表以及数据库
SQL 撤销索引、撤销表以及撤销数据库

通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
DROP INDEX 语句
DROP INDEX 语句用于删除表中的索引。
用于 MS Access 的 DROP INDEX 语法:

DROP INDEX index_name ON table_name
用于 MS SQL Server 的 DROP INDEX 语法:
DROP INDEX table_name.index_name
用于 DB2/Oracle 的 DROP INDEX 语法:
DROP INDEX index_name
用于 MySQL 的 DROP INDEX 语法:
ALTER TABLE table_name DROP INDEX index_name
DROP TABLE 语句
DROP TABLE 语句用于删除表。
DROP TABLE table_name
DROP DATABASE 语句
DROP DATABASE 语句用于删除数据库。
DROP DATABASE database_name
TRUNCATE TABLE 语句
如果我们只需要删除表中的数据,而不删除表本身,那么我们该怎么做?
使用TRUNCATE TABLE语句:

TRUNCATE TABLE table_name 
 SQL CREATE DATABASE 语句 
 SQL CREATE DATABASE 语句 
 CREATE DATABASE 语句用于创建数据库。 
 SQL CREATE DATABASE 语法 
 CREATE DATABASE dbname; 
 SQL CREATE TABLE 语句 
 SQL CREATE TABLE 语句 
 CREATE TABLE 语句用于创建数据库中的表。 
 表由行和列组成,每个表都必须有个表名。 
 SQL CREATE TABLE 语法 
 CREATE TABLE table_name 
 ( 
 column_name1 data_type(size), 
 column_name2 data_type(size), 
 column_name3 data_type(size), 
 …. 
 );


column_name 参数规定表中列的名称。
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度。

SQL ALTER TABLE 语句
ALTER TABLE 语句
ALTER TABLE 语句用于在现有表中添加、删除或修改列。
SQL ALTER TABLE 语法
若要向表中添加列,请使用以下语法:
ALTER TABLE table_name
ADD column_name datatype
若要删除表中的列,请使用以下语法(请注意,一些数据库系统不允许这样删除数据库表中的列):
ALTER TABLE table_name
DROP COLUMN column_name
若要更改表中列的数据类型,请使用以下语法:

SQL Server / MS Access: 
 ALTER TABLE table_name 
 ALTER COLUMN column_name datatype 
 My SQL / Oracle: 
 ALTER TABLE table_name 
 MODIFY COLUMN column_name datatype