1.基本增刪改查操作
1 #一。 數據類型 常用的3中 2 # 1.字符串 例如:你的名字 我是中國人 在數據庫中要使用 ‘’引起來 '蘋果手機' 3 # 2.整數類型 例如: 你的年齡 23 ,辦公室的人數 5 個 ,直接使用 5000 4 # 3.時間 當着一個字符串用 5 6 #二。幾乎所有的編程標點符號都要使用 英文狀態下的 7 8 #三。數據庫中不區分大小寫,但是 生產上的 規范 關鍵字大寫 INSERT,其他的小寫 9 10 新增 11 需求:添加一條數據到產品表 產品名稱為蘋果手機 賣價為5000 12 INSERT INTO product (product_name,sale_price) VALUES ('蘋果手機',5000) 13 14 刪除 15 需求:刪除產品表中id=20的數據 16 DELETE FROM product WHERE id=20 17 # = > < >= <= 18 # product_name='聯想M115' 19 # 或OR 且AND 非! 兩個條件同時滿足 AND 20 需求:刪除產品表中id=20並且product_name='聯想M115'的數據 21 DELETE FROM product WHERE id=20 AND product_name='聯想M115' 22 23 需求:刪除產品表中id=20或者product_name='聯想M115'的數據 24 DELETE FROM product WHERE id=20 OR product_name='聯想M115' 25 26 需求:刪除產品表中product_name!='聯想M115'的數據 27 DELETE FROM product WHERE product_name !='聯想M115' 28 29 更新 30 31 #需求:把成本價大於100的所有商品的賣價修改為200,並且把名稱修改為特殊商品 32 UPDATE product SET sale_price=200,product_name='特殊商品' WHERE cost_price>100 33 34 查詢 35 #查詢所有商品 36 SELECT * FROM product 37 #需求:查詢id<8的數據 38 #過濾行 39 SELECT * FROM product WHERE id<8 40 #需求:查詢id<8的數據,只看id,產品名稱,賣價 41 SELECT id,product_name,sale_price FROM product WHERE id<8
2.創建表與規范命名
2.1.命名規則:
a.見名知意 千萬不要使用中文拼音
b.多個單詞使用下划線(數據庫中不區分大小寫,生產規范關鍵字大寫,其他小寫)
c.不要使用關鍵字 #關鍵字 INSERT INTO VALUES
2.2.數據庫設計必備基本字段
1.id 序號
2.state 狀態
3.type 類型
4.create_time 創建時間
5.update_time 更新時間
2.3.創建用戶表案例
3.表結構認識
4.簡單查詢之列操作
1 簡單查詢: 2 語法: 3 SELECT {*, column [alias],...} 4 FROM table_name; 5 說明: 6 SELECT 選擇查詢列表 7 FROM 提供數據源(表、視圖或其他的數據源) 8 如果為 * 和創建表時的順序一致。 9 可以自己調整順序,在select后邊加上要查詢的列名。 10 需求:查詢所有貨品信息 11 需求:查詢所有貨品的id,product_name,sale_price 12 -------------------------------------------------------------- 13 消除結果中重復的數據。 14 需求:查詢商品的分類編號。 15 語法: 16 SELECT DISTINCT 列名,.. 17 -------------------------------------------------------------- 18 實現數學運算查詢: 19 20 對NUMBER型數據可以使用算數操作符創建表達式(+ - * /) 21 22 對DATE型數據可以使用部分算數操作符創建表達式 (+ -) 23 24 運算符優先級: 25 26 1、乘法和除法的優先級高於加法和減法 27 28 2、同級運算的順序是從左到右 29 30 3、表達式中使用"括號"可強行改變優先級的運算順序 31 32 ----------------------------------------------------------------- 33 需求:查詢所有貨品的id,名稱和每零售1個產品所賺取的錢(每零售1個產品所賺取的錢=零售價-成本價格) 34 SELECT id ,product_name,sale_price-cost_price FROM product 35 36 需求:查詢所有貨品的id,名稱和批發價(批發價=賣價*折扣) 37 38 需求:查詢所有貨品的id,名稱,和各進50個的成本價(成本=cost_price) 39 42 ------------------------------------------------------------------ 43 44 設置列名的別名。 45 46 1、改變列的標題頭; 47 48 2、用於表示計算結果的含義; 49 50 3、作為列的別名; 51 52 4、如果別名中使用特殊字符,或者是強制大小寫敏感,或有空格時,都需加單引號;--->英文單詞 53 54 需求:查詢所有貨品的id,名稱和每零售1個產品所賺取的錢(每零售1個產品所賺取的錢=零售價-成本價格),並取別名 55 56 SELECT id ,product_name 名稱 ,sale_price-cost_price 每零售1個產品所賺取的錢 FROM product 57 58 需求:查詢所有貨品的id,名稱,各進50個,並且每個運費1元的成本(使用別名) 59 60 ------------------------------------------------------------------ 61 62 設置顯示格式: 63 64 為方便用戶瀏覽查詢的結果數據,有時需要設置顯示格式,可以使用CONCAT函數來連接字符串。 65 66 需求:查詢所有貨品名稱和每零售1個產品所賺取的錢(每零售1個產品所賺取的錢=零售價-成本價格), 67 格式為: 每零售一個XXX產品,賺取:XX元 68 SELECT CONCAT('每零售一個',product_name,'產品,賺取:',sale_price-cost_price,'元') FROM product 69 70 需求:查詢商品的名字和零售價。 71 格式:xxx商品的零售價為:xxx 72 73 SELECT CONCAT(productName,'商品的零售價為:',salePrice) AS productSalePrice FROM product; 74 //CONCAT('你好','嗎','?','我很好') 你好嗎?我很好
5.帶條件查詢
1 使用WHERE子句限定返回的記錄: 2 3 語法: 4 5 SELECT <selectList> 6 7 FROM table_name 8 9 WHERE 條件1 AND/OR 條件2; 10 11 注意: 12 13 WHERE子句在 FROM 子句后 14 15 ---------------------------------------------------- 16 17 比較運算符 含義 18 19 ------------------------------------------------- 20 21 = 等於 22 23 > 大於 24 25 >= 大於或等於 26 27 < 小於 28 29 <= 小於或等於 30 31 !=(<>) 不等於 32 33 --------------------------------------------------- 34 需求: 查詢貨品零售價大於119的所有貨品信息. 35 SELECT * FROM product WHERE sale_price>119 36 37 需求: 查詢貨品零售價為119的所有貨品信息. 38 39 需求: 查詢貨品名為聯想G9X的所有貨品信息. 40 41 需求: 查詢貨品名 不為 聯想G9X的所有貨品信息. 42 43 需求: 查詢分類編號不等於2的貨品信息 44 45 需求: 查詢貨品名稱,零售價小於等於200的貨品 46 47 需求: 查詢id,貨品名稱,批發價大於350的貨品 48 49 思考:where后面使用別名不行,總結select和where的執行順序 先執行where ,在執行select 50 51 52 53 SQL的執行順序: 54 55 1.先執行FROM子句: 確定查詢哪一張表 56 57 2.接着執行WHERE : 過濾篩選條件 58 59 3.接着做SELECT : 確定選擇的列 60 61 4.最后做ORDER BY: 對結果集按照某列排序 62 63 --------------------------------------------------- 64 65 注意:字符串和日期要用單引號擴起來. 66 67 要讓MySQL查詢區分大小寫,可以:使用 BINARY 68 69 SELECT * FROM table_name WHERE BINARY product_name='g9x' 70 71 SELECT * FROM table_name WHERE BINARY product_name='G9X' 72 73 ----------------------------------------------------------------- 74 75 邏輯運算符 含義 76 77 ---------------------------------------- 78 79 AND 如果組合的條件都是TRUE,返回TRUE 80 81 OR 如果組合的條件之一是TRUE,返回TRUE 82 83 NOT(!) 如果下面的條件是FALSE,返回TRUE` 84 85 ------------------------------------------------------------- 86 87 需求: 選擇id,貨品名稱,批發價在300-400之間的貨品 88 89 需求: 選擇id,貨品名稱,分類編號為2,4的所有貨品 90 91 需求: 選擇id,貨品名詞,分類編號不為2的所有商品 92 93 需求: 選擇id,貨品名稱,分類編號的貨品零售價大於等於250或者是成本大於等於200 94 95 ----------------------------------------------------------------------- 96 優先級 運算符 97 ------------------------------------ 98 1 所有比較運算符 99 2 NOT 100 3 AND 101 4 OR 102 103 注意:括號將跨越所有優先級規則
1 使用BETWEEN運算符顯示某一值域范圍的記錄,這個操作符最常見的使用在數字類型數據的范圍上,但對於字符類型數據和日期類型數據同樣可用。 2 格式: 3 SELECT <selectList> 4 FROM table_name 5 WHERE 列名 BETWEEN minvalue AND maxvalue:閉區間。 6 需求: 選擇id,貨品名稱,批發價在300-400之間的貨品 7 需求: 選擇id,貨品名稱,批發價不在300-400之間的貨品 8 -------------------------------------------------------- 9 使用IN運算符,判斷列的值是否在指定的集合中。 10 格式: 11 SELECT <selectList> 12 FROM table_name 13 WHERE 列名 IN (值1,值2....); 14 15 需求:選擇id,貨品名稱,分類編號為2,4的所有貨品 16 需求:選擇id,貨品名稱,分類編號不為2,4的所有貨品 17 -------------------------------------------------------- 18 IS NULL:判斷列的值是否為空。 19 格式:WHERE 列名 IS NULL; 20 需求:查詢商品名為NULL的所有商品信息。 21 -------------------------------------------------------- 22 使用LIKE運算符執行通配查詢,查詢條件可包含文字字符或數字: 23 %:通配符:可表示零或多個字符。 24 _:通配符:可表示一個字符。 25 通配符:用來實現匹配部分值得特殊字符。 26 ----------------------------------------------------- 27 需求: 查詢id,貨品名稱,貨品名稱匹配'%聯想M9_' 28 需求: 查詢id,貨品名稱,分類編號,零售價大於等於200並且貨品名稱匹配'%聯想M1__'
6.排序
使用ORDER BY子句將結果的記錄排序. ASC : 升序,缺省。 DESC: 降序。 ORDER BY 子句出現在SELECT語句的最后。 格式: SELECT <selectList> FROM table_name WHERE 條件 ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...; ------------------------------------------------------- 需求:選擇id,貨品名稱,分類編號,零售價並且按零售價降序排序 需求: 選擇id,貨品名稱,分類編號,零售價先按分類編號排序,再按零售價排序 需求:查詢M系列並按照批發價排序(加上別名) 需求:查詢分類為2並按照批發價排序(加上別名) 注意:別名不能使用引號括起來,否則不能排序。 -------------------------------------------------------------------------- SELECT語句執行順序: 先執行FROM--->接着執行WHERE--->再執行SELECT--->最后執行ORDER BY
7.分頁
1 分頁查詢: 2 分頁設計: 3 假分頁(邏輯分頁): 把數據全部查詢出來,存在於內存中,翻頁的時候,直接從內存中去截取. 4 真分頁(物理分頁): 每次翻頁都去數據庫中去查詢數據. 5 6 假分頁: 翻頁比較快,但是第一次查詢很慢,若數據過大,可能導致內存溢出. 7 真分頁: 翻頁比較慢,若數據過大,不會導致內存溢出. 8 ---------------------------------------------------------------------------------------- 9 規定:每頁顯示3條數據. pageSize = 3 10 第一頁: SELECT * FROM `product` LIMIT 0, 3 11 第二頁: SELECT * FROM `product` LIMIT 3, 3 12 第三頁: SELECT * FROM `product` LIMIT 6, 3 13 第 N頁: SELECT * FROM `product` LIMIT (N-1)*3, 3 14 ---------------------------------------------------------------------------------------- 15 分頁查詢的SQL: 16 SELECT * FROM table_name LIMIT ?,?; 17 SELECT * FROM table_name LIMIT beginIndex,pageSize; 18 beginIndex = (currentPage-1) * pageSize; 19 第一個?: 表示本頁,開始索引(從0開始). 20 第二個?: 每頁顯示的條數
8.函數
1 什么是聚集函數:統計函數. 2 聚集函數作用於一組數據,並對一組數據返回一個值。 3 ------------------------------------------------------- 4 聚集函數: 5 COUNT:統計結果記錄數 6 MAX: 統計計算最大值 7 MIN: 統計計算最小值 8 SUM: 統計計算求和 9 AVG: 統計計算平均值 10 ------------------------------------------------------- 11 需求:查詢所有商品平均零售價
SELECT AVG(sale_price) FROM product 12 需求:查詢商品總記錄數 13 需求:查詢分類為2的商品總數 14 需求:查詢商品的最小零售價,最高零售價,以及所有商品零售價總和
9.分組
1 分組查詢: 2 可以使用GROUP BY 子句將表中的數據分成若干組,再對分組之后的數據做統計計算,一般使用聚集函數才使用GROUP BY. 3 語法格式: 4 SELECT <selectList>,聚集函數 5 FROM table_name 6 WHERE 條件 7 GROUP BY 列名 8 注意:GROUP BY 后面的列名的值要有重復性分組才有意義。 9 10 ---------------------------------------------------------------------- 11 需求:查詢每個商品分類編號和每個商品分類各自的平均零售價
SELECT classify_id,AVG(sale_price) FROM product GROUP BY classify_id 12 需求:查詢每個商品分類編號和每個商品分類各自的商品總數。 13 需求:查詢每個商品分類編號和每個商品分類中零售價大於100的商品總數: 14 需求:查詢零售價總和大於1500的商品分類編號以及總零售價和:
10.笛卡爾積
1 單表查詢:從一張表中查詢數據 2 多表查詢:從多張表中聯合查詢出數據 3 ------------------------------------ 4 單表查詢: 5 SELECT <selectList> 6 FROM table_name 7 ----------------------------------- 8 多表查詢(最簡單的): 9 SELECT <selectList> 10 FROM 表名A,表名B 11 ---------------------------------------------------------------------- 12 笛卡爾積: 13 需求:查詢所有的貨品信息+對應的貨品分類信息 14 沒有連接條件的表關系返回的結果。 15 多表查詢會產生笛卡爾積: 16 17 假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。 18 19 實際運行環境下,應避免使用全笛卡爾集。 20 21 解決方案: 在WHERE加入有效的連接條件---->等值連接 22 注意: 23 連接 n張表,至少需要 n-1個連接條件。
11.內連接查詢
1 內連接查詢: 2 內連接查詢:是相對於外連接。 3 內連接分為:隱式內連接、顯示內連接(推薦),其查詢效果相同,僅僅只是語法不同而已。 4 ----------------------------------------------- 5 隱式內連接: 6 SELECT <selectList> 7 FROM A ,B WHERE A.列 = B.列 8 ----------------------------------------------- 9 顯示內連接(推薦寫法):. 10 SELECT <selectList> 11 FROM A [INNER] JOIN B ON A.列 = B.列 12 ----------------------------------------------- 13 需求:查詢所有商品的名稱和分類名稱: 14 隱式內連接: SELECT p.product_name,pc.classify_name FROM product p,product_classify pc WHERE p.classify_id = pc.id 15 顯示內連接: SELECT p.product_name,pc.classify_name FROM product p INNER JOIN product_classify pc ON p.classify_id = pc.id 16 顯示內連接: SELECT p.product_name,pc.classify_name FROM product p JOIN product_classify pc ON p.classify_id = pc.id 17 ----------------------------------------------- 18 在做等值連接的時候,若A表中和B表中的列名相同. 則可以簡寫: 19 SELECT <selectList> 20 FROM A [INNER] JOIN B USING(同名的列) 21 前提:在emp員工和dept部門表中都有deptno部門編號列. 並且是外鍵關系。 22 則: SELECT * FROM emp JOIN dept USING (deptno) 23 --------------------------------------------------------------------- 24 使用表名前綴在多個表中區分相同的列。 25 在不同表中具有相同列名的列可以用表的別名加以區分。 26 使用別名可以簡化查詢。 27 使用表名前綴可以提高執行效率。 28 如果使用了表的別名,則不能再使用表的真名 29 --------------------------------------------------------------------- 30 需求: 查詢貨品id,貨品名稱,貨品所屬分類名稱 31 需求: 查詢零售價大於200的無線鼠標 32 需求: 查詢零售價大於200的無線鼠標(使用表的別名) 33 需求: 查詢每個貨品對應的分類以及對應的庫存 34 需求: 如果庫存貨品都銷售完成,按照利潤從高到低查詢貨品名稱,零售價,貨品分類(三張表).
12.外連接查詢
1 外連接查詢: 2 左外連接:查詢出JOIN左邊表的全部數據查詢出來,JOIN右邊的表不匹配的數據使用NULL來填充數據. 3 右外連接:查詢出JOIN右邊表的全部數據查詢出來,JOIN左邊的表不匹配的數據使用NULL來填充數據. 4 ---------------------------- 5 語法格式: 6 SELECT <selectList> 7 FROM A LEFT/RIGHT [OUTER] JOIN B 8 ON (A.column_name = B.column_name)]; 9 查詢所有的商品信息和對應的分類信息. 10 左連接: 11 SELECT * FROM product p LEFT JOIN product_classify pc ON p.classify_id = pc.id 12 右連接: 13 SELECT * FROM product p RIGHT JOIN product_classify pc ON p.classify_id = pc.id 14 ---------------------------------------------- 15 在做等值連接的時候,若A表中和B表中的列名相同. 則可以簡寫: 16 SELECT <selectList> 17 FROM A LEFT JOIN B USING(同名的列) 18 前提:在emp員工和dept部門表中都有deptno部門編號列. 並且是外鍵關系 19 如: SELECT * FROM emp LEFT JOIN dept USING (deptno) 20 21 思考:查詢每種商品分類的名稱和包含的的商品總數: 22 23 SELECT pc.classify_name,COUNT(p.id) 24 25 FROM product p RIGHT JOIN product_classify pc ON p.classify_id = pc.id 26 27 GROUP BY pc.classify_name
13.自連接查詢
1 自連接查詢: 2 把一張表看成兩張來做查詢. 3 需求: 查詢每個商品分類的名稱和父分類名稱: 4 5 隱式內連接: 6 SELECT sub.classify_name,super.classify_name 7 FROM product_classify super,product_classify sub 8 WHERE sub.parent_id = super.id 9 10 顯示內連接: 11 SELECT sub.classify_name,super.classify_name 12 FROM product_classify super JOIN product_classify sub 13 14 ON sub.parent_id = super.id
14.子查詢
1 什么是子查詢(嵌套查詢):一個查詢語句中嵌套在另一個查詢語句中,內層查詢的結果可以作為外層查詢條件或者臨時表。 2 一般的,嵌套在WHERE或者FROM字句中。 3 為什么使用子查詢: 4 多表連接查詢過程: 5 1):兩張表做笛卡爾積。 6 2):篩選匹配條件的數據記錄。 7 若,笛卡爾積記錄數比較大,可能造成服務器崩潰。 8 ----------------------------------------------------------------------- 9 單行單列子查詢: 10 需求: 查詢零售價比聯想MX1100更高的所有商品信息。 11 SELECT * FROM product 12 WHERE salePrice > ( 13 SELECT salePrice FROM product WHERE productName = '聯想MX1100' 14 ) 15 單行多列子查詢: 16 需求: 查詢分類編號和折扣與聯想M100相同的所有商品信息。 17 SELECT * FROM product 18 WHERE (dir_id,cutoff)=( 19 SELECT dir_id,cutoff FROM product WHERE productName = '聯想M100' 20 ) 21 多行多列子查詢: 22 需求: 查詢各商品分類的分類編號,分類名稱,商品數量,平均零售價。 23 24 內連接: 25 SELECT pc.id, pc.classify_name,COUNT(p.id),AVG(p.sale_price) 26 27 FROM product p JOIN product_classify pc ON p.classify_id = pc.id 28 29 GROUP BY pc.id 30 31 產生的笛卡爾積記錄:80條 32 SELECT COUNT(*) FROM product,product_classify 33 34 子查詢: 35 SELECT pc.id,pc.classify_name,countNum,avgSalePrice 36 37 FROM product_classify pc JOIN ( 38 39 SELECT classify_id ,COUNT(id) countNum,AVG(sale_price) avgSalePrice 40 41 FROM product 42 43 GROUP BY classify_id) p 44 45 ON pc.id = p.classify_id
15.保存之前先檢查該數據是否存在
舉例:角色不能一樣
INSERT INTO tab_pc_role (role_name,remark) SELECT 'testMast2','測試權限' FROM DUAL WHERE NOT EXISTS (SELECT id FROM tab_pc_role WHERE role_name='testMast2')
16.考查與評估
a.練習題

1 1.基本增刪改查操作 2 需求:添加一條數據到產品表 產品名稱為蘋果手機 賣價為5000 3 需求:刪除產品表中id=20的數據 4 需求:刪除產品表中id=20並且product_name='聯想M115'的數據 5 需求:刪除產品表中id=20或者product_name='聯想M115'的數據 6 需求:刪除產品表中product_name!='聯想M115'的數據 7 需求:把成本價大於100的所有商品的賣價修改為200,並且把名稱修改為特殊商品 8 需求:查詢所有商品 9 需求:查詢id<8的數據 10 需求:查詢id<8的數據,只看id,產品名稱,賣價 11 12 2.簡單查詢之列操作 13 需求:查詢所有貨品信息 14 需求:查詢所有貨品的id,product_name,sale_price 15 需求:查詢商品的分類編號。 16 需求:查詢所有貨品的id,名稱和每零售1個產品所賺取的錢(每零售1個產品所賺取的錢=零售價-成本價格) 17 需求:查詢所有貨品的id,名稱和批發價(批發價=賣價*折扣) 18 需求:查詢所有貨品的id,名稱,和各進50個的成本價(成本=cost_price) 19 需求:查詢所有貨品的id,名稱和每零售1個產品所賺取的錢(每零售1個產品所賺取的錢=零售價-成本價格),並取別名 20 需求:查詢所有貨品的id,名稱,各進50個,並且每個運費1元的成本(使用別名) 21 需求:查詢所有貨品名稱和每零售1個產品所賺取的錢(每零售1個產品所賺取的錢=零售價-成本價格), 22 需求:查詢商品的名字和零售價。格式:xxx商品的零售價為:xxx 23 24 3.帶條件查詢 25 需求: 查詢貨品零售價大於119的所有貨品信息. 26 需求: 查詢貨品零售價為119的所有貨品信息. 27 需求: 查詢貨品名為聯想G9X的所有貨品信息. 28 需求: 查詢貨品名 不為 聯想G9X的所有貨品信息. 29 需求: 查詢分類編號不等於2的貨品信息 30 需求: 查詢貨品名稱,零售價小於等於200的貨品 31 需求: 查詢id,貨品名稱,批發價大於350的貨品 32 需求: 選擇id,貨品名稱,批發價在300-400之間的貨品 33 需求: 選擇id,貨品名稱,分類編號為2,4的所有貨品 34 需求: 選擇id,貨品名詞,分類編號不為2的所有商品 35 需求: 選擇id,貨品名稱,分類編號的貨品零售價大於等於250或者是成本大於等於200 36 需求: 選擇id,貨品名稱,批發價在300-400之間的貨品 37 需求: 選擇id,貨品名稱,批發價不在300-400之間的貨品 38 需求: 選擇id,貨品名稱,分類編號為2,4的所有貨品 39 需求: 選擇id,貨品名稱,分類編號不為2,4的所有貨品 40 需求: 查詢商品名為NULL的所有商品信息。 41 需求: 查詢id,貨品名稱,貨品名稱匹配'%聯想M9_' 42 需求: 查詢id,貨品名稱,分類編號,零售價大於等於200並且貨品名稱匹配'%聯想M1__' 43 需求:選擇id,貨品名稱,分類編號,零售價並且按零售價降序排序 44 需求: 選擇id,貨品名稱,分類編號,零售價先按分類編號排序,再按零售價排序 45 需求:查詢M系列並按照批發價排序(加上別名) 46 需求:查詢分類為2並按照批發價排序(加上別名) 47 48 4.函數 49 需求:查詢所有商品平均零售價 50 需求:查詢商品總記錄數 51 需求:查詢分類為2的商品總數 52 需求:查詢商品的最小零售價,最高零售價,以及所有商品零售價總和 53 54 5.分組 55 需求:查詢每個商品分類編號和每個商品分類各自的平均零售價 56 需求:查詢每個商品分類編號和每個商品分類各自的商品總數。 57 需求:查詢每個商品分類編號和每個商品分類中零售價大於100的商品總數: 58 需求:查詢零售價總和大於1500的商品分類編號以及總零售價和 59 60 6.綜合查詢 61 需求:查詢所有的貨品信息+對應的貨品分類信息 62 需求:查詢所有商品的名稱和分類名稱 63 需求: 查詢貨品id,貨品名稱,貨品所屬分類名稱 64 需求: 查詢零售價大於200的無線鼠標 65 需求: 查詢零售價大於200的無線鼠標(使用表的別名) 66 需求: 查詢每個貨品對應的分類以及對應的庫存 67 需求: 如果庫存貨品都銷售完成,按照利潤從高到低查詢貨品名稱,零售價,貨品分類(三張表). 68 需求: 查詢每個商品分類的名稱和父分類名稱 69 需求: 查詢零售價比聯想MX1100更高的所有商品信息。 70 需求: 查詢分類編號和折扣與聯想M100相同的所有商品信息。 71 需求: 查詢各商品分類的分類編號,分類名稱,商品數量,平均零售價。
b.需求:以常見OA系統中的員工部門為案例完成:
1.設計員工表
2.設計部門表
3.sql語句練習
3.1查詢所有員工按照年齡排序
3.2查詢各部門的平均工資
3.3查詢各部門人數並按照部門人數排序
3.4查詢研發部門的所有員工
3.5查詢工資高於10000的員工信息
3.6查詢工資低於平均工資的員工信息
17.練習題sql語句答案

1 CREATE TABLE `product` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT, 3 `product_name` varchar(50) DEFAULT NULL, 4 `classify_id` int(11) DEFAULT NULL, 5 `sale_price` double(10,2) DEFAULT NULL, 6 `supplier` varchar(50) DEFAULT NULL, 7 `brand` varchar(50) DEFAULT NULL, 8 `cutoff` double(2,2) DEFAULT NULL, 9 `cost_price` double(10,2) DEFAULT NULL, 10 PRIMARY KEY (`id`) 11 ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8; 12 13 1.基本增刪改查操作 14 需求:添加一條數據到產品表 產品名稱為蘋果手機 賣價為5000 15 INSERT INTO product (product_name,sale_price) VALUES ('蘋果手機',5000); 16 17 需求:刪除產品表中id=20的數據 18 DELETE FROM product WHERE id=20; 19 需求:刪除產品表中id=20並且product_name='聯想M115'的數據 20 DELETE FROM product WHERE id=20 AND product_name='聯想M115'; 21 22 需求:刪除產品表中id=20或者product_name='聯想M115'的數據 23 DELETE FROM product WHERE id=20 OR product_name='聯想M115'; 24 25 26 需求:刪除產品表中product_name!='聯想M115'的數據 27 DELETE FROM product WHERE product_name='聯想M115'; 28 29 30 需求:把成本價大於100的所有商品的賣價修改為200,並且把名稱修改為特殊商品 31 UPDATE product SET sale_price=200,product_name='特殊商品' WHERE cost_price>100 32 33 34 需求:查詢所有商品 35 SELECT * FROM product 36 37 需求:查詢id<8的數據 38 SELECT * FROM product WHERE id<8 39 40 需求:查詢id<8的數據,只看id,產品名稱,賣價 41 42 SELECT id,product_name,sale_price FROM product WHERE id<8 43 44 2.簡單查詢之列操作 45 需求:查詢所有貨品信息 46 47 SELECT * FROM product 48 49 需求:查詢所有貨品的id,product_name,sale_price 50 SELECT id,product_name,sale_price FROM product 51 52 53 需求:查詢商品的分類編號。 54 SELECT classify_id FROM product 55 56 需求:查詢所有貨品的id,名稱和每零售1個產品所賺取的錢(每零售1個產品所賺取的錢=零售價-成本價格) 57 58 SELECT id,product_name,sale_price,cost_price,(sale_price-cost_price)*1 FROM product 59 60 需求:查詢所有貨品的id,名稱和批發價(批發價=賣價*折扣) 61 SELECT id,product_name,sale_price,cutoff,(sale_price*cutoff) FROM product 62 63 需求:查詢所有貨品的id,名稱,和各進50個的成本價(成本=cost_price) 64 SELECT id,product_name,cost_price,cost_price*50 FROM product 65 66 需求:查詢所有貨品的id,名稱和每零售1個產品所賺取的錢(每零售1個產品所賺取的錢=零售價-成本價格),並取別名 67 SELECT id,product_name,sale_price,cost_price,(sale_price-cost_price)*1 每零售1個產品所賺取的錢 FROM product 68 69 70 需求:查詢所有貨品的id,名稱,各進50個,並且每個運費1元的成本(使用別名) 71 SELECT id,product_name,cost_price,(cost_price+1)*50 成本 FROM product 72 73 74 需求:查詢所有貨品名稱和每零售1個產品所賺取的錢(每零售1個產品所賺取的錢=零售價-成本價格) 75 SELECT product_name,sale_price,cost_price,(sale_price-cost_price) 利潤 FROM product 76 77 需求:查詢商品的名字和零售價。格式:xxx商品的零售價為:xxx 78 79 SELECT product_name,'商品的零售價為:',sale_price FROM product 80 SELECT CONCAT(product_name,'商品的零售價為:',sale_price) FROM product 81 82 3.帶條件查詢 83 需求: 查詢貨品零售價大於119的所有貨品信息. 84 SELECT * FROM product WHERE sale_price>119 85 86 需求: 查詢貨品零售價為119的所有貨品信息. 87 SELECT * FROM product WHERE sale_price=119 88 89 90 需求: 查詢貨品名為聯想G9X的所有貨品信息. 91 SELECT * FROM product WHERE product_name='聯想G9X' 92 93 94 需求: 查詢貨品名 不為 聯想G9X的所有貨品信息. 95 SELECT * FROM product WHERE product_name !='聯想G9X' 96 97 98 需求: 查詢分類編號不等於2的貨品信息 99 100 SELECT * FROM product WHERE classify_id!=2 101 102 需求: 查詢貨品名稱,零售價小於等於200的貨品 103 104 SELECT product_name,sale_price FROM product WHERE sale_price=200 105 106 需求: 查詢id,貨品名稱,批發價大於350的貨品 107 108 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff>350 109 110 需求: 選擇id,貨品名稱,批發價在300-400之間的貨品 111 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff>300 AND sale_price*cutoff<400 112 113 114 需求: 選擇id,貨品名稱,分類編號為2,4的所有貨品 115 SELECT id, product_name,classify_id FROM product WHERE classify_id=2 OR classify_id=4 116 117 SELECT id, product_name,classify_id FROM product WHERE classify_id IN (2,4) # (推薦使用這種) 118 119 120 121 需求: 選擇id,貨品名詞,分類編號不為2的所有商品 122 SELECT id, product_name,classify_id FROM product WHERE classify_id !=2 # (推薦使用這種) 123 124 SELECT id, product_name,classify_id FROM product WHERE classify_id NOT IN (2) 125 126 127 128 需求: 選擇id,貨品名稱,分類編號的貨品零售價大於等於250或者是成本大於等於200 129 130 SELECT id, product_name,classify_id FROM product WHERE sale_price>=250 OR cost_price>=200 131 需求: 選擇id,貨品名稱,批發價在300-400之間的貨品 132 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff>300 AND sale_price*cutoff<400 #推薦這種 133 134 135 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff BETWEEN 300 AND 400 136 137 138 139 需求: 選擇id,貨品名稱,批發價不在300-400之間的貨品 140 141 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff<=300 OR sale_price*cutoff>=400 #推薦這種 142 143 SELECT id, product_name,sale_price*cutoff FROM product WHERE sale_price*cutoff NOT BETWEEN 300 AND 400 144 145 146 需求: 選擇id,貨品名稱,分類編號為2,4的所有貨品 147 SELECT id, product_name,classify_id FROM product WHERE classify_id=2 OR classify_id=4 148 149 SELECT id, product_name,classify_id FROM product WHERE classify_id IN (2,4) # (推薦使用這種) 150 151 需求: 選擇id,貨品名稱,分類編號不為2,4的所有貨品 152 SELECT id, product_name,classify_id FROM product WHERE classify_id!=2 AND classify_id!=4 153 154 SELECT id, product_name,classify_id FROM product WHERE classify_id NOT IN (2,4) # (推薦使用這種) 155 156 需求: 查詢商品名為NULL的所有商品信息。 157 SELECT * FROM product WHERE product_name IS NULL 158 159 SELECT * FROM product WHERE product_name = NULL (這是錯誤的寫法 必須重視,初學者很容易犯錯) 160 161 需求: 查詢id,貨品名稱,貨品名稱匹配'%聯想M9_' 162 SELECT id, product_name FROM product WHERE product_name LIKE '%聯想M9_' 163 164 165 需求: 查詢id,貨品名稱,分類編號,零售價大於等於200並且貨品名稱匹配'%聯想M1__' 166 SELECT id, product_name,classify_id,sale_price FROM product WHERE product_name LIKE '%聯想M1__' AND sale_price>=200 167 168 169 需求:選擇id,貨品名稱,分類編號,零售價並且按零售價降序排序 170 SELECT id, product_name,classify_id,sale_price FROM product ORDER BY sale_price DESC (默認的ASC是升序) 171 SELECT id, product_name,classify_id,sale_price FROM product ORDER BY sale_price ASC 172 173 需求: 選擇id,貨品名稱,分類編號,零售價先按分類編號排序,再按零售價排序 174 SELECT id, product_name,classify_id,sale_price FROM product ORDER BY classify_id ASC ,sale_price ASC 175 176 177 需求:查詢M系列並按照批發價排序(加上別名) 178 179 #ORDER BY sc 可以使用別名,因為執行select在執行order。。by.. 180 SELECT id, product_name,classify_id,sale_price,cutoff,(sale_price*cutoff) sc FROM product WHERE product_name LIKE '%M%' ORDER BY sc 181 182 需求:查詢分類為2並按照批發價排序(加上別名) 183 184 SELECT id, product_name,classify_id,sale_price,cutoff,(sale_price*cutoff) sc FROM product WHERE classify_id=2 ORDER BY sc 185 186 187 4.函數 188 需求:查詢所有商品平均零售價 189 190 SELECT AVG(sale_price) FROM product 191 192 需求:查詢商品總記錄數 193 SELECT COUNT(1) FROM product 194 195 需求:查詢分類為2的商品總數 196 SELECT COUNT(1) FROM product WHERE classify_id=2 197 198 需求:查詢商品的最小零售價,最高零售價,以及所有商品零售價總和 199 200 SELECT MIN(sale_price),MAX(sale_price),SUM(sale_price) FROM product 201 202 5.分組 203 需求:查詢每個商品分類編號和每個商品分類各自的平均零售價 204 205 SELECT classify_id,AVG(sale_price) FROM product GROUP BY classify_id 206 207 需求:查詢每個商品分類編號和每個商品分類各自的商品總數。 208 SELECT classify_id,COUNT(1) FROM product GROUP BY classify_id 209 210 需求:查詢每個商品分類編號和每個商品分類中零售價大於100的商品總數: 211 SELECT classify_id,COUNT(1) FROM product WHERE sale_price>100 GROUP BY classify_id 212 213 需求:查詢零售價總和大於1500的商品分類編號以及總零售價和 214 215 SELECT classify_id,SUM(sale_price) s FROM product GROUP BY classify_id HAVING s>1500 216 217 6.綜合查詢 218 需求:查詢所有的貨品信息+對應的貨品分類信息 219 220 SELECT * FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 221 222 需求:查詢所有商品的名稱和分類名稱 223 224 SELECT p.product_name,pc.classify_name FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 225 226 227 需求: 查詢貨品id,貨品名稱,貨品所屬分類名稱 228 SELECT p.id,p.product_name,pc.classify_name FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 229 230 231 需求: 查詢零售價大於200的無線鼠標 232 SELECT p.id,p.product_name,pc.classify_name,p.sale_price 233 FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 234 WHERE p.sale_price>200 AND pc.classify_name='無線鼠標' 235 236 需求: 查詢零售價大於200的無線鼠標(使用表的別名) 237 SELECT p.id,p.product_name,pc.classify_name,p.sale_price 238 FROM product p LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 239 WHERE p.sale_price>200 AND pc.classify_name='無線鼠標' 240 241 需求: 查詢每個貨品對應的分類以及對應的庫存 242 SELECT * 243 FROM product p 244 LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 245 LEFT JOIN product_stock ps ON (ps.product_id=p.id) 246 247 需求: 如果庫存貨品都銷售完成,按照利潤從高到低查詢貨品名稱,零售價,貨品分類(三張表). 248 SELECT p.product_name,p.sale_price,pc.classify_name,(p.sale_price-p.cost_price)*ps.store_num c 249 FROM product p 250 LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 251 LEFT JOIN product_stock ps ON (ps.product_id=p.id) 252 ORDER BY c DESC 253 254 需求: 查詢每個商品分類的名稱和父分類名稱 255 256 SELECT * 257 FROM product_classify a 258 LEFT JOIN product_classify b ON (a.parent_id=b.id) 259 260 261 需求: 查詢零售價比聯想MX1100更高的所有商品信息。 262 263 SELECT sale_price FROM product WHERE product_name='聯想MX1100' #sale_price=119 264 265 SELECT * FROM product WHERE sale_price>119 266 267 使用的是子查詢 268 269 SELECT * FROM product WHERE sale_price>(SELECT sale_price FROM product WHERE product_name='聯想MX1100' ) 270 271 272 273 需求: 查詢分類編號和折扣與聯想M100相同的所有商品信息。 274 275 SELECT classify_id,cutoff FROM product WHERE product_name='聯想M100' 276 277 SELECT * FROM product WHERE (classify_id,cutoff) = (3,0.9) 278 279 #單行多列 子查詢 280 281 最后: 282 SELECT * FROM product WHERE (classify_id,cutoff) = (SELECT classify_id,cutoff FROM product WHERE product_name='聯想M100') 283 284 285 需求: 查詢各商品分類的分類編號,分類名稱,商品數量,平均零售價。 286 287 SELECT p.classify_id,pc.classify_name,COUNT(1),AVG(p.sale_price) 288 FROM product p 289 LEFT JOIN product_classify pc ON (p.classify_id=pc.id) 290 GROUP BY p.classify_id
到此數據庫第一階段課程類容就完了,每一位學習者必須認真的把博客上的需求寫完整,然后我們做一個習題講解!