1 SELECT : SELECT lastName,firstName FROM persons
2 DISTINCT : SELECT DISTINCT Company FROM Orders
3 WHERE : SELECT * FROM persons WHERE city ='beijing'
4 AND & OR : SELECT * FROM persons WHERE firstName = 'Thomas'
AND lastName = 'center'
SELECT * FROM persons WHERE firstName = 'Thomas'
OR lastName = 'center'
5 ORDER BY : SELECT Company, orderNumbers from Orders ORDER BY Company
//默认为升序,DESC为逆序, ASC为顺序
6 INSERT : INSERT INTO persons VALUES ('gates','bills', 'xuanwanmen')
7 UPDATE : UPDATE persons SET firstName='Fread' WHERE lastName='Nima'
8 DELETE : DELETE FROM persons WHERE lastName='Nima'
DELETE FROM table_name
9 TOP : TOP自居用于规定要返回得记录得数目;
//从表中选取头两条数据
SELECT TOP 2 * FROM persons
//从表中选取百分之五十得记录
SELECT TOP 50 PERCENT * FROM persons
MySQL 语法
SELECT * FROM persons LIMIT 5
Oracle 语法
SELECT * FROM persons WHERE ROWNUM <= 5
10 LIKE : LIKE操作符用于在WHERE子句中搜索列中得指定模式
SELECT * FROM persons WHERE city LIKE 'N%'
11 通配符 : % 代替一个或者多个字符
_ 仅仅代替一个字符
[charlist]字符列中任何单一字符
[^charlist] or [!charlist]不在字符列中任何单一字符列
//选取居住得城市以“A” 或 “L” 或 “N” 开头的人
SELECT * FROM persons WHERE city LIKE '[ALN]%'
12 IN : IN操作符允许我们在WHERE子句中规定多个值
//从表中选取姓氏为adams 和 carter的人
SELECT *FROM persons WHERE lastName IN ('adams','carter')
13 BETWEEN : SELECT * FROM persons WHERE lastName NOT BETWEEN 'adams' AND
'carter'
14 ALIAS : 为列名称和表名称指定别名
//假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po"。
SELECT po.OrderID,p.lastName, p.firstName FROM persons AS p, Product_Orders AS po WHERE p.lastName='Adams' AND
p.firstName='John'
15 JOIN : //通过引用两个表的方式,从两个表中获取数据
SELECT persons.lastName, persons.firstName, Orders.orderNo
FROM persons,Orders WHERE persons.id_p = Orders.id_p
//利用join 从两个表中获得数据
SELECT persons.lastName, persons.firstName, Orders.orderNo
FROM persons INNER JOIN Orders ON persons.id_p =
Orders.id_p ORDER BY persons.lastName
16 UNION : UNION操作符用于合并两个或多个SELECT语句的结果集
注:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似
的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
//UNION UNION ALL
SELECT E_Name FROM Employees_China UNION
SELECT E_Name FROM Employees_USA
17 SELECT INTO : 常用于创建表的备份附件或者用于对记录进行存档
从一个表中选取数据,然后把数据插入另一个表中
//制作备份附件
SELECT LastName,FirstName INTO persons_backup FROM persons WHERE city = 'Beijing'
//向另一个数据库中拷贝表
SELECT * INTO persons IN 'Backup.mdb' FROM persons
//创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:
SELECT persons.lastName, Orders.orderNo INTO
Persons_Order_Backup FROM persons INNER JOIN
Orders ON persons.id_p = Orders.id_p
18 CREATE DATABASE : CREATE DATABASE my_db
19 CREATE TABLE : CREATE TABLE Person (
id_p int,
lastName varchar(223),
firstName varchar(223),
address varchar(233),
city varchar(233)
)
20 CONSTRAINTS : 约束,主要用于限制假如表的数据类型
NOT NULL 强制列不接受NULL值
id_p int(NOT NULL),
UNIQUE 约束唯一标识数据库表中的每条记录
//MySQL:
UNIQUE (id_p)
//SQL Server/ Oracle /MS Access
id_p int NOT NULL UNIQUE,
//MySQL/SQL Server / Oracle / MS Access
CONSTRAINT uc_PersonID UNIQUE (id_p, LastName)
//当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL:
ALTER TABLE persons ADD UNIQUE (id_p)
//如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法
ALTER TABLE persons ADD CONSTRAINT uc_PersonID UNIQUE (id_p, LastName)
//撤销 UNIQUE 约束
//MySQL
ALTER TABLE persons DROP INDEX uc_PersonID
//SQL Server / Oracle / MS Access
ALTER TABLE persons DROP CONSTRAINT uc_PersonID
21 PRIMARY KEY : 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
语法同UNIQUE
21 FOREIGN KEY : //MySQL
FOREIGN KEY (id_p) REFERENCES persons(id_p)
//SQL Server / Oracle / MS Access
id_p int FOREIGN KEY REFERENCES persons(id_p)
//如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
CONSTRAINT fk_PerOrders FOREIGN KEY (id_p) REFERENCES
persons(id_p)
//ADD
ADD FOREIGN KEY (Id_P) REFERENCES persons(Id_P)
// 命名 撤销等语法参照UNIQUE
22 CHECK : 约束用于限制列中的值的范围。
//My_SQL
CHECK (Id_P > 0)
//Server / Oracle / MS Access:
Id_P int NOT NULL CHECK (Id_P>0)
//如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束
CONSTRAINT chk_person CHECK (Id_P>0 AND
city='beijing')
//add
ADD CHECK (Id_P > 0)
//命名 撤销参考UNIQUE
23 DEFAULT : 用于向列中插入默认值
city varchar(222) DEFAULT 'beijgn'
//表已存在情况下
//My_SQL
ALTER city SET DEFAULT 'beijing'
//SQL Server / Oracle / MS Access:
ALTER COLUMN city SET DEFAULT 'beijing'
//撤销
//My_SQL
ALTER city DROP DEFAULT
//SQL Server / Oracle / MS Access:
ALTER COLUMN city DROP DEFAULT
24 CREATE INDEX : //索引,名为 "PersonIndex",在 Person 表的 LastName 列
CREATE INDEX PersonIndex ON Person (LastName DESC)
25 DROP : 删除表格中的索引
//MySQL
ALTER TABLE Person DROP INDEX PersonIndex
//IBM DB2 和 Oracle
DROP INDEX PersonIndex
DROP DATABASE 语句用于删除数据库
DROP DATABASE my_db
TRUNCATE TABLE 命令仅仅删除表格中的数据
TRUNCATE TABLE Person
26 ALTER TABLE :用于在已有的表中添加、修改或删除列
//添加一个名为 "Birthday" 的新列。
ALTER TABLE Person ADD Birthday date
//改变 "Persons" 表中 "Birthday" 列的数据类型。
ALTER TABLE Person ALTER COLUMN Birthday year
//删除 "Person" 表中的 "Birthday" 列:
ALTER TABLE Person DROP COLUMN Birthday
27 AUTO INCREMENT : 会在新记录插入表中时生成一个唯一的数字。
// "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:
//MySQL
P_Id int NOT NULL AUTO_INCREMNET
//SQL Server
P_Id int PRIMARY KEY IDENTITY
//Access
P_Id int PRIMARY KEY AUTOINCREMENT
//oracle 创建名为 seq_person 的序列对象,它以 1 起始且以 1 递增。该对象缓存 10 个值以提高性能
CREATE SEQUENCE seq_person MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10
//AUTO_INCREMENT 序列以其他的值起始
ALTER TABLE Person AUTO_INCREMENT=100
//要在 "Persons" 表中插入新记录,我们不必为 "P_Id" 列规定值(会自动添加一个唯一的值):
INSERT INTO Person (FirstName, LastName) VALUES ('Bill','Gates')
28 VIEW : CREATE VIEW [Current Product List] AS
SELECT ProductID, ProductName
FROM Products WHERE Discoutinued=NO
SELECT * FROM [Current Product List]
29 Date :MySQL
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间按的单独部分
DATE_ADD() 给日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间
:SQL Server Date
GETDATE() 返回当前日期和时间
DATEPART() 返回日期/时间的单独部分
DATEADD() 在日期中添加或减去指定的时间间隔
DATEDIFF() 返回两个日期之间的时间
CONVERT() 用不同的格式显示日期/时间
:SQL Date 数据类型
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
YEAR - 格式 YYYY 或 YY
SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: 唯一的数字
30 NULL : 值是遗漏的未知数据
SELECT LastName,FirstName,address FROM Persons
WHERE address IS NULL
ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
//如果 "UnitsOnOrder" 是 NULL,则不利于计算,因此如果值是 NULL 则 ISNULL() 返回 0。
//SQL Server / MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))FROM Products
//Oracle
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0)
FROM Products
//MySQL
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))FROM Products
31 函数:
//avg()求平均值
SELECT Customer FROM Orders WHERE OrdersPrice>(SELECT AVG(OrdersPrice) FROM Orders)
//count() first() last() max() min() sum() Group by()
//Having 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用
SELECT Customer,SUM(OrdersPrice) FROM Orders WHERE
Customer = 'Push' GROUP BY Customer HAVING
SUM(OrdersPrice)>1500
//UCASE()函数把字段的值转换为大写
SELECT UCASE(LastName) as LastName FROM Persons
//LCASE()
//MID() 函数用于从文本字段中提取字符。
SELECT MID(city,1,4) as smallcity FROM Persons
//len()
//ROUND() 函数用于把数值字段舍入为指定的小数位数
SELECT ProductName, ROUND(UnitPrice, 0) as UnitPrice FROM Products
//NOW() FORMAT()
SELECT ProductName, UnitPrice, FORMAT(NOW(), 'YYYY-MM-DD')
as perdate FROM Products
2 DISTINCT : SELECT DISTINCT Company FROM Orders
3 WHERE : SELECT * FROM persons WHERE city ='beijing'
4 AND & OR : SELECT * FROM persons WHERE firstName = 'Thomas'
AND lastName = 'center'
SELECT * FROM persons WHERE firstName = 'Thomas'
OR lastName = 'center'
5 ORDER BY : SELECT Company, orderNumbers from Orders ORDER BY Company
//默认为升序,DESC为逆序, ASC为顺序
6 INSERT : INSERT INTO persons VALUES ('gates','bills', 'xuanwanmen')
7 UPDATE : UPDATE persons SET firstName='Fread' WHERE lastName='Nima'
8 DELETE : DELETE FROM persons WHERE lastName='Nima'
DELETE FROM table_name
9 TOP : TOP自居用于规定要返回得记录得数目;
//从表中选取头两条数据
SELECT TOP 2 * FROM persons
//从表中选取百分之五十得记录
SELECT TOP 50 PERCENT * FROM persons
MySQL 语法
SELECT * FROM persons LIMIT 5
Oracle 语法
SELECT * FROM persons WHERE ROWNUM <= 5
10 LIKE : LIKE操作符用于在WHERE子句中搜索列中得指定模式
SELECT * FROM persons WHERE city LIKE 'N%'
11 通配符 : % 代替一个或者多个字符
_ 仅仅代替一个字符
[charlist]字符列中任何单一字符
[^charlist] or [!charlist]不在字符列中任何单一字符列
//选取居住得城市以“A” 或 “L” 或 “N” 开头的人
SELECT * FROM persons WHERE city LIKE '[ALN]%'
12 IN : IN操作符允许我们在WHERE子句中规定多个值
//从表中选取姓氏为adams 和 carter的人
SELECT *FROM persons WHERE lastName IN ('adams','carter')
13 BETWEEN : SELECT * FROM persons WHERE lastName NOT BETWEEN 'adams' AND
'carter'
14 ALIAS : 为列名称和表名称指定别名
//假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po"。
SELECT po.OrderID,p.lastName, p.firstName FROM persons AS p, Product_Orders AS po WHERE p.lastName='Adams' AND
p.firstName='John'
15 JOIN : //通过引用两个表的方式,从两个表中获取数据
SELECT persons.lastName, persons.firstName, Orders.orderNo
FROM persons,Orders WHERE persons.id_p = Orders.id_p
//利用join 从两个表中获得数据
SELECT persons.lastName, persons.firstName, Orders.orderNo
FROM persons INNER JOIN Orders ON persons.id_p =
Orders.id_p ORDER BY persons.lastName
16 UNION : UNION操作符用于合并两个或多个SELECT语句的结果集
注:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似
的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
//UNION UNION ALL
SELECT E_Name FROM Employees_China UNION
SELECT E_Name FROM Employees_USA
17 SELECT INTO : 常用于创建表的备份附件或者用于对记录进行存档
从一个表中选取数据,然后把数据插入另一个表中
//制作备份附件
SELECT LastName,FirstName INTO persons_backup FROM persons WHERE city = 'Beijing'
//向另一个数据库中拷贝表
SELECT * INTO persons IN 'Backup.mdb' FROM persons
//创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:
SELECT persons.lastName, Orders.orderNo INTO
Persons_Order_Backup FROM persons INNER JOIN
Orders ON persons.id_p = Orders.id_p
18 CREATE DATABASE : CREATE DATABASE my_db
19 CREATE TABLE : CREATE TABLE Person (
id_p int,
lastName varchar(223),
firstName varchar(223),
address varchar(233),
city varchar(233)
)
20 CONSTRAINTS : 约束,主要用于限制假如表的数据类型
NOT NULL 强制列不接受NULL值
id_p int(NOT NULL),
UNIQUE 约束唯一标识数据库表中的每条记录
//MySQL:
UNIQUE (id_p)
//SQL Server/ Oracle /MS Access
id_p int NOT NULL UNIQUE,
//MySQL/SQL Server / Oracle / MS Access
CONSTRAINT uc_PersonID UNIQUE (id_p, LastName)
//当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL:
ALTER TABLE persons ADD UNIQUE (id_p)
//如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法
ALTER TABLE persons ADD CONSTRAINT uc_PersonID UNIQUE (id_p, LastName)
//撤销 UNIQUE 约束
//MySQL
ALTER TABLE persons DROP INDEX uc_PersonID
//SQL Server / Oracle / MS Access
ALTER TABLE persons DROP CONSTRAINT uc_PersonID
21 PRIMARY KEY : 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
语法同UNIQUE
21 FOREIGN KEY : //MySQL
FOREIGN KEY (id_p) REFERENCES persons(id_p)
//SQL Server / Oracle / MS Access
id_p int FOREIGN KEY REFERENCES persons(id_p)
//如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
CONSTRAINT fk_PerOrders FOREIGN KEY (id_p) REFERENCES
persons(id_p)
//ADD
ADD FOREIGN KEY (Id_P) REFERENCES persons(Id_P)
// 命名 撤销等语法参照UNIQUE
22 CHECK : 约束用于限制列中的值的范围。
//My_SQL
CHECK (Id_P > 0)
//Server / Oracle / MS Access:
Id_P int NOT NULL CHECK (Id_P>0)
//如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束
CONSTRAINT chk_person CHECK (Id_P>0 AND
city='beijing')
//add
ADD CHECK (Id_P > 0)
//命名 撤销参考UNIQUE
23 DEFAULT : 用于向列中插入默认值
city varchar(222) DEFAULT 'beijgn'
//表已存在情况下
//My_SQL
ALTER city SET DEFAULT 'beijing'
//SQL Server / Oracle / MS Access:
ALTER COLUMN city SET DEFAULT 'beijing'
//撤销
//My_SQL
ALTER city DROP DEFAULT
//SQL Server / Oracle / MS Access:
ALTER COLUMN city DROP DEFAULT
24 CREATE INDEX : //索引,名为 "PersonIndex",在 Person 表的 LastName 列
CREATE INDEX PersonIndex ON Person (LastName DESC)
25 DROP : 删除表格中的索引
//MySQL
ALTER TABLE Person DROP INDEX PersonIndex
//IBM DB2 和 Oracle
DROP INDEX PersonIndex
DROP DATABASE 语句用于删除数据库
DROP DATABASE my_db
TRUNCATE TABLE 命令仅仅删除表格中的数据
TRUNCATE TABLE Person
26 ALTER TABLE :用于在已有的表中添加、修改或删除列
//添加一个名为 "Birthday" 的新列。
ALTER TABLE Person ADD Birthday date
//改变 "Persons" 表中 "Birthday" 列的数据类型。
ALTER TABLE Person ALTER COLUMN Birthday year
//删除 "Person" 表中的 "Birthday" 列:
ALTER TABLE Person DROP COLUMN Birthday
27 AUTO INCREMENT : 会在新记录插入表中时生成一个唯一的数字。
// "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:
//MySQL
P_Id int NOT NULL AUTO_INCREMNET
//SQL Server
P_Id int PRIMARY KEY IDENTITY
//Access
P_Id int PRIMARY KEY AUTOINCREMENT
//oracle 创建名为 seq_person 的序列对象,它以 1 起始且以 1 递增。该对象缓存 10 个值以提高性能
CREATE SEQUENCE seq_person MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10
//AUTO_INCREMENT 序列以其他的值起始
ALTER TABLE Person AUTO_INCREMENT=100
//要在 "Persons" 表中插入新记录,我们不必为 "P_Id" 列规定值(会自动添加一个唯一的值):
INSERT INTO Person (FirstName, LastName) VALUES ('Bill','Gates')
28 VIEW : CREATE VIEW [Current Product List] AS
SELECT ProductID, ProductName
FROM Products WHERE Discoutinued=NO
SELECT * FROM [Current Product List]
29 Date :MySQL
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间按的单独部分
DATE_ADD() 给日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间
:SQL Server Date
GETDATE() 返回当前日期和时间
DATEPART() 返回日期/时间的单独部分
DATEADD() 在日期中添加或减去指定的时间间隔
DATEDIFF() 返回两个日期之间的时间
CONVERT() 用不同的格式显示日期/时间
:SQL Date 数据类型
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
YEAR - 格式 YYYY 或 YY
SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: 唯一的数字
30 NULL : 值是遗漏的未知数据
SELECT LastName,FirstName,address FROM Persons
WHERE address IS NULL
ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
//如果 "UnitsOnOrder" 是 NULL,则不利于计算,因此如果值是 NULL 则 ISNULL() 返回 0。
//SQL Server / MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))FROM Products
//Oracle
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0)
FROM Products
//MySQL
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))FROM Products
31 函数:
//avg()求平均值
SELECT Customer FROM Orders WHERE OrdersPrice>(SELECT AVG(OrdersPrice) FROM Orders)
//count() first() last() max() min() sum() Group by()
//Having 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用
SELECT Customer,SUM(OrdersPrice) FROM Orders WHERE
Customer = 'Push' GROUP BY Customer HAVING
SUM(OrdersPrice)>1500
//UCASE()函数把字段的值转换为大写
SELECT UCASE(LastName) as LastName FROM Persons
//LCASE()
//MID() 函数用于从文本字段中提取字符。
SELECT MID(city,1,4) as smallcity FROM Persons
//len()
//ROUND() 函数用于把数值字段舍入为指定的小数位数
SELECT ProductName, ROUND(UnitPrice, 0) as UnitPrice FROM Products
//NOW() FORMAT()
SELECT ProductName, UnitPrice, FORMAT(NOW(), 'YYYY-MM-DD')
as perdate FROM Products