(一)普通查询
1、查询stu_info表中所有数据
SELECT *
FROM table_source
2、 查询表中指定字段的数据
查询出stu_info表中“depart”(院系)字段的值,即可知道有哪些院系的学生
SELECT depart
FROM stu_info
3、查询stu_info表中,所有学生的姓名、性别和手机的信息。
SELECT sname,sex,telephone
FROM stu_info
4、 查询结果中去除重复信息
去除重复值需要使用DISTINCT关键字。
将例3运行结果中的重复值去掉。
SELECT DISTINCT depart
FROM stu_info
DISTINCT关键字不仅可以去除重复值,也有排序数据的功能。上面查询结果就是按“depart”字段升序排列的。但是,DISTINCT关键字的排序功能是不可靠的,因此,如果需要排序查询结果,则应当使用ORDER BY子句,明确指出排序的根据和方式。
注意:使用DISTINCT关键字会使查询效率下降,因此应尽量避免使用它,在需要去除重复信息时可以使用GROUP BY子句。
使用DISTINCT关键字会使查询效率下降的原因是:在去除重复值之前,首先要对查询结果集进行排序操作,将相同值的记录放在一起分为很多组,然后再删除每组第一条记录以外的其他记录,以此达到去掉重复值的目的。因此,排序操作是降低效率的主要原因。
5、根据现有列值计算新列值
查询每个学生的年龄。
SELECT sname,DATEDIFF(year,birth,GETDATE())
FROM stu_info
GETDATE()用于获取当前系统时间,DATEDIFF函数用于获取两个日期之间的差。
6、命名新列
从图中会看到一个奇怪的现象——第二列没有字段名,这是因为第二列是通过计算得出的新列,而并非是表原有的列,所以没有字段名。没有字段名的列会给用户带来很多不便,例如,无法引用该列等。
通过本例还应该知道,SELECT子句中除了可以放置数据表原有的字段名外,还可以放置表达式,后面还会学习字段列表中放置常量。
例6 查询每个学生的年龄,命名年龄字段
SELECT sname,DATEDIFF(year,birth,GETDATE()) AS 年龄
FROM stu_info
7、查询stu_info表中所有学生的“sname”、“sex”和“depart”三个字段,并将结果集中的“sname”字段改为“学生姓名”,“sex”改为“性别”,“depart”改为“系别”。
SELECT sname AS 姓名,sex AS 性别,depart AS 系别
FROM stu_info
这种设置别名操作不会改变stu_info表中原来的字段名,它只对查询结果集有作用。
设置别名时,需要注意的一点是,如果别名是以数字或者特殊符号开头,例如以等号(=)开头,则应当将别名放入双引号中。
说明:在SQL Server中给字段取别名时可以省略AS关键字,直接用空格代替。例如,下面的SELECT语句运行结果同上例中
SELECT sname 学生姓名, sex 性别, depart 系别
FROM stu_info
8、将查询结果保存为新表
在SELECT子句的后面,FROM子句的前面加了一个“INTO”关键字,关键字的后面紧跟用于保存查询结果的新表的名字。
SELECT *(或字段列表)
INTO 新表名
FROM table_source
……
【例8】从stu_info表中,查询每个学生的年龄,并将查询结果保存为age表。
SELECT sname,DATEDIFF(year,birth,GETDATE()) AS 年龄
INTO age
FROM stu_info
该语句运行后会出现类似下面的提示文字。
(7 行受影响)
这表示查询结果已经被保存到了age表中。使用下面的查询语句查看age表中的内容。
SELECT *
FROM age
注意:将查询结果保存为表时应当考虑到修改、添加和删除等问题。例如,当修改了某学生stu_info表中的“birth”字段的值时,还应当修改age表中的年龄。
9、连接字段
【例9】从stu_info表中,查询所有学生的姓名和系别,并将这两个字段连接为一个字段。
SELECT sname+depart
FROM stu_info
改进:
(1)需要给新字段设置字段名。
SELECT sname+depart AS 姓名及来源地
FROM stu_info
(2)姓名和来源地之间的距离太大,应当缩小距离。
RTRIM函数去除字段值右侧的空格
SELECT RTRIM(sname)+RTRIM(depart) AS 姓名及来源地
FROM stu_info
(3)应当将来源地放进括号内,与姓名隔开。
SELECT RTRIM(sname)+'('+RTRIM(depart)+')' AS 姓名及来源地
FROM stu_info
有些DBMS连接字段或常量时不是使用加号,而是使用两个竖杠(||)。
(二)根据条件查询数值数据(WHERE)
【例10】从course(课程)表中,查询所有4学分的课程信息。</