SQL 高级查询

来源:互联网 发布:妇人之仁 知乎 编辑:程序博客网 时间:2024/06/03 13:52



1.TOP

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

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

语法:

SELECT TOP number|percent column_name(s)FROM table_name

例:

SELECT TOP 1 * FROM Persons

SELECT TOP 25 PERCENT * FROM Persons

2.LIKE


通配符:

%替代一个或多个字符_仅替代一个字符[charlist]字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

语法:

SELECT column_name(s)FROM table_nameWHERE column_name LIKE pattern

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

SELECT * FROM PersonsWHERE City LIKE 'N%'

从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人:

SELECT * FROM PersonsWHERE City LIKE '%g'

从 "Persons" 表中选取居住在包含 "on" 的城市里的人:

SELECT * FROM PersonsWHERE City LIKE '%on%'

从 "Persons" 表中选取居住在不包含 "on" 的城市里的人:

SELECT * FROM PersonsWHERE City NOT LIKE '%on%'

从 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:

SELECT * FROM PersonsWHERE FirstName LIKE '_eorge'

从"Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:

SELECT * FROM PersonsWHERE City LIKE '[ALN]%'

从"Persons" 表中选取居住的城市不以"A" 或 "L" 或 "N" 开头的人:

SELECT * FROM PersonsWHERE City LIKE '[!ALN]%'


3.IN

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

语法:

SELECT column_name(s)FROM table_nameWHERE column_name IN (value1,value2,...)

从Persons表中选取姓氏为 Adams 和 Carter 的人:

SELECT * FROM PersonsWHERE LastName IN ('Adams','Carter')

4.BETWEEN 

操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

语法:

SELECT column_name(s)FROM table_nameWHERE column_nameBETWEEN value1 AND value2

以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人:

SELECT * FROM PersonsWHERE LastNameBETWEEN 'Adams' AND 'Carter'

以字母顺序显示不介于 "Adams"(包括)和 "Carter"(不包括)之间的人:

SELECT * FROM PersonsWHERE LastNameNOT BETWEEN 'Adams' AND 'Carter'

例:日期:

SELECT * FROM Users 

WHERE AddTime 

BETWEEN '2010-3-29 11:26:00.000' AND '2010-3-31 10:09:24.999'


5.Alias

通过使用 SQL,可以为列名称和表名称指定别名(Alias)。

语法:

SELECT column_name(s)FROM table_nameAS alias_name

LastName设置其别名为Family,FirstName为Name:

SELECT LastName AS Family, FirstName AS NameFROM Persons

6.join


 join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据


JOIN(INNER JOIN): 如果表中有至少一个匹配,则返回行

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

FULL JOIN: 只要其中一个表中存在匹配,就返回行


JOIN(INNER JOIN)语法:

INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,

就不会列出这些行。

SELECT column_name(s)FROM table_name1INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name

LEFT JOIN 语法: 

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

SELECT column_name(s)FROM table_name1INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name

RIGHT JOIN 语法: 

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

SELECT column_name(s)FROM table_name1RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

FULL JOIN 语法: 

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

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

SELECT column_name(s)FROM table_name1FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name


0 0