SQL必知必會(一)
資料庫
資料庫是一個以某種有組織的方式存儲的數據集合。最簡單的辦法是將資料庫想像為一個文件櫃。這個文件櫃是一個存放數據的物理位置,不管數據是什麼,也不管數據是如何組織的。
資料庫( database ):保存有組織的數據的容器(通常是一個文件或一組文件)。存儲方式:
階段1、人工管理:紙質、磁帶等介質上,或者直接通過手工記錄(不方便查詢,難以共享,不便於保存)
階段2、文件系統:可以存儲在計算機磁碟上,以文件的形式出現。通過文件系統進行管理,通過文件路徑和文件名來進行訪問(無結構化處理,還是不便於查詢)階段3、資料庫系統:可以建立數據,然後建立表,最後將數據存儲在表中(不必關心數據存儲在磁碟的位置,可以直接通過資料庫管理系統來查詢表中的數據)
註:人們通常用資料庫這個術語來代表他們使用的資料庫軟體,這是不正確的,也因此產生了許多混淆。資料庫軟體應稱為資料庫管理系統(即 DBMS ),資料庫是通過 DBMS 創建和操縱的容器,而具體它究竟是什麼,形式如何,各種資料庫都不一樣。常用的mysql,等是資料庫管理系統DBMS;由這些軟體創建和操作的容器才是資料庫。
主鍵:表中每一行都應該有一列(或幾列)可以唯一標識自己。顧客表可以使用顧客編號,而訂單表可以使用訂單 ID 。僱員表可以使用僱員 ID 或僱員社會安全號。主鍵( primary key ):一列(或一組列),其值能夠唯一標識表中每一行。表(table):某種特定類型數據的結構化清單。
表是一種結構化的文件,可用來存儲某種特定類型的數據;可以保存顧客清單,產品目錄等其他信息;就像是,把東西往抽屜里放,並不是隨便扔在抽屜里就行,而是在抽屜里放一些文件夾,將相關東西放在相關的文件夾里;這裡抽屜,便是資料庫,是個容器,而文件夾便是用來存儲特定類型的數據;
SQL:SQL (發音為字母 S-Q-L 或 sequel )是結構化查詢語言( Structured Query Language )的縮寫。 SQL 是一種專門用來與資料庫溝通的語言。表中的任何列都可以作為主鍵,只要它滿足以下條件:
任意兩行都不具有相同的主鍵值;每一行都必須具有一個主鍵值(主鍵列不允許NULL值);主鍵列中的值不允許修改或更新;主鍵值不能重用(如果某行從表中刪除,它的主鍵不能賦給以後的新行)。
?在線學習SQL語句:Using MySQL SELECT Statement to Query Data數據定義語言
1、DDL(Data Definition Language)語句:用於定義資料庫、表、視圖、索引和觸發器等,使用語句包括create[創建]、alter[修改表定義]、drop[刪除]
2、DML(Data Manipulation Language)語句:用於插入,查詢,更新,刪除數據。使用語句包含insert、select、update、delet3、DCL(Data Control Language)語句:用於控制用戶的訪問許可權,使用語句包括grant[授權]、revoke[回收許可權]資料庫用來存儲數據的。SQL是用來訪問,查詢資料庫的一門語言
檢索數據:
檢索單個列:SELECT prod_name FROM Products;
在處理SQL語句時,其中的所有空格都會被忽略;包括回車符;SQL語句僅以分號結束檢索多列:SELECT prod_id, prod_name, prod_price FROM Products;檢索所有列:SELECT * FROM Products; 檢索不同的值:即只顯示不同的值,相同的只顯示一次;關鍵字:DISTINCTSELECT DISTINCT vend_id FROM Products;n
注意:不能部分使用DISTINCT,DISTINCT關鍵字作用於所有的列,不僅僅是跟在其後的那一列。例如,你指定SELECT DISTINCT vend_id, prod_price,除非指定的兩列完全相同,否則所有的行都會被檢索出來。
限制結果
如果你只想返回第一行或者一定數量的行,該怎麼辦呢?在 SQL Server 和 Access 中使用SELECT時,可以使用TOP關鍵字來限制最多返回多少行:SELECT TOP 5 prod_name FROM Products;(使用SELECT TOP 5語句,只檢索前 5 行數據。)
DB2 :FETCH FIRST 5 ROWS ONLY就會按字面的意思去做的。
SELECT prod_namenFROM ProductsnFETCH FIRST 5 ROWS ONLY;n
使用 MySQL 、 MariaDB 、 PostgreSQL 或者 SQLite ,需要使用LIMIT 子句:
SELECT prod_name FROM Products LIMIT 5;(LIMIT 5指示 MySQL 等 DBMS 返回不超過 5 行的數據。)為了得到後面的 5 行數據,需要指定從哪兒開始以及檢索的行數:
SELECT prod_name FROM Products LIMIT 5 OFFSET 5;(LIMIT 5 OFFSET 5指示 MySQL 等 DBMS 返回從第 5 行起的 5 行數據。第一個數字是指從哪兒開始,第二個數字是檢索的行數。)
用通配符進行過濾
LIKE操作符:通配符本身實際上是SQL的WHERE子句中有特殊含義的字元,SQL支持幾種通配符。為在搜索子句中使用通配符,必須使用LIKE操作符。LIKE指示DBMS,後跟的搜索模式利用通配符匹配而不是簡單的相等匹配進行比較。
百分號( % )通配符(最常使用的通配符是百分號(%)。在搜索串中,%表示任何字元出現任意次數。
SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE "Fish%";(為了找出所有以詞Fish起頭的產品)n
將檢索任意以Fish起頭的詞。%告訴 DBMS 接受Fish之後的任意字元,不管它有多少字元。如果使用的是 Microsoft Access ,需要使用*而不是%。根據 DBMS 的不同及其配置,搜索可以是區分大小寫的。
通配符可在搜索模式中的任意位置使用,並且可以使用多個通配符,搜索模式%bean bag%表示匹配任何位置上包含文本bean bag的值,不論它之前或之後出現什麼字元。
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE %bean bag%;n
SELECT prod_name FROM Products WHERE prod_name LIKE F%y;(找出以F起頭、以y結尾的所有產品)n
警告:請注意 NULL,通配符%看起來像是可以匹配任何東西,但有個例外,這就是NULL。子句WHERE prod_name LIKE %不會匹配產品名稱為NULL的行。
下劃線( _ )通配符
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE __ inch teddy bear;n
創建計算欄位
- 存儲在資料庫表中的數據一般不是應用程序所需要的格式,下面舉幾個例子。
需要顯示公司名,同時還需要顯示公司的地址,但這兩個信息存儲在不同的表列中。n城市、州和郵政編碼存儲在不同的列中(應該這樣),但郵件標籤列印程序需要把它們作為一個有恰當格式的欄位檢索出來。n列數據是大小寫混合的,但報表程序需要把所有數據按大寫表示出來。n物品訂單表存儲物品的價格和數量,不存儲每個物品的總價格(用價格乘以數量即可)。但為列印發票,需要物品的總價格。n需要根據表數據進行諸如總數、平均數的計算。n
欄位(field):基本上與列(column)的意思相同,經常互換使用,不過資料庫列一般稱為列,而術語欄位通常與計算欄位一起使用。
特別注意:只有資料庫知道SELECT語句中哪些列是實際的表列,哪些列是計算欄位。從客戶端(如應用程序)來看,計算欄位的數據與其他列的數據的返回方式相同。拼接欄位:拼接:( concatenate )將值聯結到一起(將一個值附加到另一個值)構成單個值。在 SQL 中的SELECT語句中,可使用一個特殊的操作符來拼接兩個列。根據你所使用的 DBMS ,此操作符可用加號(+)或兩個豎杠(||)表示。在 MySQL 和 MariaDB 中,必須使用特殊的函數。
分析:上面兩個SELECT語句拼接以下元素:
- 存儲在vend_name列中的名字;
- 包含一個空格和一個左圓括弧的字元串;
- 存儲在vend_country列中的國家;
- 包含一個右圓括弧的字元串。
推薦閱讀: