选择和投影

在关系术语中,选择被定义为取得满足特定条件的单个表的行的水平子集。此类 SELECT 语句返回表中的某些行和所有列。选择是通过 SELECT 语句的 WHERE 子句实现的,如下图所示:

图: 查询

SELECT * FROM customer WHERE state = 'NJ'; 
该结果包含的列数与 customer 表相同,但只是后者的行的子集。在此示例中,DB-Access 显示单独行上来自每列的数据。

图: 查询结果

customer_num  119
        fname         Bob
        lname         Shorter
        company       The Triathletes Club
        address1      2405 Kings Highway
        address2
        city          Cherry Hill
        state         NJ
        zipcode       08002
        phone         609-663-6079
        
        customer_num  122
        fname         Cathy
        lname         O'Brian
        company       The Sporting Life
        address1      543d Nassau
        address2
        city          Princeton
        state         NJ
        zipcode       08540
        phone         609-342-0054

在关系术语中,投影被定义为从保留唯一行的单个表的列中获取垂直子集。此类SELECT 语句返回表中的某些行和某些列。

投影是通过 SELECT 语句的 Projection 子句中的投影列表实现的。如下图所示。

图: 查询

SELECT city, state, zipcode FROM customer;
此结果包含的列数与 customer 表相同,但只是投影表中列的子集。因为只从每行中选择一小部分的数据,所以 DB-Access 能够在一行上显示行的所有数据。

图: 查询结果

city            state zipcode
        
        Sunnyvale       CA    94086
        San Francisco   CA    94117
        Palo Alto       CA    94303
        Redwood City    CA    94026
        Los Altos       CA    94022
        Mountain View   CA    94063
        Palo Alto       CA    94304
        Redwood City    CA    94063
        Sunnyvale       CA    94086
        Redwood City    CA    94062
        Sunnyvale       CA    94085
        ⋮
        Oakland         CA    94609
        Cherry Hill     NJ    08002
        Phoenix         AZ    85016
        Wilmington      DE    19898
        Princeton       NJ    08540
        Jacksonville    FL    32256
        Bartlesville    OK    74006
最常见的 SELECT 语句都同时使用选择和投影。此类查询返回表的某些行和某些列。如下图所示。

图: 查询

SELECT UNIQUE city, state, zipcode
        FROM customer
        WHERE state = 'NJ';
图 6包含 customer 表的列的子集和行的子集。

图: 查询结果

city            state zipcode 
        
        Cherry Hill     NJ    08002  
        Princeton       NJ    08540