SQL入门进阶级别常用语句语法整理

一、SQL SELECT DISTINCT 语句 

在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值。 

语法:

SELECT DISTINCT 列名称 FROM 表名称 

 

二、特殊常用运算符

1、不等运算符<>或!=

语法:

SELECT 列名称 FROM 表名称 WHERE 列 <> 值 

2、BETWEEN 在某个范围(包含边界值),操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。 

语法:

SELECT 列名称 FROM 表名称 WHERE 列 BETWEEN 最小值AND 最大值 

SQL入门进阶级别常用语句语法整理

3、LIKE 搜索某种模式

语法:

SELECT 列名称 FROM 表名称 WHERE 列 LIKE 值 

 

三、AND和OR运算符

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。 

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。 

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。 

 

四、ORDER BY 语句 

ORDER BY 语句用于根据指定的列对结果集进行排序。 

ORDER BY 语句默认按照升序对记录进行排序。字母也可以排序,默认从a开始升序排。

如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。 

升序降序组合语法:

SELECT 列名称1,列名称2 FROM 表 ORDER BY 列名称1 DESC,列名称2 ASC

看个特殊的例子:

以逆字母顺序显示公司名称,并以数字顺序显示顺序号 :

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC 

结果:

SQL入门进阶级别常用语句语法整理

注意:在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第 二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。总之一个原则,第一个列排序优先再考虑第二列的值排序

 

五、INSERT INTO 语句

INSERT INTO 语句用于向表格中插入新的行。 

语法:

INSERT INTO 表名称 VALUES (值1, 值2,....) 

指定所要插入数据的列:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 

 

六、UPDATE 语句

Update 语句用于修改表中的数据。

语法:

UODATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

 

七、DELETE语句

1、指定删除语法:

DELETE FROM 表名称 WHERE 列名称 = 值 

2、删除所有行:

DELETE FROM table_name 

或者

DELETE * FROM table_name 

 

高级语法来了:

八、TOP子句(一般是按筛选的)(并不是所有数据库都适用)

TOP 子句用于规定要返回的记录的数目。 

对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。 

注释:并非所有的数据库系统都支持 TOP 子句。 

1、选取表中头两条数据

SELECT TOP 2 * FROM 表名称

2、选取百分之50 的记录

SELECT TOP 50 PERCENT * FROM 表名称

 

九、LIKE 和NOT LIKE

1、LIKE语法:

SELECT column_name(s)

FROM table_name

WHERE column_name LIKE pattern

例如:从上面的 "Persons" 表中选取居住在以 "N" 开始的城市里的 

SELECT * FROM Persons  WHERE City LIKE 'N%'

提示:"%" 可用于定义通配符(模式中缺少的字母)。 

 2、NOT LIKE

例子:

通过使用 NOT 关键字,我们可以从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人 

SELECT * FROM Persons

WHERE City NOT LIKE '%lon%'

3、使用“_”通配符,此通配符仅仅只能代替一个字符

例子:从authion表中筛选第一个字符后是“iyaweiye.com”的用户:

SQL入门进阶级别常用语句语法整理

4、使用 [charlist] 通配符(并不是所有数据库都适用)

例子1:希望从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人: 

SELECT * FROM Persons WHERE City LIKE '[ALN]%'

例子2:希望从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:

 SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%'

或者使用这种写法:

SQL入门进阶级别常用语句语法整理

5、IN操作符

IN 操作符允许我们在 WHERE 子句中规定多个值。 

语法:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...) 

 

十、Alias 用法

1、表的语法 :

SELECT column_name(s) FROM table_name AS alias_name

2、列的语法:

SELECT column_name AS alias_name FROM table_name

 

十一、不同的 SQL JOIN

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

1、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 是相同的, INNER JOIN 关键字在表中存在至少一个匹配时返回行。 

2、LEFT JOIN 关键字

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有 匹配的行。 

语法:

ELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name 

注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。 

LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。 

3、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。 

RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。

4、ULL 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。 

FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 

中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配, 这些行同样会列出。 

 

十二、UNION 操作符 

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据 类型。同时,每条 SELECT 语句中的列的顺序必须相同。 

语法:

SELECT column_name(s) FROM table_name1 UNION
SELECT column_name(s) FROM table_name2 

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。 

 

十三、ALTER TABLE 语句 

1、如需在表中添加列,请使用下列语法: 

ALTER TABLE table_name ADD column_name datatype 

2、要删除表中的列,请使用下列语法:

ALTER TABLE table_name DROP COLUMN column_name 

3、要改变表中列的数据类型,请使用下列语法:

ALTER TABLE table_name  ALTER COLUMN column_name datatype 

 

十四、函数

语法:

SELECT function(列) FROM 表 

函数

描述

AVG(column) 

 

返回某列的平均值

COUNT(column) 

 

返回某列的行数(不包括 NULL 值)

COUNT(*) 

 

返回被选行数

MAX(column) 

 

返回某列的最高值

MIN(column) 

 

返回某列的最低值

SUM(column) 

  返回某列的总和

COUNT(DISTINCT column) 

返回相异结果的数目 

FIRST(column) 

返回在指定的域中第一个记录的值(SQLServer2000 不支持) 

LAST(column) 

返回在指定的域中最后一个记录的值(SQLServer2000 不支持) 

 

十五、GROUP BY 语句 

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。 

语法:

SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name

 

十六、HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。 

语法:

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

 

十七、LEN() 函数 

LEN 函数返回文本字段中值的长度。 

语法:

SELECT LEN(column_name) FROM table_name 

 

十八、NOW() 函数

NOW 函数返回当前的日期和时间。 

提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间。 

语法:

SELECT NOW() FROM table_name

 

十九、FORMAT() 函数 

FORMAT 函数用于对字段的显示进行格式化。 

语法:

SELECT FORMAT(column_name,format) FROM table_name 

参数                                        描述

column_name                  必需。要格式化的字段。  

format                             必需。规定格式。