所使用的數據庫資料在:數據庫資料
1.1 基礎概念
1.數據庫(database)
保存有組織的數據的容器(通常是一個文件或一組文件)
注意:常用的mysql,等是數據庫管理系統DBMS;由這些軟件創建和操作的容器才是數據庫;
2.表(table)
表是一種結構化的文件,可用來存儲某種特定類型的數據;可以保存顧客清單,產品目錄等其他信息;就像是,把東西往抽屜里放,並不是隨便扔在抽屜里就行,而是在抽屜里放一些文件夾,將相關東西放在相關的文件夾里;這里抽屜,便是數據庫,是個容器,而文件夾便是 表,是用來存儲特定類型的數據;
名稱:
表的名稱在一個數據庫中應該是唯一的;
模式:
關於數據庫和表的布局及特性的信息。
比如:定義了數據在表中如何存儲,存儲什么樣的數據,數據如何分解,各部信息如何命名等;
3.列(column)和數據類型
表由列組成。列存儲表中某部分的信息。
將表想象成一個電子表格,網格中每一列存儲着某種特定的信息。例如,在顧客表中,一列存儲顧客編號,另一列存儲顧客姓名,而地址、城市、州以及郵政編碼全都存儲在各自的列中。
數據類型
所允許的數據的類型。每個表列都有相應的數據類型,它限制(或允許)該列中存儲的數據
4.行(row)
表中的一個記錄。
表中的數據是按行存儲的,所保存的每個記錄存儲在自己的行內。如果將表想象為網格,網格中垂直的列為表列,水平行為表行。
5.主鍵
一列(或一組列),其值能夠唯一標識表中每一行。
表中每一行都應該有一列(或幾列)可以唯一標識自己。顧客表可以使用顧客編號,而訂單表可以使用訂單ID。雇員表可以使用雇員ID或雇員社會安全號。
主鍵滿足的條件:
- 任意兩行都不具有相同的主鍵值
- 每一行都必須有一個主鍵值(主鍵列不允許NULL值)
- 主鍵列中的值不允許修改或更新
- 主鍵值不能重用(如果某行從表中刪除,它的主鍵值不能賦給以后的新行)
1.2 SQL-Structured Query Language
任務--提供一種從數據庫中讀寫數據的簡單有效的方法。
優點:
- SQL不是某個特定數據庫供應商專有的語言。幾乎所有重要的DBMS都支持SQL;
- SQL簡單易學。它的語句全都是由有很強描述性的英語單詞組成,而且這些單詞的數目不多。
- SQL雖然看上去很簡單,但實際上是一種強有力的語言,靈活使用其語言元素,可以進行非常復雜和高級的數據庫操作。
第2課 檢索數據
2.1 SELECT語句
用途是從一個或多個表中檢索信息。
檢索一列
輸入: SELECT prod_name FROM Products; 輸出: prod_name ------------------- Fish bean bag toy Bird bean bag toy Rabbit bean bag toy 8 inch teddy bear 12 inch teddy bear 18 inch teddy bear Raggedy Ann King doll Queen doll
分析:上述語句利用SELECT語句從Products表中檢索一個名為prod_name的列。所需的列名寫在SELECT關鍵字之后,FROM關鍵字指出從哪個表中檢索數據。
注意:檢索出來的數據是未排序的,因為沒有明確排序查詢結果;
多條SQL語句用分號隔開;
在處理SQL語句時,其中的所有空格都會被忽略;包括回車符;SQL語句僅以分號結束
檢索多列
輸入: SELECT prod_id, prod_name, prod_price FROM Products; 輸出: prod_id prod_name prod_price --------- -------------------- ---------- BNBG01 Fish bean bag toy 3.4900 BNBG02 Bird bean bag toy 3.4900 BNBG03 Rabbit bean bag toy 3.4900 BR01 8 inch teddy bear 5.9900 BR02 12 inch teddy bear 8.9900 BR03 18 inch teddy bear 11.9900 RGAN01 Raggedy Ann 4.9900 RYL01 King doll 9.4900 RYL02 Queen dool 9.4900
檢索所有列
SELECT * FROM Products;
警告:使用通配符
一般而言,除非你確實需要表中的每一列,否則最好別使用*通配符。雖然使用通配符能讓你自己省事,不用明確列出所需列,但檢索不需要的列通常會降低檢索和應用程序的性能。
提示:檢索未知列
一般而言,除非你確實需要表中的每一列,否則最好別使用*通配符。雖然使用通配符能讓你自己省事,不用明確列出所需列,但檢索不需要的列通常會降低檢索和應用程序的性能。
提示:檢索未知列
使用通配符有一個大優點。由於不明確指定列名(因為星號檢索每一列),所以能檢索出名字未知的列。
2.2 檢索不同的值
即只顯示不同的值,相同的只顯示一次;
關鍵字:DISTINCT
如:
輸入: SELECT vend_id FROM Products; 輸出: vend_id ---------- BRS01 BRS01 BRS01 DLL01 DLL01 DLL01 DLL01 FNG01 FNG01
而:
輸入: SELECT DISTINCT vend_id FROM Products; 輸出: +---------+ | vend_id | +---------+ | BRS01 | | DLL01 | | FNG01 | +---------+ 3 rows in set (0.00 sec)
分析:
SELECT DISTINCT vend_id告訴DBMS只返回不同(具有唯一性)的vend_id行,所以正如下面的輸出,只有3行。如果使用DISTINCT關鍵字,它必須直接放在列名的前面。
注意:不能部分使用DISTINCT
DISTINCT關鍵字作用於所有的列,不僅僅是跟在其后的那一列。例如,你指定SELECT DISTINCT vend_id, prod_price,除非指定的兩列完全相同,否則所有的行都會被檢索出來。
2.3 限制結果
SELECT語句返回指定表中所有匹配的行,很可能是每一行。如果你只想返回第一行或者一定數量的行,該怎么辦呢?這是可行的,但是在各種DBMS中不一樣
在MySQL、MariaDB、PostgreSQL或者SQLite,需要使用LIMIT 子句,像這樣:
輸入: SELECT prod_name FROM Products LIMIT 5; 輸出: prod_name ----------------- 8 inch teddy bear 12 inch teddy bear 18 inch teddy bear Fish bean bag toy Bird bean bag toy
分析▼
上述代碼使用SELECT語句來檢索單獨的一列數據。LIMIT 5指示MySQL等DBMS返回不超過5行的數據.
如果想得到后面5行的數據,像這樣:
輸入: SELECT prod_name FROM Products LIMIT 5 OFFSET 5; 輸出: prod_name ------------------- Rabbit bean bag toy Raggedy Ann King doll Queen doll
分析▼
LIMIT 5 OFFSET 5指示MySQL等DBMS返回從第5行起的5行數據。第一個數字是指從哪兒開始,第二個數字是檢索的行數。
所以,LIMIT指定返回的行數。帶OFFSET的LIMIT指定從哪兒開始。
注意:第0行
第一個被檢索的行是第0行,而不是第1行。因此,LIMIT 1 OFFSET 1會檢索第2行,而不是第1行。
提示:MySQL和MariaDB快捷鍵
MySQL和MariaDB支持簡化版的LIMIT 4 OFFSET 3語句,即LIMIT 3,4。使用這個語法,,之前的值對應LIMIT, ,之后的值對應OFFSET。
2.4 使用注釋
SELECT prod_name -- 這是一條注釋 FROM Products;
分析▼
注釋使用-- (兩個連字符)嵌在行內。-- 之后的文本就是注釋,例如,這用來描述CREATE TABLE語句中的列就很不錯。
多行注釋 /* SELECT prod_name, vend_id FROM Products; */ SELECT prod_name FROM Products;
注釋從/*開始,到*/結束,/*和*/之間的任何內容都是注釋。這種方式常用於給代碼加注釋,就如這個例子演示的,這里定義了兩個SELECT語句,但是第一個不會執行,因為它已經被注釋掉了。