在上文中,简单介绍了数据库以及表格的建立,相信大家都迫不及待想查询其中添加数据,那么本文将带领大家去查询表中数据.
注:中括号内容可无,尖括号起到区分作用,实际代码不写
一.查询
建立数据库的目的是存储数据,查询数据,分析数据.查询是数据库的核心功能.SQL Server中提供SELECT 进行数据据库的查询操作,一般格式如下:
SELECT [TOP x] [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>]...
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING<条件表达式>]
[ORDER BY <列名2>[ASC|DESC]];
SELECT 语句的含义是,根据WHERE子句的条件表达式,从FROM字句指定的基本表或视图中查找满足条件的元组,再按照SELECT子句中的目标列表达式,选出元组中的属性值形成结果表.
如果有TOP ,则将最后的结果表截取前X行进行输出.
如果有GROUP子句,则将结果按照GROUP BY 后的<列名1>的值进行分组,该属性列值相等的元组为一组,每组产生结果表中的一条记录,通常搭配集函数使用.
如果GROUP子句带HAVING短语,则只有满足指定条件的组才予输出.
如果有ORDER子句,则结果表还需要按照<列2>的值进行升序(ASC)或降序(DESC)排序.
SELECT语句不仅可以完成简单的单表查询,也可完成复杂的连接查询,嵌套查询.
下面以Departments,Employee,Salary三表为例,进行后续操作.
Departments
Employee
Salary
二.单表查询
单表查询是指仅涉及一个数据库的查询,例如选择一个表中的某些列值,选择一个表中的某些特定行等.
1.选择表中若干列
选择表中的全部列或部分列,这类运算又称为投影.其变化方式主要表现在SELECT子句的<目标表达式>上.
1) 查询指定列
通过对目标表达式的选择,达到只输出所选目标的目的.
如在 Employee 表中,只对员工的姓名,性别,出生日期进行输出
select Name,Sex,Birthday
from Employee
2) 查询全部列
将表中的所有属性都选出来,可以有两种方法.一种是在SELECT关键字后列出所有列名,如果输出的列和定义的列顺序基本相同,可以简单地将<目标列表达式>自己指定为*.
如查询Departments所有属性
select *
from Departments
3)查询经过计算的值
如在 Employee 表中输出员工的姓名,年龄(出生日期-当前日期)
GetDate() 可以获取当前时间,Date类型
Year() 可以用于Date类型数据,截取出其中的年份
在目标列表达式后可以 [ [as ]别名] 起别名
select top 6 Name,year(getdate())-year(Birthday) Age
from Employee
2.选择表中的若干元组
如果只想选择部分元组的全部或部分列,则还需要指定DISTINCT短语或指定WHERE子句.
1) 消除取值重复的行
两个本来并不完全相同的元组,投影到指定的某些列上后,可能变成完全相同的行.
比如从 直接从 Employee 中选择所有的部门编号输出
select DepartmentID
from Employee
显然,重复的部门号意义不大
select DISTINCT DepartmentID
from Employee