3.2 使用查询语句
3.2.1 SELECT语句
SELECT语法由以下几个部分组成:
查询的数据来自什么表。
需要查询该表中的哪些属性,即查询该表的什么字段。
查询出符合哪些特定条件的数据,即只过滤出符合条件的数据。
对数据进行排序、汇总等操作。
在编写查询语句之前,应当充分理解编写查询语句的意图,同时还需要了解查询的属性(字段),以及需要查询出哪些符合条件的数据。进一步想想这些被检索出来的数据将有什么用途,是仅供查询?还是需要做一些特殊的汇总计算?只有清楚了解了目的,才能写出更合适的查询语句。
来看个例子。假设需要找到Colorado州对应的Address表中的城市,以及这些城市的地址和邮政编码信息(州信息在StateProvince表中,如代码清单3-1所示),那么应如何编写查询语句呢?
代码清单3-1 查找Colorado州信息
SELECT * FROM Person.Address AS a JOIN Person.StateProvince AS sp ON a.StateProvinceID = sp.StateProvinceID WHERE sp.Name='Colorado'
首先可以确定的是,需要查找的是一些地址信息,这些信息在Person.Address表中有记录,所以应在该表中查找,也就是说,From子句后应使用Person.Address表作为查询主表。
在Address表中,关于州的记录都是使用ID来描述的,因此要获得Colorado州的名称,还需要关联州的配置表,也就是Person.StateProvince表中的数据。于是,除了查询Person.Address表以外,还需要关联Person.StateProvince表,以获得州的名称。
进一步思考,需要查询的是Colorado州的数据,因此还要使用WHERE子句对表数据进行过滤。
最终需要查出的是城市名以及城市地址和邮政编码的信息,要达到此目的,可在SELECT关键字后使用“*”来查询出所需的字段信息,因为所有的字段,包括Address表和StateProvince表的字段都可以被查询出来,但是这样的语句是不健壮的,并且存在一定的性能问题或隐患,该语句应该针对需要查询出的字段,显式地罗列在SELECT关键字后面,假设只需要Person.Address表中的AddressLine1字段,则应该为SELECT a.AddressLine1。后续的章节会详细描述这些性能因素的具体原因和影响范围。