無廢話SQL語法--3.第一大將SELECT(1)

第一大將SELECT

  為什麼SELECT是SQL語法的第一大將?SELECT的中文有「選擇、精選、上等、挑剔的」,使用在資料庫中可以這樣解釋,我們要對資料庫選擇些什麼?我們要對資料庫精選出什麼?我們要對資料庫挑剔些什麼?我們要對資料庫選出上上之選的什麼?也就是說你想從資料庫裡得到的資訊都必須經過細心思考,由SELECT來決定,或許我這樣說,如果你搞通了SELECT,你已經完成了學習SQL語法百分之九十以上的精髓,這可是一點都不誇張。

資料庫的架構

  我們以SSE中我們新增範例的Northwind來簡介一下資料庫的架構:



  每個資料庫軟體中(如SSE)可以有多個以上的資料庫同時運作,可圖中有有四個系統資料庫及兩個我們新增的資料庫同時運作服務中,每個資料庫都有一個獨立資料庫檔案,資料庫檔案可以存放在不同的磁碟位置中,例如SSE預設資料庫檔案是存放在「C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data」路徑之中,而我們在進行各種資料庫動作時,第一件事就是要指定資料庫,也就是說,當你透過資料庫管理軟體(SSMSE或ADO.NET)來與資料庫軟體溝通時,你要先跟它說,我以下的SQL語法是針對那一個資料庫來進行動作。

  我們整理一下:

  資料庫軟體:也就是資料庫本身的軟體,如SQL Server、MySQL、Oracle…。

  資料庫檔案:一個資料庫軟體內可以同時有「多個」資料庫同時運作,而每個資料庫都會對應到一個實體檔案,實體檔案存放這個資料庫內所有的資料,SSE對應的資料庫實體檔案檔名為「*.MDF」,例如Northwind.MDF,而實體檔案存放的位置,你可以使用系統預設,也可以自行決定。

  資料庫:存取資料庫檔案的一個名稱,簡單的說,就是我們要存取*.MDF時的名稱,通常就是*.MDF的主檔名,如Northwind.MDF,那資料庫名稱為:Northwind。

  我們在回到「物件總管」的圖片,你會發現在Northwind資料庫中還有其他的成員,每一個資料庫中最少會有兩個基本的資料成員,一個是「資料表(或資料表格, Table)」和「資料欄位(或資料行, Field)」。

  資料表:你就想像成跟我們一般的表格一樣,每個表格必須有個名稱,一個資料庫中可以有多個資料表,所以為了辨別出你要對資料庫中的那個資料表做存入或取出動作,在資料庫中必須給每個資料表一個獨一無二的名稱。(SSE支援中文資料表名稱。)

  資料欄位:一個資料表中,可以有多個資料欄位,每個資料欄位就是拿來存放資料的地方,你在建立資料欄位時必須定義這個資料欄位要存放什麼樣類型的資料。

  例如物件總管圖片中,Products就是資料表名稱,而其中資料欄位有:ProductID、ProductName、…。

  換成我們習慣看的表格,很像Excel的表格,就是這樣:

Products
ProductIDProductName
1SQL Server
2MySQL
3Oracle
[表1]


  第一筆資料是ProductID為1,ProductName為SQL Server,了解了以上資料庫相關架構後,我們就可以進入SELECT語法介紹。

SELECT語法基本格式


  SELECT 欄位名稱
  FROM 資料表名稱
  WHERE 條件

  就那怎簡單三行,這三行就是SELECT語法精華中的精華。

  SELECT 欄位名稱:
  SELECT就是決定你是要你要取出資料欄位有那些?一個資料表中有許多的欄位,但不一定要全部取出,你可以取出你需要的部份欄位即可。

  FROM 資料表名稱:
  望文生義,就是說你要從那個資料表中取出你需要的資料,資料表可以有1個以上來結合取出。

  WHERE 條件
  如果你要取出資料表中全部的資料,那就不必下WHERE,但如果只是要需取資料表中其中符合特定條件的資料,那就要使用WHERE來下過濾條件。

  以表1為例,我想要找出所產品編號(ProductID)為1的資料:

  SELECT *
  FROM Products
  WHERE ProductID = 1

註:「*」代表全部的欄位。
  如果我們使用白話來說就是:我要從資料表Products中取出全部的欄位,但我只要ProductID為1的那一筆資料就好。

  沒問題的話,接下來我們要使用實例來說明SELECT語法。
註:在SQL語法中我們對資料庫的基本動作有四個,SELECT是取出資料,INSERT是新增資料,UPDATE是更新資料,DELETE是刪除資料,而SELECT只是單純從資料庫中取出我們所需的資料,不會對資料庫中的資料做「異動」的動作,而所謂的「異動」簡單的說,就是會對資料庫中的資料產生改變,所以「新增、更新、刪除」這三種動作都是屬於異動型的語法。這在之後會介紹。

註:使用SQL相關語法時,規定是使用大寫英文字母,但為了我們在撰寫程式(如ASP.NET、PHP…)時的方便,使用大寫或小寫英文字母是無所謂。例:select、Select、update、Update…都可以。

註:基本上在撰寫程式時的SQL語法都單獨一行,例如:「 SELECT * FROM Products WHERE ProductID = 1」,有時sql語法太長(你後面就會看到),我們會使用類似在實例中的排版來增加程式的可讀性,這時你要注意程式的斷行連接字元(有程式語言要加連接字元,有些不用)。像是在ASP.NET要在程式最後使用「_」(底線)來連接下一行程式碼,類似下面的技巧:


  sqltxt = "SELECT * _
      FROM Products _
      WHERE ProductID = 1"


這樣就可以解決SQL語法太長而造成可讀性低的問題,這很重要,有些「大型」系統中一個SELECT語法可能就有幾百行,如果你不一行一行排好,幾百行擠成一堆,你看的懂,那我只能說:高手!

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。