在数据库的操作中,开发人员或者用户为了取得数据记录,需要检索数据表中的信息。在SQL语句中,检索数据记录是通过SELECT语句来完成的。SELECT语句可以检索数据表或者视图中的数据,并将查询出来的数据以结果集的形式显示出来。从这一章开始对SELECT查询语句做全面的介绍,本章主要介绍SELECT语句查询的基本操作。
查询全部列的记录
在SQL语句中,如果想要检索数据表中全部列的记录,就需要对数据表中的所有列进行查询。在SQL语句中,提供了一种方便查询数据表或者视图的所有列的方法,其语法格式如下:
SELECT *
FROM 表名或者视图名[,表名或者视图]
其中,SELECT语句后面的“*”号表示查询数据表中的所有列,FROM子句后面的表名或者视图名用来表示指定要查询数据表或者视图的名字。[]里面指定的表名或者视图是可选的,也就是说,FROM子句后面可以跟多个表或者视图的名字,多个表或者视图之间用逗号分开。
说明:FROM字句后面最多可以指定256个表或者视图的名称。
查询表中指定的列
在实际开发应用中,很多时候,开发人员或者用户并不希望看到数据表中所有的记录,而只是对数据表中其中某一列或者某几列的数据感兴趣,此时就需要查询数据表中指定列的信息。在SELECT语句中查询数据表或者视图指定列的语法格式如下:
SELECT 目标列[,目标列,…]
FROM 表名或者视图名[,表名或者视图]
其中,SELECT语句后面的目标列表示要查询的指定列的名字。[]里面指定的目标列式可选的。也就是说,SELECT语句中指定的目标列可以是一列也可以是多个列,指定多个列时,多个列名之间需要用逗号分开。FROM子句后面的表名或者视图名用来表示指定要查询数据表或者视图的名字。[]里面指定的表名或者视图是可选的,也就是说,ROM语句后面可以跟多个表或者视图的名字,多个表或者视图之间用逗号分开。
查询表中不重复的记录
在使用SELECT语句执行查询操作时,检索的是数据表中所有满足条件的行,如果数据表中有重复行也会被查询出来。在实际应用中,往往不希望看到结果中有重复的记录行存在。为了在查询结果中不显示重复的记录行,在SELECT语句中就需要加上一个DISTINCT关键字排除查询结果中的重复行记录,格式如下:
SELECT DISTINCT 目标行[,目标行,...]
FROM 表名或者视图名[,表名或者视图]
使用列别名查询
在前面的SELECT语句显示的查询结果中,可以看到查询结果中显示的列的名字就是SELECT语句中指定的在数据表中定义的列的名字。这些在数据表的中定义的列的名字一般都是英文。有时,为了更好的理解某一列显示的信息,在SELECT语句中可以使用列别名的形式改变查询结果中显示的列的名字。其语法格式如下:
SELECT目标列 [AS] 列别名[,目标列 [AS] 列别名…]
FROM 表名或者视图名[,表名或者视图]
其中,SELECT语句后面的目标列表示要查询的指定列的名字。AS关键字后面跟的就是要使用的列别名,其中关键字AS是可选的。在SELECT语句中指定的目标列可以是一列也可以是多个列,指定多个列时,多个列名之间需要用逗号分开。FROM子句后面的表名或者视图名用来表示指定要查询数据表或者视图的名字。[]里面指定的表名或者视图是可选的,也就是说,ROM语句后面可以跟多个表或者视图的名字,多个表或者视图之间用逗号分开。
SELECT stuID AS 学生编号, stuName AS 学生姓名, age AS 年龄, sex AS 性别, birth AS 出生日期
FROM T_student
在查询结果中,列标题变成了别名的形式。说明:在SELECT语句中,可以使用一个空格代替关键字AS,空格后面再跟上列别名的名称。
如果列别名中包含空格或特殊字符,例如点号(.)、逗号、分号、冒号等,此时就需要使用单引号或双引号将别名引起来。
对查询的记录进行算术运算
SELECT语句中还可以使用算术运算符对指定的列进行算术运算。其中算术运算符包括加(+)、减(-)、乘(×)、除(÷)。其中乘除SELECT语句中的优先级高于加减运算符的优先级。通过使用算术运算可以取得所需要列的特定结果。
SELECT teaID AS 教师编号,teaName AS 教师姓名, salary*12 AS 年收入
FROM T_teacher
说明:SELECT语句中进行算术运算,只会改变显示的查询结果,并不会改变数据表中查询的原有值。
使用连接符(||)连接字段
在使用SELECT语句查询的过程中,有时需要将两个或者是更多的字段连接起来显示一个更有意义的结果。在SELECT语句中,如果需要将多个字段连接起来,在Oracle数据库中可以使用“||”连接符来完成。下面来看一个使用“||”连接符的例子。
MYSQL数据库和Microsoft SQL server数据库不支持使用"||"连接符连接字段,如果想要连接多个字段,在MYSQL中可以使用CONCAT函数;在SQL server中直接使用加号(+)运算符即可。
关于NULL值
在数据库中,如果没有为该列赋值,而且该列没有默认值,此时查询的结果就为空值,即NULL。NULL既不表示空格,也不表示0。