在第一节中,我们对利用SELECT语句以及执行一个简单的检索来获取一个表内所有信息的语法结构有了一个大概了解。本节将进一步介绍怎样执行限定获取信息的查询操作。
从一个表内查询特定列的信息
在上一个实例中,我们为人力资源主管生成了一份包括ABC公司所有雇员工资和上下级关系信息的报表。现在,部门内的几位中级经理由于职责所需也要求获取其中的雇员上下级关系信息。这些经理不需要关于工资的信息,所以我们会为他们提供一份包含数据库中指定信息的报表,这些限定信息包括雇员姓名、雇员ID号及雇员直属上司的ID号。
返回此结果的SELECT语句如下:
SELECT EmployeeID, LastName, FirstName, ReportsTo
FROM employees
这一查询与第一节中的SELECT语句查询有所不同。注意星号通配符被一个列名称组成的表达式列表代替,这些列是要包含在查询结果中的。出于保护隐私的考虑,提供给中级经理们的数据表中将省略掉工资(Salary)列。执行查询结果如下:
EmployeeID |
LastName |
FirstName |
ReportsTo |
---------- |
-------- |
--------- |
--------- |
1 |
思迷 |
乔 |
2 |
2 |
欣碧 |
苏 |
NULL |
3 |
康杜 |
汤 |
2 |
4 |
琼斯 |
白 |
2 |
5 |
艾伦 |
毕 |
4 |
6 |
雷 |
艾 |
4 |
7 |
庄生 |
柯 |
3 |
EmployeeIDLastNameFirstNameReportsTo
从一个表内查询特定行的信息
假设ABC公司的总裁苏欣碧想要一份报表,内容包含她所有直属下级的详细资料。要生成这样一份报表,我们需要通过利用WHERE子句来限制返回的查询结果中出现的行信息。执行以下语法:
SELECT *
FROM employees
WHERE ReportsTo = 2
请注意为了给苏总提供她所需要的详细资料,星号通配符又再次出现在了select_list参数中。我们在一个WHERE子句加上了表达式ReportsTo = 2,这个表达式的目的是使返回的结果限定在ReportsTo的值为2(即苏总的员工ID号)的行。执行上述查询操作返回的结果如下:
Employee |
LastName |
FirstName |
Salary |
ReportsTo |
-------- |
-------- |
--------- |
------ |
--------- |
1 |
思迷 |
乔 |
32000 |
2 |
3 |
康杜 |
汤 |
29500 |
2 |
4 |
琼斯 |
白 |
35000 |
2 |
审阅完上面这份报表后,苏总决定要进一步把结果限定在那些工资超过30,000的雇员。我们可以在WHERE子句中使用复合条件就可以返回想要的结果。修改后的SQL查询语法如下:
SELECT *
FROM employees
WHERE ReportsTo = 2 AND Salary > 30000
执行查询返回的结果如下:
Employee |
LastName |
FirstName |
Salary |
ReportsTo |
-------- |
-------- |
--------- |
------ |
--------- |
1 |
思迷 |
乔 |
32000 |
2 |
4 |
琼斯 |
白 |
35000 |
2 |
注意,结果已经舍去了汤康杜的记录,因为他的薪酬没有达到30,000的最低工资条件。
在本文的最后一节,我们将会介绍两种用来提升查询结果可读性的技巧。