SQL查询语句基础 - Select篇
时间:2007-04-11 来源:weiwei6659
本篇试验环境SQL Server。数据库使用SQL Server默认安装的NorthWind。仅对select语句进行简单的操作讲解。通俗易懂(不懂就装懂吧)
引用:
--------------------------------------------------------------------------------
SQL (Struct Query Language)即结构化查询语言,它是使用关系模型的数据库应用语言,由IBM在70年代开发出来。现在SQL结构化查询语言已经成为一个工业标准,几乎所有的数据库都支持它的查询,SQL Server更是如此。
SQL Server服务器中,用SELECT语句实现数据库的查询操作。同时,它可以使用各种子句对查询结果进行分组统计、合计、排序等操作。SELECT语句还可将查询结果生成另一个表(临时表或永久表)。
--------------------------------------------------------------------------------
SELECT 语句的语法格式为:
SELECT [ALL|DISTINCT] select_list
[INTO [new_table_name>
[FROM{table_name|view_name}[(optimizer_hints)]
<,{table_name2|view_name2}[(optimizer_hints)]
[…,{table_name16|view_name16}[(optimizer_hints)>]
[WHERE clouse]
[GROUP BY clause]
[HAVING clause]
[ORDER BY clause]
[COMPUTE clause]
[FOR browse]
以上格式中,“[]”括的项表示可选项,大写的词为关键字,小写的词表示不确定的实体名称。除第一行外,每一行为一个子句,在SELECT中子句可以省略,但在列出时,必须按照以上顺序。(呵呵,规矩很多,固定搭配,用的时候照葫芦画瓢就是了)
下面开始做试验:
一、简单查询语句
简单的SQL查询只包括SELECT子句、FROM子句和WHERE子句,它们分别说明查询列、要查询的表和搜索条件。
例如:
SELECT CustomerID,CompanyName
FROM Customers
WHERE (City = N'London')
以上SELECT语句查询Customers表中City字段为'London’的记录的CustomerID和CompanyName字段。
其查询结果可能为:
AROUT Around the Horn
BSBEV B's Beverages
CONSH Consolidated Holdings
EASTC Eastern Connection
NORTS North/South
SEVES Seven Seas Imports
(所影响的行数为 6 行)
二、SELECT 条件列表
1> 显示Customers表中所有列的内容
SELECT * FROM Customers
将对Customers表中每个字段的值进行显示。
2> 按顺序显示指定列
SELECT CustomerID,CompanyName FROM Customers WHERE (City = N'London')
在SELECT 列表中指定列名来选择不同的列,个列之间用逗号分开,结果的显示顺序为SELECT列表中字段的排列顺序。
3> 更改列标题(以下三句可以达到相同的目的)
SELECT CustomerID,公司名=CompanyName FROM Customers WHERE (City = N'London')
SELECT CustomerID,CompanyName as 公司名 FROM Customers WHERE (City = N'London')
SELECT CustomerID,CompanyName 公司名 FROM Customers WHERE (City = N'London')
执行结果为:
CustomerID 公司名
-----------------------------------------------------------------
AROUT Around the Horn
BSBEV B's Beverages
CONSH Consolidated Holdings
EASTC Eastern Connection
NORTS North/South
SEVES Seven Seas Imports
(所影响的行数为 6 行)
在SELECT语句中可以为选择列指定列标题,其格式为:
列标题=列名 或: 列名 列标题 或 列名 AS 列标题
4>删除重复行(或者叫选择唯一行,即相同的纪录只显示一个)
SELECT语句中可以使用ALL|DISTINCT选项来显示所有行(ALL)或删除重复的行(DISTINCT),缺省为ALL,即不去重。
在前面的例子中将查语句换为:
SELECT DISTINCT keys,marc_id FROM keys
SELECT DISTINCT City,CompanyName FROM Customers
查询结果为:
City CompanyName
-----------------------------------------------------------------
Aachen Drachenblut Delikatessen
Albuquerque Rattlesnake Canyon Grocery
...
(所影响的行数为 91 行)
FROM子句
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定16个表或视图,它们相互之间用逗号分开,如果这些表属于不同的数据库,可用'数据库.所有者名称.对象’格式加以限定。在缺省情况下,FROM子句不指定数据库名称,查询的数据库为当前数据库。
WHERE子句
SELECT 语句中的WHERE子句用来指定查询条件。
WHERE子句中包含各种查询条件,如下表:
运算符分类
运算符
意义
比较运算符
> >= < <= = <> !> !<[code]
大小比较 [code]BETWEEN…AND…
NOT BETWEEN…AND…
IN
NOT IN
LIKE
NOT LIKE
IS NULL
NOT IS NULL
AND
OR
NOT
经常用到的条件运算符是:列表运算符IN和模式匹配符LIKE。
列表运算符IN
列表运算符的格式为:
表达式 [NOT] IN (列表项1,列表项2,列表项3…)
它要求查询时表达式的值(不)在列表内。例如:
SELECT CustomerID,CompanyName FROM Customers WHERE City IN('London','Graz')
(所影响的行数为 7 行)
表示要查询的City来源必须在('London','Graz')中,即City字段值为'London'或'Graz'。
模式匹配符 LIKE
模式匹配符[NOT] LIKE 常用于模糊查询,它判断列值是否与指定的字符串格式匹配。在SQL Server中可使用的匹配符有以下几种:
百分号(%):可匹配任意类型和长度的字符。
下划线(_):匹配单个任意字符。
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任何一个。
[^]:与[]取值相同,但要求所匹配的对象为指定范围以外的任何一个字符。
例如下面的语句利用通配符%来查找以“F”开头的字符串:
SELECT CompanyName FROM Customers WHERE CompanyName LIKE 'F%'
查询结果为:
CompanyName
-----------------------------------------------------------------
Familia Arquibaldo
FISSA Fabrica Inter. Salchichas S.A.
Folies gourmandes
Folk och f? HB
France restauration
Franchi S.p.A.
Frankenversand
Furia Bacalhau e Frutos do Mar
(所影响的行数为 8 行)
GROUP BY子句
GROUP BY 子句的语法格式为:
GROUP BY [ALL] aggregate_free_expression
[, aggregate_free_expression]
在SELECT 语句中,GROUP BY子句和集合函数对数据库进行分组统计,在查询结果中,每一组统计出一个结果。例如:
SELECT COUNT(*) AS Expr2, City AS Expr1
FROM Customers
WHERE (City LIKE 'L%')
GROUP BY City
执行的结果为:
keystring hitcount
1 Lander
1 Leipzig
1 Lille
2 Lisboa
6 London
1 Lule?
1 Lyon
(所影响的行数为 7 行)
在上面的例子中,GROUP BY子句和集合函数COUNT按照fields字段对Customers表进行分组统计。集合函数COUNT对每一组的行数进行计算,分组的标准是GROUP BY中定义的字段 fields。
INTO子句(用查询结果创建新表)
SELECT语句中使用INTO选项可以将查询结果写进新表,新表结构与SELECT语句选择列表中的字段相同。例如:
SELECT COUNT(*) AS Expr2, City AS Expr1
into #temp/*into*/
FROM Customers
WHERE (City LIKE 'L%')
GROUP BY City
通过子句into #temp SQL Server将SELECT查询结果和COUNT的统计结果写入临时表temp中,临时表temp结构包含Expr1和Expr2两个字段。在以后用到这些信息时,就可以从temp表中读取。
UNION子句运算符实现多查询联合
UNION运算符可以将两个或两个以上的查询结果合并成一个结果集合显示。UNION运算符的语法格式为:
查询1 [UNION [ALL] 查询n]…
[ORDER BY 子句]
[COMPUTE 子句]
查询1的格式为:
SELECT select_list
[INTO子句]
[FROM子句]
[WHERE子句]
[GROUP BY 子句]
[HAVING 子句]
查询n 的格式为:
SELECT select_list
[FROM子句]
[WHERE子句]
[GROUP BY 子句]
[HAVING 子句]
查询1与查询不同之处在于查询1多了一个用来指定新表的INTO子句,通过UNION子句句查询n的结果也将写进查询中INTO运算符定义的新表中。
在使用UNION子句时,应保证每个查询语句的选择列表中有相同数量的表达式,并且每个查询选择列表中的对应表达式应具有相同或可以自动转换成相同的数据类型。
缺省情况下,UNION运算符将删除不同查询语句中行值相同的行,如果要保留这些相同的行,应使用ALL选项。
引用:
--------------------------------------------------------------------------------
SQL (Struct Query Language)即结构化查询语言,它是使用关系模型的数据库应用语言,由IBM在70年代开发出来。现在SQL结构化查询语言已经成为一个工业标准,几乎所有的数据库都支持它的查询,SQL Server更是如此。
SQL Server服务器中,用SELECT语句实现数据库的查询操作。同时,它可以使用各种子句对查询结果进行分组统计、合计、排序等操作。SELECT语句还可将查询结果生成另一个表(临时表或永久表)。
--------------------------------------------------------------------------------
SELECT 语句的语法格式为:
SELECT [ALL|DISTINCT] select_list
[INTO [new_table_name>
[FROM{table_name|view_name}[(optimizer_hints)]
<,{table_name2|view_name2}[(optimizer_hints)]
[…,{table_name16|view_name16}[(optimizer_hints)>]
[WHERE clouse]
[GROUP BY clause]
[HAVING clause]
[ORDER BY clause]
[COMPUTE clause]
[FOR browse]
以上格式中,“[]”括的项表示可选项,大写的词为关键字,小写的词表示不确定的实体名称。除第一行外,每一行为一个子句,在SELECT中子句可以省略,但在列出时,必须按照以上顺序。(呵呵,规矩很多,固定搭配,用的时候照葫芦画瓢就是了)
下面开始做试验:
一、简单查询语句
简单的SQL查询只包括SELECT子句、FROM子句和WHERE子句,它们分别说明查询列、要查询的表和搜索条件。
例如:
SELECT CustomerID,CompanyName
FROM Customers
WHERE (City = N'London')
以上SELECT语句查询Customers表中City字段为'London’的记录的CustomerID和CompanyName字段。
其查询结果可能为:
AROUT Around the Horn
BSBEV B's Beverages
CONSH Consolidated Holdings
EASTC Eastern Connection
NORTS North/South
SEVES Seven Seas Imports
(所影响的行数为 6 行)
二、SELECT 条件列表
1> 显示Customers表中所有列的内容
SELECT * FROM Customers
将对Customers表中每个字段的值进行显示。
2> 按顺序显示指定列
SELECT CustomerID,CompanyName FROM Customers WHERE (City = N'London')
在SELECT 列表中指定列名来选择不同的列,个列之间用逗号分开,结果的显示顺序为SELECT列表中字段的排列顺序。
3> 更改列标题(以下三句可以达到相同的目的)
SELECT CustomerID,公司名=CompanyName FROM Customers WHERE (City = N'London')
SELECT CustomerID,CompanyName as 公司名 FROM Customers WHERE (City = N'London')
SELECT CustomerID,CompanyName 公司名 FROM Customers WHERE (City = N'London')
执行结果为:
CustomerID 公司名
-----------------------------------------------------------------
AROUT Around the Horn
BSBEV B's Beverages
CONSH Consolidated Holdings
EASTC Eastern Connection
NORTS North/South
SEVES Seven Seas Imports
(所影响的行数为 6 行)
在SELECT语句中可以为选择列指定列标题,其格式为:
列标题=列名 或: 列名 列标题 或 列名 AS 列标题
4>删除重复行(或者叫选择唯一行,即相同的纪录只显示一个)
SELECT语句中可以使用ALL|DISTINCT选项来显示所有行(ALL)或删除重复的行(DISTINCT),缺省为ALL,即不去重。
在前面的例子中将查语句换为:
SELECT DISTINCT keys,marc_id FROM keys
SELECT DISTINCT City,CompanyName FROM Customers
查询结果为:
City CompanyName
-----------------------------------------------------------------
Aachen Drachenblut Delikatessen
Albuquerque Rattlesnake Canyon Grocery
...
(所影响的行数为 91 行)
FROM子句
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定16个表或视图,它们相互之间用逗号分开,如果这些表属于不同的数据库,可用'数据库.所有者名称.对象’格式加以限定。在缺省情况下,FROM子句不指定数据库名称,查询的数据库为当前数据库。
WHERE子句
SELECT 语句中的WHERE子句用来指定查询条件。
WHERE子句中包含各种查询条件,如下表:
运算符分类
运算符
意义
比较运算符
> >= < <= = <> !> !<[code]
大小比较 [code]BETWEEN…AND…
NOT BETWEEN…AND…
IN
NOT IN
LIKE
NOT LIKE
IS NULL
NOT IS NULL
AND
OR
NOT
经常用到的条件运算符是:列表运算符IN和模式匹配符LIKE。
列表运算符IN
列表运算符的格式为:
表达式 [NOT] IN (列表项1,列表项2,列表项3…)
它要求查询时表达式的值(不)在列表内。例如:
SELECT CustomerID,CompanyName FROM Customers WHERE City IN('London','Graz')
(所影响的行数为 7 行)
表示要查询的City来源必须在('London','Graz')中,即City字段值为'London'或'Graz'。
模式匹配符 LIKE
模式匹配符[NOT] LIKE 常用于模糊查询,它判断列值是否与指定的字符串格式匹配。在SQL Server中可使用的匹配符有以下几种:
百分号(%):可匹配任意类型和长度的字符。
下划线(_):匹配单个任意字符。
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任何一个。
[^]:与[]取值相同,但要求所匹配的对象为指定范围以外的任何一个字符。
例如下面的语句利用通配符%来查找以“F”开头的字符串:
SELECT CompanyName FROM Customers WHERE CompanyName LIKE 'F%'
查询结果为:
CompanyName
-----------------------------------------------------------------
Familia Arquibaldo
FISSA Fabrica Inter. Salchichas S.A.
Folies gourmandes
Folk och f? HB
France restauration
Franchi S.p.A.
Frankenversand
Furia Bacalhau e Frutos do Mar
(所影响的行数为 8 行)
GROUP BY子句
GROUP BY 子句的语法格式为:
GROUP BY [ALL] aggregate_free_expression
[, aggregate_free_expression]
在SELECT 语句中,GROUP BY子句和集合函数对数据库进行分组统计,在查询结果中,每一组统计出一个结果。例如:
SELECT COUNT(*) AS Expr2, City AS Expr1
FROM Customers
WHERE (City LIKE 'L%')
GROUP BY City
执行的结果为:
keystring hitcount
1 Lander
1 Leipzig
1 Lille
2 Lisboa
6 London
1 Lule?
1 Lyon
(所影响的行数为 7 行)
在上面的例子中,GROUP BY子句和集合函数COUNT按照fields字段对Customers表进行分组统计。集合函数COUNT对每一组的行数进行计算,分组的标准是GROUP BY中定义的字段 fields。
INTO子句(用查询结果创建新表)
SELECT语句中使用INTO选项可以将查询结果写进新表,新表结构与SELECT语句选择列表中的字段相同。例如:
SELECT COUNT(*) AS Expr2, City AS Expr1
into #temp/*into*/
FROM Customers
WHERE (City LIKE 'L%')
GROUP BY City
通过子句into #temp SQL Server将SELECT查询结果和COUNT的统计结果写入临时表temp中,临时表temp结构包含Expr1和Expr2两个字段。在以后用到这些信息时,就可以从temp表中读取。
UNION子句运算符实现多查询联合
UNION运算符可以将两个或两个以上的查询结果合并成一个结果集合显示。UNION运算符的语法格式为:
查询1 [UNION [ALL] 查询n]…
[ORDER BY 子句]
[COMPUTE 子句]
查询1的格式为:
SELECT select_list
[INTO子句]
[FROM子句]
[WHERE子句]
[GROUP BY 子句]
[HAVING 子句]
查询n 的格式为:
SELECT select_list
[FROM子句]
[WHERE子句]
[GROUP BY 子句]
[HAVING 子句]
查询1与查询不同之处在于查询1多了一个用来指定新表的INTO子句,通过UNION子句句查询n的结果也将写进查询中INTO运算符定义的新表中。
在使用UNION子句时,应保证每个查询语句的选择列表中有相同数量的表达式,并且每个查询选择列表中的对应表达式应具有相同或可以自动转换成相同的数据类型。
缺省情况下,UNION运算符将删除不同查询语句中行值相同的行,如果要保留这些相同的行,应使用ALL选项。
相关阅读 更多 +