SQL常见语句及用法
SQL基础
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
- SELECT DISTINCT 列名称 FROM 表名称 关键词 DISTINCT 用于返回唯一不同的值。
- SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 有条件地从表中选取数据
AND 和OR运算符
- AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。 - 使用 AND 来显示所有姓为 “Carter” 并且名为 “Thomas” 的人:
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
- 使用 OR 来显示所有姓为 “Carter” 或者名为 “Thomas” 的人:
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
- 我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
ORDER BY 语句
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
- 以字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
- 以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
- 以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
- 以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
INSERT INTO 表名称 VALUES (值1, 值2,....)
- 指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
Update 语句
Update 语句用于修改表中的数据。
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
- 我们会修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'
DELETE 语句
DELETE 语句用于删除表中的行。
DELETE FROM 表名称 WHERE 列名称 = 值
- 可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
DELETE * FROM table_name
SQL高级
TOP 子句
TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
**注释:**并非所有的数据库系统都支持 TOP 子句。
SELECT TOP number|percent column_name(s)
FROM table_name
- 从上面的 “Persons” 表中选取头两条记录。
我们可以使用下面的 SELECT 语句:
SELECT TOP 2 * FROM Persons
- 从上面的 “Persons” 表中选取 50% 的记录。
我们可以使用下面的 SELECT 语句:
SELECT TOP 50 PERCENT * FROM Persons
LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
- SQL LIKE 操作符语法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
- 从上面的 “Persons” 表中选取居住在以 “N” 开始的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE 'N%'
提示:"%" 可用于定义通配符(模式中缺少的字母)。
- 从 “Persons” 表中选取居住在以 “g” 结尾的城市里的人:
我们可以使用下面的 SELECT 语句
SELECT * FROM Persons
WHERE City LIKE '%g'
- 从 “Persons” 表中选取居住在包含 “lon” 的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '%lon%'
- 通过使用 NOT 关键字,我们可以从 “Persons” 表中选取居住在不包含 “lon” 的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City NOT LIKE '%lon%'
SQL 通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
在 SQL 中,可使用以下通配符:
使用 _ 通配符
- 从上面的 “Persons” 表中选取名字的第一个字符之后是 “eorge” 的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE FirstName LIKE '_eorge'
- 从 “Persons” 表中选取的这条记录的姓氏以 “C” 开头,然后是一个任意字符,然后是 “r”,然后是一个任意字符,然后是 “er”:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE LastName LIKE 'C_r_er'
使用 [charlist] 通配符
- 从上面的 “Persons” 表中选取居住的城市以 “A” 或 “L” 或 “N” 开头的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '[ALN]%'
- 从上面的 “Persons” 表中选取居住的城市不以 “A” 或 “L” 或 “N” 开头的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '[!ALN]%'
IN 操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。
- 从上表中选取姓氏为 Adams 和 Carter 的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE LastName IN ('Adams','Carter')
BETWEEN 操作符
- BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
- 操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
- 以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人:
SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'
- 使用上面的例子显示范围之外的人,请使用 NOT 操作符:
SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Adams' AND 'Carter'
SQL Alias 别名
通过使用 SQL,可以为列名称和表名称指定别名(Alias)。
- 表的 SQL Alias 语法
SELECT column_name(s)
FROM table_name
AS alias_name
- 列的 SQL Alias 语法
SELECT column_name AS alias_name
FROM table_name
- 有两个表分别是:“Persons” 和 “Product_Orders”。我们分别为它们指定别名 “p” 和 “po”。
现在,我们希望列出 “John Adams” 的所有定单。
我们可以使用下面的 SELECT 语句:
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
Join 和 Key
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
- JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
INNER JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:INNER JOIN 与 JOIN 是相同的。
LEFT JOIN 关键字
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
- LEFT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
RIGHT JOIN 关键字语法
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
FULL JOIN 关键字语法
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
SQL函数
HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
- 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
- 查找订单总金额少于 2000 的客户
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
- 查找客户 “Bush” 或 “Adams” 拥有超过 1500 的订单总金额。
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500
GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
- SQL GROUP BY 语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
- 查找每个客户的总金额(总订单)
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
如有需要请到以上地址查看。