SQL Server(三)-查询数据(1)

(一)普通查询
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学分的课程信息</

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值