Access創建查詢


查詢是指指示數據庫返回的一些數據(或全部)在數據庫的動作。 換句話說,在「查詢」數據庫中的一些數據匹配一個給定的標準。查詢是針對一個或多個表運行僅返回感興趣的數據。

例如,你可能會喜歡看所有個人的姓氏爲「Griffin」的名單。 或者你可能希望看到所有數據庫中在給定的時間內註冊用戶的列表。您可能還希望看到哪些客戶已訂購了特定產品。要做到這一切,你需要執行一個查詢。

示例數據

在我們開始之前查詢數據庫,我們也許應該確保首先得到了足夠的數據。 否則,不管你的查詢有多好 - 如果沒有數據,它們都將返回零的結果。因此,讓我們加入一些數據。

記住,ID列和dateCreated會列自動生成, 所以只需要輸入數據到表中的另外兩列。

Customers 表

你可以隨意補加你自己的數據。這裏是我的:

Screenshot of sample data in the Products table

Products 表

你可以隨意補加你自己的數據。這裏是我的:

Screenshot of sample data in the Products table

Orders 表

再次,隨意彌補自己的,但是你需要確保在客戶ID和產品ID字段中的值相匹配實際ID相應的表。例如,如果你的訂單表包含ID爲5的客戶,那需要確保在Customers表中的實際要有一個客戶的客戶ID爲5。下面是Orders表的一些樣本數據:
Screenshot of sample data in the Orders table

引用完整性

當你創建一個關係,你還必須實施參照完整性(這是我們選擇的時候,我們創建的關係)的選項。這可以防止其在引用表中沒有相應的主鍵值外鍵值。

使用我們的表作爲一個例子,假設你有10個記錄在Customers表(客戶ID爲從1-10),但你的訂單表包含使用客戶ID爲11的記錄。在這種情況下,參照完整性沒有被維持。如果你已經對關係實施參照完整性(因爲我們有),訪問將阻止這種情況的發生。

下面是如果你試圖輸入一個值,將違反參照完整性提示的一個截圖。在這種情況下,我試圖輸入客戶ID爲50和ProductId爲50,但客戶和產品表沒有客戶ID爲或產品編號爲50的記錄:

Screenshot of referential integrity warning

請注意,如果您已經啓用實施參照完整性只能得到這個消息。如果您還沒有實施參照完整性,Access會愉快地讓你輸入毫無意義的數據值,數據庫的引用完整性就會沒有起作用。

創建查詢

現在,讓我們創建一個返回已訂購了產品的所有客戶的名稱的查詢。

  1. 確保你已經創建選項卡上的功能區打開,單擊:Query Design
    MS Access 2013: Creating a query - step 1
  2. 顯示錶對話框將會出現使用所有列出的表中。選擇所有三個表,然後單擊添加,然後單擊:Close:
    MS Access 2013: Creating a query - step 2
  3. 三個表沒有在頂部窗格中所示(功能區下方)。選擇在您的查詢的結果將提交的字段。可以雙擊字段名稱或單擊並拖動它到一個列在底部窗格中。選擇字段,如下所示:
    MS Access 2013: Creating a query - step 3
  4. 請單擊功能區的左上角部分的運行(run)按鈕:
    MS Access 2013: Creating a query - step 4
  5. 你不應該看到這樣的查詢結果。因爲這裏是我的:
    Screenshot of the query result
  6. 保存方法是右鍵單擊該查詢Query1選項卡上,並給它起名字爲:Customer Orders:
    Screenshot of saving the query

那麼我們的查詢實際上是怎麼做的?

我們查詢成功返回至少一個產品的所有客戶訂單,它包括產品,其價格在名字的旁邊。也可以看到,一些客戶已經訂購了多個產品。該查詢使用,我們創建並返回匹配的數據自動加入了三張表之間的關係。

這個查詢只能返回至少有一個產品的客戶訂單。如果客戶在客戶表中,但不訂購產品,客戶的記錄不會顯示在此查詢的結果。如果你回頭看看Customers表(接近這個頁面的頂部),你會看到,瑪吉·辛普森(Marge Simpson)是一個客戶但她沒有訂購的產品,但(即她沒有在訂單表的相應的記錄)。 好吧,事實上,Marge 只是一個潛在的客戶。她只是表示在購買太空船的興趣。但是,這並沒有將她的名字加入到數據庫!

在任何情況下,查詢已完成其工作。我們不希望看到,沒有訂購任何東西的客戶的名單中。