CREATE DATABASE database;
//创建一个数据库
DROP DATABASE database;
//删除一个数据库

CREATE TABLE table (name1 type(size), name2 type(size), …);
//创建一个表,其中所有数据类型包括:(不同数据库有所不同)
整数:
integer(int)  int(size)  smallint(size)  tinyint(size)
小数:
decimal(size, d)  numeric(size, d)         //size是最大为数,d为小数点后位数
固定长度字符串:
char(size)                   //size是固定长度
可变长度字符串:vachar(size)                 
//size是最大长度
日期:date(yyyymmdd)

DROP TABLE table;
//删除一个表,包括删除表的结构、属性和索引等
TRUNCATE TABLE table;
//仅删除表中的所有数据,表依然存在
DELETE FROM table WHERE name op value;
//删除表中某些记录

ALTER TABLE table ADD name type(size);
//在表中添加新的列
ALTER TABLE table DROP COLUMN name;
//删除表中某列

SELECT name1, name2,….. FROM table;
SELECT * FROM table;
SELECT DISTINCT name1, DISTINCT name2 FROM table;    
//返回不重复的值,每个DISTINCT只负责一个列名
SELECT name1, name2 FROM table ORDER BY name1, name2       
//先按name1顺序排,再按name2顺序排
SELECT name1, name2 FROM table ORDER BY name1 ASC, name2 DESC;
//ASC是升序排序,DESC是降序排序,每个ASC/DEST只负责一个列名
SELECT name FROM table WHERE name op value;
//AND、OR可将WHERE中多个条件结合起来(AND优先级比OR大)
//op is  =  <>  >  >=  <  <=  BETWEEN  LIKE
SELECT name FROM table WHERE name LIKE ‘a%’;
//LIKE中使用%(任意字符,包括0个字符)和_(任意单个字符)作为通配符
SELECT name FROM table WHERE name IN (value1, value2, ….);
//用IN或者NOT IN确定返回的name在/不在之中,也可以使用SELECT子句如IN (SELECT .......)
SELECT name FROM table WHERE name BETWEEN value AND value;
//BETWEENAND…或者NOT BETWEENAND…之间的数可以是数值、文本(字典序)或者日期。每个数据库对BETWEEN的处理是有差异的,具体体现在头尾是否开区间的问题
SELECT name AS othername FROM table;
SELECT name FROM table AS othertable;
//每个AS对应一个列名或者表名
SELECT table1.name, table2.name FROM table1, table2 WHERE table1.name = table2.name;
SELECT table1.name FROM table1, table2 WHERE table1.name = table2.name AND table2.name = value;
//利用主键和外键的联系进行多表之间的联合查找
SELECT table1.name, table2.name FROM table1 INNER JOIN table2 ON table1.key = table2.foreignkey;
//内连接,某表的主键和该表具有的其他表的外键,返回匹配的行
SELECT table1.name, table2.name FROM table1 LEFT JOIN table2 ON table1.key = table2.foreignkey;
//返回table1的所有行,即使第二个表没有匹配的行
SELECT table1.name, table2.name FROM table1 RIGHT JOIN table2 ON table1.key = table2.foreignkey;
//返回table2的所有行,即使第一个表没有匹配的行
SELECT name FROM table1 
   
UNION 
   
SELECT name FROM table2;
//使用UNION,被选取的列的数据类型应该是相同的,且只有不同的值会被选取
SELECT name FROM table1 
   
UNION ALL 
   
SELECT name FROM table2;
//UNION ALL会列出所有的值

INSERT INTO table VALUES (value1, value2,……);
INSERT INTO table (name1, name2,….) VALUES (value1, value2);

UPDATE table SET name = value WHERE name op value;

GROUP BY
合计函数常常需要添加GROUP BY功能,例如使用SUM(name)就需要使用GROUP 
BY name来计算。
SELECT name, SUM(name) FROM table GROUP BY name;

HAVING
WHERE无法应用于合计函数条件测试,所以使用HAVING对合计函数进行测试。
SELECT name, SUM(name) FROM table GROUP BY name HAVING SUM(name) op value;
//HAVING与WHERE一样,可使用op、AND/OR等各种操作

Aggregate合计函数:
该函数操作面向一系列的值,返回一个单一的值。如果在SELECT语句的项目列表中的众多其他表达式中使用SELECT语句,则这个SELECT必须使用GROUP BY语句。Access和SQL Server中的合计函数如下:
AVG(name):某列平均值
COUNT(name):某列行数(不包括NULL值)
COUNT(*):被选总行数
FIRST(name):指定域中的第一个记录的值(SQL Server 2000不支持)
LAST(name):指定域中的最后一个记录的值(SQL Server 2000不支持)
MAX(name):某列最高值
MIN(name):某列最低值
SUM(name):某列总和

Scalar函数:
该函数面向单一的值,并返回基于输入值的一个单一的值。Access中的Scalar函数如下:
UCASE(c):将某个域转换为大写
LCASE(C):将某个域转换为小写
MIN(c, start[, end]):从某个文本里提取字符
LEN(c):返回某个文本域的长度
INSTR(c, 
char):返回某个文本域中指定字符的位置
LEFT(c, numer):返回某个被请求文本域的左侧部分
RIGHT(c, numer):返回某个被请求文本域的右侧部分
ROUND(c, decimals):对某个数值域进行指定小数位数的四舍五入
MOD(x, y):返回除法操作的余数
NOW():返回当前系统日期
FORMAT(c, format):改变某个域的显示方式

下面是一些不常用的SQL语句功能,可以参考:

INDEX:索引被创建于已有的表中,它可使对行的定位更加快速有效,可以在表格的一个或者多个列上创建索引,每个索引都会被起个名字,用户无法看到索引,只能被用来加速查询。更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,建议仅在常常用于搜索的列上面创建索引。
CREATE UNIQUE INDEX indexname ON table (name1, name2);
//创建一个唯一的索引,即两行不能有相同的索引值
CREATE INDEX indexname ON table (name1, name2);
//创建一个简单索引,可以使用重复的值
CREATE INDEX indexname ON table (name DESC);
//用DESC来降序索引某个列的值
DROP INDEX indexname ON table;
//Access和MS SQLJet的做法
DROP INDEX table.indexname;
//MS SQL Server的做法
DROP INDEX indexname;
//DB2和Oracle的做法
ALTER TABLE table DROP INDEX indexname;
//MySQL的做法

SELECT name INTO newtable [IN ‘externaldatabase’] FROM table WHERE name op value;
创建表的备份复件或者用于对记录进行存档。
SELECT * INTO newtable [IN ‘externaldatabase’] FROM table;
SELECT name1, name2 INTO newtable [IN ‘externaldatabase’] FROM table;
SELECT name INTO newtable FROM table WHERE name op value;
SELECT name INTO newtable FROM table1 INNER JOIN table2 ON table1.key = table2.foreignkey;