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'

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_mysql

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 列名称 = 某值

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_sql_02

  • 我们会修改地址(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

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_数据库_03

  • 从上面的 “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

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_sql_04

  • 从上面的 “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 中,可使用以下通配符:

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_mysql_05

使用 _ 通配符

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_sql_06

  • 从上面的 “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 子句中规定多个值。

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_sql_07

  • 从上表中选取姓氏为 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

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_操作符_08

  • 以字母顺序显示介于 “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

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_操作符_09

  • 查找订单总金额少于 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

sql server 操作数数据类型 varchar 对于 multiply 运算符无效 sql中数据操作语句_操作符_10

  • 查找每个客户的总金额(总订单)
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer


如有需要请到以上地址查看。