SQL語句基礎學習要注意什么
現在我們介紹連接(join)的概念。
要了解連接,我們需要用到許多我們之前已介紹過的指令。我們先假設我們有以下的兩個表格 Store_Information 表格 store_namesalesdate Los Angeles$1500jan-05-1999 San Francisco$300jan-08-1999 Boston$700jan-08-1999 Geography 表格 region_namestore_name EastBoston EastNew York WestLos Angeles WestSan Diego 而我們要知道每一區 (region_name) 的營業額 (sales)。
Geography 這個表格告訴我們每一區有哪些店,而 Store_Information 告訴我們每一個店的營業額。若我們要知道每一區的營業額,我們需要將這兩個不同表格中的資料串聯起來。
當我們仔細了解這兩個表格后,我們會發現它們可經由一個相同的欄位,store_name,連接起來。 我們先將 SQL 句列出, 之后再討論每一個子句的意義: SELECT A1。
region_name REGION, SUM(A2。Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1。
store_name = A2。store_name GROUP BY A1。
region_name 結果: REGION SALES East $700 West $2050 在第一行中,我們告訴 SQL 去選出兩個欄位:第一個欄位是 Geography 表格中的 Region_name 欄位 (我們取了一個別名叫做 REGION);第二個欄位是 Store_Information 表格中的 sales 欄位 (別名為 SALES)。 請注意在這里我們有用到表格別名:Geography 表格的別名是 A1,Store_Information 表格的別名是 A2。
若我們沒有用表格別名的話, 第一行就會變成 SELECT Geography。region_name REGION, SUM(Store_Information。
Sales) SALES 很明顯地,這就復雜多了。在這里我們可以看到表格別名的功用:它能讓 SQL 句容易被了解,尤其是這個 SQL 句含蓋好幾個不同的表格時。
接下來我們看第三行,就是 WHERE 子句。 這是我們闡述連接條件的地方。
在這里,我們要確認 Geography 表格中 Store_name 欄位的值與 Store_Information 表格中 store_name 欄位的值是相等的。 這個 WHERE 子句是一個連接的靈魂人物,因為它的角色是確定兩個表格之間的連接是正確的。
如果 WHERE子句是錯誤的,我們就極可能得到一個笛卡兒連接 (Cartesian join)。笛卡兒連接會造成我們得到所有兩個表格每兩行之間所有可能的組合。
SQL語句基礎學習WHERE是怎樣的
我們并不一定每一次都要將表格內的資料都完全抓出。
在許多時候,我們會需要選擇性地抓資料。就我們的例子來說,我們可能只要抓出營業額超過 $1,000 的資料。
要做到這一點,我們就需要用到 WHERE 這個指令。 這個指令的語法如下: SELECT "欄位名" FROM "表格名" WHERE "條件" 若我們要由以下的表格抓出營業額超過 $1,000 的資料 Store_Information表格 store_namesalesdateLos Angeles$1500jan-05-1999San Diego$250jan-07-1999Los Angeles$300jan-08-1999Boston$700jan-08-1999我們就打入 SELECT store_name FROM Store_Information WHERE Sales > 1000 結果: store_name Los Angeles。
SQL語句基礎學習有什么特點
主鍵 (Primary Key) 中的每一筆資料都是表格中的唯一值。
換言之,它是用來獨一無二地確認一個表格中的每一行資料。主鍵可以是原本資料內的一個欄位,或是一個人造欄位 (與原本資料沒有關系的欄位)。
主鍵可以包含一或多個欄位。當主鍵包含多個欄位時,稱為組合鍵 (Composite Key)。
主鍵可以在建置新表格時設定 (運用 CREATE TABLE 語句),或是以改變現有的表格架構方式設定 (運用 ALTER TABLE)。 以下舉幾個在建置新表格時設定主鍵的方式: MySQL: CREATE TABLE Customer (SID integer, Last_Name varchar(30), First_Name varchar(30), PRIMARY KEY (SID)); Oracle: CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); SQL Server: CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); 以下則是以改變現有表格架構來設定主鍵的方式: MySQL: ALTER TABLE Customer ADD PRIMARY KEY (SID); Oracle: ALTER TABLE Customer ADD PRIMARY KEY (SID); SQL Server: ALTER TABLE Customer ADD PRIMARY KEY (SID); 請注意,在用ALTER TABLE語句來添加主鍵之前,我們需要確認被用來當做主鍵的欄位是設定為『NOT NULL』;也就是說,那個欄位一定不能沒有資料。
SQL語句基礎學習函數是怎樣的
既然數據庫中有許多資料都是已數字的型態存在,一個很重要的用途就是要能夠對這些數字做一些運算,例如將它們總合起來,或是找出它們的平均值。
SQL 有提供一些這一類的函數。它們是: AVG (平均) COUNT (計數) MAX (最大值) MIN (最小值) SUM (總合) 運用函數的語法是: SELECT "函數名"("欄位名") FROM "表格名" 舉例來說,若我們要由我們的示范表格中求出 Sales 欄位的總合 Store_Information 表格 store_namesalesdate Los Angeles$1500jan-05-1999 San Francisco$300jan-08-1999 Boston$700jan-08-1999 我們就打入 SELECT SUM(Sales) FROM Store_Information 結果: SUM(Sales) $2750 $2750 代表所有 Sales 欄位的總合: $1500 + $250 + $300 + $700。
除了函數的運用外,SQL 也可以做簡單的數學運算,例如加(+)和減(-)。對于文字類的資料,SQL 也有好幾個文字處理方面的函數,例如文字相連 (concatenation),文字修整 (trim),以及子字串 (substring)。
不同的數據庫對這些函數有不同的語法,所以最好是參考您所用數據庫的信息,來確定在那個數據庫中,這些函數是如何被運用的。
SQL語句基礎學習GroupBy是怎樣的
我們現在回到函數上。
記得我們用 SUM 這個指令來算出所有的 Sales (營業額)吧!如果我們的需求變成是要算出每一間店 (store_name) 的營業額 (sales),那怎么辦呢?在這個情況下,我們要做到兩件事:第一,我們對于 store_name 及 Sales 這兩個欄位都要選出。 第二,我們需要確認所有的 sales 都要依照各個 store_name 來分開算。
這個語法為: SELECT "欄位1", SUM("欄位2") FROM "表格名" GROUP BY "欄位1" 在我們的示范上 Store_Information 表格 store_namesalesdate Los Angeles$1500jan-05-1999 San Francisco$300jan-08-1999 Boston$700jan-08-1999 我們就打入 SELECT store_name, SUM(Sales) FROM Store_Information GROUP BY store_name 結果: store_name SUM(Sales) Los Angeles $1800 San Diego $250 Boston $700 當我們選不只一個欄位,且其中至少一個欄位有包含函數的運用時,我們就需要用到 GROUP BY 這個指令。 在這個情況下,我們需要確定我們有 GROUP BY 所有其他的欄位。
換句話說,除了有包括函數的欄位外,我們都需要將其放在 GROUP BY 的子句中。
我想學習數據庫,該怎么辦
方法:
要說數據庫,一般以SQL Server作為入門的學科,它適合中小型項目開發,而現在比較流行于大型開發的有:
Oracle
現在具有企業大型軟件的絕對占有率
DB2 在以IBM服務的公司以及單位(中國銀行)
MySql 相對不是很正式的開發,使用MySql
當然還有一些:Access(桌面數據庫),FoxPro(中國教育),Informix的數據庫系統.
剛開始入門的時候可以找點視頻教程來學習,視頻教程一般講得比較好,但不要企圖于通過它達到比較高的水平。然后要學會將自己所知道的去實踐,多實踐。當覺得實踐到一定程度而沒有什么沖勁了,就去學習理論,當覺得理論知識需要發揮的時候就去實踐,時間的周期不一定,沒有什么定論,但自己的時間安排需要定論就可以了。
一直都認為在計算機行業要學會一門技術太簡單了,但如果要把技術發揮到一定程度就有難處了,一定程度是什么意思,就是把技術如何發揮到具體的業務之中,會動腦筋去思考,而把技術作為相對次要的東西了。
數據庫的DBA人員需要兼有系統分析員和運籌學的業務素質。在技術上講,數據庫的前續學科是“數據結構”。
1.數據庫是非常快的數據處理程序,其內在的本質依舊是"文件".因為Windows操作系統管理機制就有:磁盤、文件、目錄。Linux的方式只有文件。所以數據庫重本質的角度來說是一種平臺軟件,是將文件翻譯成邏輯語言的軟件,成為軟件程序數據交換的中心,為什么那,一個很重要的原因就是“快”,還有就是“安全”、“集成”等等。因為以前的語言程序要處理數據要編寫大量算法十分麻煩而且很容易出錯等等。大家就想到集成了。
2.其實,要談到操作數據庫,簡單的就太簡單了,但是數據庫最難的不是操作,而是在數據庫的設計上。一個大型程序設計者肯定是一個數據庫的高手,因為大型程序要死板地去完成它是非常困難和不理智也是不安全不穩定的,要充分利用自己所有的能力去挖掘其數據之間的奧秘,然后體系化數據庫結構,相當于在數據庫中如何層次化地建立數據結構。將需求中的矛盾事物改變成可以相互融合的。
數據庫操作簡單是指一般操作,如果難的操作還是有點技術的,但還是難不到那里去。
3.為什么說上面的東西都很簡單那,因為只要會,那就可以了,而設計方面的東西是永遠不是那么簡單的,永遠帶有創新和追求,沒有最高的境界。
就一個十分常見的問題,如何在數據庫中配合好人員、角色、權限、類別、級別、可操作性這幾者的關系,如果是沒有經驗的人直接上手可能會亂來(最早也是這樣的)。有經驗的人也會設計一段時間,而且隨著軟件復雜性的增加,其數據庫的這幾者之間的復雜性就越來越復雜。所以大型軟件是非常難的。就一個很簡單的例子,在很多的網站中,有上百的欄目信息,而每一個欄目間又保持獨立。圖片的位置和圖片的信息都是動態更新的。某些網站的可操作性都以樹型結構提供,而樹型結構的子樹類別和和葉子都是不重復而不錯誤。而且其層數都是動態的。有些人可以通過前臺的判定語句來執行樹型結構的生成,但總之,數據庫是一門入門容易卻達到高手很難的學科,通過不斷在失敗中吸取經驗,才能得到一些書籍上無法學會的東西,那才是真正的高手。也就是說,學技術是很快的,要會將技術運用于實際的業務分析,才可以成為一個自我型的DBA,而不是一個簡單的程序員。