SQL的基本操作(4.数据的检索)
想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的SQL的基本操作(4.数据的检索)教程,一起来看看吧!超容易上手~
Select子句是每一个检索数据的查询核心。它告诉数据库引擎返回什么字段。
Select子句的常见形式是:
Select*
该子句的意思是“返回在所指定的记录源中能找到的所有字段”。这种命令形式很方便,因为你无需知道从表中检索的字段名称。然而,检索表中的所有列是低效的。因此,因该只检索需要的字段,这样可以大大的提高查询的效率。
2.使用From子句指定记录源
From子句说明的是查询检索记录的记录源;该记录源可以是一个表或另一个存储查询。
你还能从多个表中检索记录,这在后面的章节中将介绍。
例子:
Select*Fromstudents检索students表中的所有记录
3.用Where子句说明条件
Where子句告诉数据库引擎根据所提供的一个或多个条件限定其检索的记录。条件是一个表达式,可具有真假两种判断。
例子:
Select*FromstudentsWherename="影子"
返回students中name字段为影子的列表,这次所返回的结果没有特定顺序,除非你使用了OrderBy子句。该子句将在后面的章节介绍。
注意:Where子句中的文本字符串界限符是双引号,在VB中因改为单引号,因为在VB中字符串的界定符是双引号。
补充:
使用And和Or逻辑可以将两个或更多的条件链接到一起以创建更高级的Where子句。
例子:
Select*FromstudentsWherename="影子"Andnumber100
返回name为影子number大于100的列表。
例子:
Select*FromstudentsWherename="影子"And(number100Ornumber50)
返回name为影子,number大于100或者小于50的列表。
Where子句中用到的操作符
操作符功能
小于
=小于或等于
大于
=大于或等于
=等于
不等于
Between在某个取值范围内
Like匹配某个模式
In包含在某个值列表中
SQL中的等于和不等于等操作符与VB中的意义和使用相同
例子:
(1).Between操作符
Usecust
Select*Fromstudents
WherenumberBetween1and100
Between操作符返回的是位于所说明的界限之内的所有记录值。这个例子就返回number字段1到100之间的全部记录。
(2).Like操作符和通配符
Usecust
Select*Fromstudents
WherenameLike"影"
Like操作符把记录匹配到你说明的某个模式。这个例子是返回含“影”的任意字符串。
四种通配符的含义
通配符描述
代表零个或者多个任意字符
_(下划线)代表一个任意字符
[]指定范围内的任意单个字符
[^]不在指定范围内的任意单个字符
全部示例子如下:
Like"BR"返回以"BR"开始的任意字符串
Like"br"返回以"Br"开始的任意字符串
Like"頽"返回以"een"结束的任意字符串
Like"en"返回包含"en"的任意字符串
Like"_en"返回以"en"结束的三个字符串
Like"[CK]"返回以"C"或者"K"开始的任意字符串
Like"[S-V]ing"返回长为四个字符的字符串,结尾是"ing",开始是从S到V。
Like"M[^c]"返回以"M"开始且第二个字符不是"c"的任意字符串。
4.使用OrderBy对结果排序
OrderBy子句告诉数据库引擎对其检索的记录进行排序。可以对任何字段排序,或者对多个字段排序,并且可以以升序或隆序进行排序。
在一个正式的Select查询之后包含一个OrderBy子句,后跟想排序的字段(可以有多个)便可以说明一个排序顺序。
例子:
Usecust
Select*Fromstudents
WherenameLike"影"
OrderBynumber
对返回的结果按number进行排序。
以降序排序
如要以隆序排序,只需在排序的字段之后使用Desc关键字。
例子:
Usecust
Select*Fromstudents
WherenameLike"影"
OrderBynumberDesc
5.使用Top显示某个范围的第一个记录或最后一个记录。
使用Top关键字可以只显示一个大记录前面或后面的少数几个记录。在查询中,Top关键字与排序子句一起把结果集限制为少数几个记录或按某个百分比显示整个结果记录集合中的一部分。
例子:
SelectTop3*Fromstudents返回students表中的前3条记录
SelectTop10Percent*Fromstudents返回students表中前面的10个记录
SelectTop3*FromstudentsOrderBynumberdesc返回students表中number最大的(最后)的3条记录
6.用As对字段名进行别名化
为什么在查询中对字段命以别名,或重新命名,这样做的原因有两个:
☆所涉及的表的字段名很长,想使字段在结果集中更易处理一些。
☆创建的查询产生了某些计算或合计列,需要对之进行命名。
不管是什么原因对字段命以别名,在SQL中都可以容易地使用As子句做得。
例子:
SelectnumberAs学号,nameAs姓名Fromstudents
7.合并查询
合并查询(UnionQuery)用于合并具有相同字段结构的两个表的内容,如果想在一个结果集中显示多个记录源中的不相关的记录时,这十分有用。
例子:
Select*
Fromstudents
Union
Select*
Fromstudents1
该查询结果集把students和students1中的记录合并到一个结果中,其输出就和原表归档之前一模一样。
注意:缺省情况下,合并查询不会返回重复记录(如果记录归档系统在把记录拷到归档表中后不将相应的记录删除,这时该功能就有用了),可以加上All关键字而让合并查询显示重复记录。
例子:
Select*
Fromstudents
UnionAll
Select*
Fromstudents1
该合并查询显示students表和students1表的内容时,没有对重复记录进行处理
补充:
Union运算符允许把两个或者多个查询结果合并到一个查询结果集中。如果比较Union和Join两咱运算符,那么Union运算符增加行的数量,而Join运算符增加列的数量。使用Union时应该注意,两个结果中的列的结构必须匹配,数据类型必须兼容等等。
Union运算符的语法形式如下:
Selectselect_list
Fromclause
Whereclause
GroupByclause
Havingclause
Union[All]
Selectselect_list
Fromclause
Whereclause
GroupByclause
Havingclause
OrderByclause
Computeclause
对于Union运算符,有下列几点需要说明:
·在默认情况下,Union运算符删除全部冗余行。如果使用All选项,那么冗余行不删除。
·在Union语句中的全部select_list必须有相同数量的列、兼容的数据类型并且按照同样的顺序出现。
·在结果集中,列名来自第一个Select语句。
8.连接查询
在实际使用过程中经常需要同时从两个表或者两个以上表中检索数据。连接就是允许同时从两个表或者两个以上表中检索数据,指定这些表中某个或者某些列作为连接条件。在SQLServer中,可以使用两种连接语法形式,一种是Ansi连接语法形式,这是连接用在From子句中,另外一种是SQLServer连接语句形式,这是连接用在Where子句中。
Ansi连接语法形式如下:
Selecttable_name.column_name,table_name.column_name,...
From{table_name[join_type]Jointable_nameOnsearch_conditions}
Where[search_conditions]
在Ansi语法形式中,可以Ansi连接关键字来确定使用的连接形式。例如:
☆使用InnerJoin关键字,结果集中仅包含满足条件的行。
☆使用CrossJoin关键字,结果集中包含两个表中所有行的组合。
☆使用OuterJoin关键字,结果集中既包含那些满足条件的行,还包含那些其中某个表的全部行。
SQLServer连接语法形式如下所示:
Selecttable_name.column_name,table_name.column_name,...
From[table_name,tab->