資料庫第六週作業

xiaolvwansui發表於2018-04-15
樓梯到T-SQLDML級別1:基本SELECT語句格雷戈裡·拉森著,2011/10/07系列本文是樓梯系列的一部分:從樓梯到T-SQLDML的樓梯。此階梯將為您提供如何使用SQLServer的Transact-SQL(T-SQL)方言處理來自SQLServer表的資料的基本理解。DML是一種資料操作語言,是處理資料的語言的一個方面。它包括SELECT、INSERT、UPDATE和DELETE語句。這個階梯也將提供一些SQL語言的歷史和一些關於集合論的一般概念。每個級別都將建立在以前的級別之上,所以當您完成時,您將很好地瞭解如何從SQLServer中選擇和修改資料。以下是在這一系列樓梯中將涵蓋的不同級別:第1級:基本SELECT語句第2級:結構化查詢語言(SQL)的歷史第3級:關聯式資料庫設計第4級:SQL的數學:第1部分第5級:SQL的數學:第2部分第6級:使用ORDERBY子句對資料進行排序的基本原理第7級:根據子句使用簡單組彙總資料第8級:資料修改:更新第9級:資料修改:刪除第1級:基本SELECT語句SQLServer資料庫中的資料管理有很多不同的方面。在進入與管理應用程式資料相關的複雜管理問題之前,您需要從從表中檢索資料的基礎開始。若要從SQLServer表返回資料,請使用SELECT語句。在這個級別上,我將介紹基本SELECT語句的元件以及如何使用它從單個SQLServer表檢索資料。SELECT語句中的三個部分從單個表返回資料的基本SELECT語句由三個不同的部分組成:列列表、FROM子句和WHERE子句。使用這些不同元件構造基本SELECT語句的語法如下所示:選擇<列列表>來自<表名稱>其中<WHERE標準>;“<Column list>”將包含您希望從查詢中返回的列列表,“<table_name>”將包含從中選擇資料的表,而“<WHERWERS>>”很好地標識將用於約束SELECT語句返回的行的搜尋條件。注意,WHERE子句是可選的。請注意,我在這個階梯中的所有示例都將使用AdventureWorksSQLServer 2005資料庫,該資料庫可以從CodePlex獲得,這個位置是:http://sqlserverspreses.codeplex.com/。讓我們看看以下非常簡單的SELECT語句,它從AdventureWorks資料庫中的表中選擇一些資料。接下來可以使用SQLServerManagementStudio中的查詢視窗執行本文中描述的每個查詢語句,同時將資料庫設定為AdventureWorks。選擇ProductCatoryID,姓名產品類別其中ProductCatoryID<2;在這裡,我從Production.ProductClass表中選擇了兩個不同的列,ProductCatoryID和Name。由於SELECT語句有WHERE子句,所以它將從表返回的行限制為只有那些ProductCatoryID值小於2的行。現在您已經瞭解了SELECT語句的基本概念,讓我更詳細地研究SELECT語句的每個元件。列列表列列表在SELECT關鍵字之後,是指定要從表返回的列的位置。通過指定列名來標識這些列。如果列出多個列,則用逗號分隔。在以後的級別中,我們將研究從指定的表返回列以外的值的可能性,在第一個級別中,我們將堅持基本操作。在上面的示例的基礎上,讓我們探索一下,如果一個列列表只選擇一個列,或者一個表的所有列,那麼它會是什麼樣的。如果我只想返回Production.ProductClass表的Name列,那麼我的查詢將如下所示:選擇名稱產品類別其中ProductCatoryID<2;在這裡,您可以看到,在上面的查詢中,我只在SELECT和FROM關鍵字之間指定了Name列。但是,如果我想指定Production.ProductClass表中的所有列,我將執行以下查詢:選擇ProductCatoryID,名字,羅吉德修正Date產品類別其中ProductCatoryID<2;在這個SELECT語句中,您可以看到我已經識別了4個不同的列,每個列用逗號分隔。這些列都可以在一行上列出,也可以在不同的行上分隔,以提高可讀性,就像我所做的那樣。還有一種從表中選擇所有列的方法,即指定星號,而不是指定單獨的列名。下面是使用星號規範的SELECT語句:選擇*產品類別其中ProductCatoryID<2;在應用程式中使用星號(通常稱為“星星”)時要小心。由於星號將返回表中的所有列,如果您碰巧更改了一個表以包含一個額外的列,那麼將返回附加列而不修改實際的SELECT語句。但是,如果您已按名稱指定了所有列,則新增新列時將不會返回該列,除非將其新增到列列表中。使用星號進行測試是可以接受的,但是如果您想遵循最佳實踐,請不要在應用程式程式碼中使用它。這是最佳實踐,因為大多數應用程式期望從給定的SELECT語句返回固定數量的列。當將列新增到表中,並且使用星號方法標識表列時,返回的附加列會破壞未編碼以處理這些額外資料的應用程式。來自條款在FROM子句中,標識要從中選擇資料的表。在這個級別上,我們只討論從FROM子句中的單個表中選擇資料。請注意,隨著您對SQL的瞭解不斷加深,FROM子句可以標識要從中選擇資料的多個表。有許多不同的方法來標識要在其中選擇資料的表。事實上,有四種不同的方式,其中三種我將在本文中介紹,第四種我只會提到。第一種方法是通過標識表名和表所屬的架構來指定表。到目前為止,我在所有示例中都是這樣標識我的所有表名的。在我的每個例子中,我都說表名是Production.ProductClass。實際的表名只是ProductClass,它包含在生產模式中。識別FROM子句中的表的第二種方法是隻宣告表名。當FROM子句僅包含表名時,SQLServer將假定該表包含在資料庫使用者的預設架構下或DBO模式下。讓我更詳細地解釋一下這個概念。當您向僅標識表名的SQLServer提交查詢時,SQLServer將需要解析該表所處的架構。這是因為在給定的資料庫中可以有多個同名的表,只要它們在不同的模式中。要確定一個表駐留在SQLServer中的架構,需要經過兩個步驟。第一步是對提交查詢的資料庫使用者使用預設架構,並附加他們的預設架構表名,然後查詢該表。如果SQLServer使用使用者預設架構找到表,則不執行步驟二。如果SQLServer沒有使用使用者預設架構找到表,則SQLServer將檢查DBO架構以查詢表。無論您的資料庫是否包含單個模式,最好的做法是習慣於使用模式名稱後面的表名來標識FROM子句中的表。通過這樣做,您可以減少SQLServer解析表名和促進計劃快取重新使用所需的工作量。識別表的第三種方法是使用三個部件名,其中最後兩個部分是模式和表名,第一部分是資料庫名。下面是一個SELECT語句,類似於我以前的SELECT語句,它使用了三個部分的名稱:選擇*來自AdventureWorks.Production.ProductClass其中ProductCatoryID<2;在這裡,您可以看到,我將資料庫名AdventureWorks附加到在FROM子句中標識的Production.ProductClass表中。通過使用FROM子句中表的三部分命名約定,可以將SQLServerManagementStudio中查詢視窗的資料庫上下文設定為任何資料庫,而且資料庫引擎仍將知道用於查詢的資料庫、架構和表。當構建需要從例項中的多個資料庫檢索資料的應用程式時,使用三個部件名稱有助於從單個應用程式中的多個資料庫檢索資料。最後一種方法是使用四部分的名稱,第四部分(在資料庫名稱之前)標識連結伺服器的名稱。由於連結伺服器超出了本階梯的範圍,我將不再進一步討論這個主題。如果您應該跨包含4個部分的表名執行,您將知道該表與連結伺服器相關聯。何地條款SELECT語句的WHERE子句是可選的。WHERE子句用於約束SELECT語句返回的行。資料庫引擎根據WHERE子句計算每一行,然後只返回符合WHERE子句中標識的搜尋條件的行。當您編寫更多SELECT語句時,您會發現大多數SELECT語句可能包含WHERE子句。簡單WHERE子句將包含單個搜尋條件,而更復雜的WHERE子句可能包含許多條件。當在WHERE子句中使用多個條件時,它們將通過使用AND和OR邏輯運算子邏輯地組合在一起。

相關文章