sql 减法_SQL学习笔记整理(持更)
從零開始學習SQL,在這里分享自己的筆記,主要通過自己看的、做的例題映射知識點。入門級SQL 應知應會Key Point與例題。雖然這個筆記不是最全面深入的,但一定必含小白入門必懂基礎要點(非常基礎),還有常常不小心就會踩的坑都在這里了,主要針對知識點在實際應用中的理解。數據練習可以自己找其他做比如SQLZOO。
可樂:SQL ZOO習題筆記
由于這里有些語句打出來無法突出,采取截圖,層次展現更直觀清晰。 剛開始看的內容有限,待學習完后,希望能分享出系統的筆記,會在這里持續更新。
PART 1 查詢基礎
2.字符串日期 使用 ' ' ;數字無需單引號,直接書寫
3.數據庫創建 CREATE DATABASE Shop;
4.SELECT
常數查詢(可理解為賦值)
選擇記錄:WHERE
可以不選取出作為查詢條件的列
2.算術運算符 :+ — * /
-- 所有包含 NULL 的計算,結果肯定是 NULL 。
3.比較運算符: <>
- 思考:如下對字符串使用大于等于或者小于等于不等號時會得到什么樣的結果?(字典順序)
- 不能對 含 NULL 列 使用比較運算符(用IS NOT NULL)
4.邏輯運算符
SELECT product_name, product_type, regist_date FROM Product WHERE product_type = ' 辦公用品 ' AND ( regist_date = '2009-09-11'OR regist_date = '2009-09-20');SQL中的邏輯運算是包含對真、假和不確定(UNKNOW)進行運算的三值邏輯。
含有 NULL 時的真值:
part2 聚合&排序
聚合?指將多行匯聚成一行
- 聚合函數會將 NULL 排除在外。但 COUNT (*)例外,并不會排除 NULL 。
- COUNT(*) 會得到含 NULL 的數據行數,而 COUNT (列名) 會得到 NULL 外的數據行數。
- 聚合函數只能跟在SELECT子句后
聚合函數:
COUNT : 計算表中的記錄數(行數)
SELECT COUNT(*), COUNT(col_1)FROM NullTbl;SUM/AVG:不用于字符串類型數據
SELECT SUM(sale_price), SUM(purchase_price) FROM Product;MAX/MIN:適用于任何數據類型的列。即只要是能夠排序的數據,就肯定有最大值和最小值。
part 3
1.表
表的創建 (表名不能重復,名稱必須以英文開頭)
CREATE TABLE Product(product_id CHAR(4) NOT NULL,product_name VARCHAR(100) NOT NULL,sale_price INTEGER DEFAULT 0,regist_date DATE , PRIMARY KEY (product_id));表的刪除與更新
2.表中數據
向表中插入數據:INSERT INTO VALUES
INSERT INTO Product (product_id, product_name, sale_price, regist_date) VALUES ('0005', ' 鍋 ', DEFAULT, '2009-01-15');-- 對表進行全列 INSERT 時,可以省略表名后的列清單。即INSERT INTO Product VALUES( );
Duplicate data:INSERT INTO SELECT FROM
-- 將商品表中的數據生成新列復制到商品復制表中
INSERT INTO ProductType (product_type, sum_sale_price, sum_purchase_price) SELECT product_type, SUM(sale_price), SUM(purchase_price) FROM Product GROUP BY product_type;--INSERT 語句的 SELECT 語句中,可以使用 WHERE 子句或 GROUP BY 子句等任何SQL語法 (但使用 ORDER BY 子句并不會產生任何效果,因為無法保證表內部記錄的排列順序)
對查詢結果數據進行排序 :ORDER BY
▲子句的書寫順序
1. SELECT 子句 → 2. FROM 子句 → 3. WHERE 子句 → 4. GROUP BY 子句 →5. HAVING 子句 → 6. ORDER BY 子句
降序(默認升序ASC):SELECT *
FROM Product
ORDER BY regist_date DESC, sale_price;
辨: ORDER BY 子句中可使用 SELECT 子句中定義的別名
ORDER BY 子句中可使用 SELECT 子句中未使用的列和聚合函數。
排序鍵中包含 NULL 時,會在開頭或末尾進行匯總。
對數據進行分組:GROUP BY(切蛋糕的刀)
GROUP BY 聚合鍵(分組列)
聚合鍵中包含 NULL 時,在結果中會以“不確定”行(空行)的形式表現出來。
▲GROUP BY 和 WHERE 并用時 SELECT 語句的執行順序
FROM → WHERE → GROUP BY → SELECT
使用聚合函數時, SELECT 子句中只能存在以下三種元素。
● 常數:數字 123,或者字符串 ' 測試 ' 這樣寫在 SQL 語句中的固定值
● 聚合函數
● GROUP BY 子句中指定的列名(也就是聚合鍵)
NOTE:把聚合鍵之外的列名書寫在 SELECT 子句之中.X
GROUP BY 子句時, SELECT 子句中不能出現聚合鍵之外的列名。
GROUP BY 子句的結果隨機排序
-- 用WHERE 子句指定條件時不能跟聚合函數,HAVING出現。
辨:“想要刪除選擇結果中的重復記錄”時使用 DISTINCT ,
“想要計算匯總結果”時使用 GROUP BY 。
辨析HAVING 與WHERE
HAVING 子句的構成要素:常數、聚合函數、聚合鍵
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type
HAVING COUNT(*) = 2;
辨:聚合鍵所對應的條件不應寫在 HAVING 子句當中,而應寫在 WHERE 子句當中。
數據的刪除 : DROP; DELETE FROM
① DROP TABLE 語句可以將表完全刪除
② DELETE 保留數據表,僅刪除全部數據行
DELETE FROM Product
WHERE sale_price >= 4000;
-- 確認刪除后的結果
SELECT * FROM Product;
NOTE:① DELETE 語句中不能用 GROUP BY 、HAVING 和 ORDER BY 三類子句,只能用 WHERE 子 句。 (理解:刪除后條件查詢、排序等失效)
② 只能刪除表中全部數據的 TRUNCATE Product;
數據重復行的刪除:SELECT DINSTINCT FROM
-- DISTINCT 關鍵字只能用在第一個列名之前。不能寫成 r _ date , DISTINCT p _type 。
可使用聚合函數刪除重復值
SELECT SUM(DISTINCT sale_price)FROM Product;數據的更改(更新):UPDATE SET WHERE
UPDATE Product SET sale_price = sale_price * 10,purchase_price = purchase_price / 2 WHERE product_type = ' 廚房用具 '; -- 確認更新內容 SELECT * FROM Product ORDER BY product_id;使用 NULL 進行更新
UPDATE ProductSET regist_date = NULLWHERE product_id = '0008';NOTE:使用 UPDATE 語句可以將值清空為 NULL (但只限于未設置 NOT NULL 約束的列)。
PART 4 視圖 (CREATE VIEW AS )與復雜查詢
表:通過 INSERT 語句將數據保存到數據庫之中,而數據庫中的數據實際上會被保存到計算機的存儲設備(通常是硬盤)中。
視圖保存的是從表中取出數據所使用的 SELECT 語句(了解,不用區分)
1 創建視圖
視圖的限制:
① ——定義視圖時不能使用 ORDER BY 子句
② 視圖和表需要同時進行更新,因此通過匯總得到的視圖無法進行更新。
2 子查詢:一次性視圖( SELECT 語句)
根據商品種類統計商品數量的視圖:
標量子查詢:必須而且只能返回表中某一行的某一列的值
標量子查詢的書寫位置并不僅僅局限于 WHERE 子句中,通常任何可
以使用單一值的位置都可以使用。也就是說,能夠使用常數或者列名的
地方,無論是 SELECT 子句、 GROUP BY 子句、 HAVING 子句,還是
ORDER BY 子句,幾乎所有的地方都可以使用。
在 WHERE 子句中使用子查詢時,該子查詢的結果必須是單一的。
關聯子查詢:(細切分的組內進行比較時使用)
關聯子查詢按照商品種類對平均銷售單價進行比較
Question編寫一條 SQL 語句,創建一幅包含如下數據的視圖(名稱為 AvgPriceByType )。
answer
PART 5函數 謂詞
謂詞:LIKE、OR 、IN 、BETWEEN 、EXISTS(記錄)
謂詞的作用就是“判斷是否存在滿足某種條件的記錄”。如果存在這樣的記錄就返回真( TRUE ),如果不存在就返回假( FALSE )。
IN 謂詞—— OR 的簡便用法
eg:
通常指定關聯子查詢作為 EXIST 的參數。
作為 EXIST 參數的子查詢中經常會使用 SELECT * 。
case
CASE 表達式可進行行列轉換
PART6 表的加減法與聯結
1,加減法:以行方向為單位進行操作,即增加記錄行數
SELECT product_id, product_name FROM Product UNION SELECT product_id, product_name FROM Product2 ORDER BY product_id;-- UNION 等集合運算符通常都會除去重復的記錄。使用UNION ALL 選項,可以保留重復行。
-- 選取表中公共部分—— INTERSECT(交集) ;
--減法運算(注意被減數與減數位置) EXCEPT (差集)
條件:列數必須相同,列的類型必須一致, ORDER BY 子句只能在最后使用一次
2 聯結:以列為單位對表進行聯結
內聯結:eg
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price FROM ShopProduct AS SP INNER JOIN Product AS P ON SP.product_id = P.product_id WHERE SP.shop_id = '000A';3張表聯結:
--進行聯結時需要在 FROM 子句中使用多張表。
ON (聯結鍵),要書寫在 FROM 和 WHERE 之間。
SELECT 子句中的列需要按照“ < 表的別名 > . < 列名 > ”的格式進行書寫。
外聯結 ——選取出單張表中全部的信息
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price FROM ShopProduct AS SP RIGHT OUTER JOIN Product AS P ON SP.product_id = P.product_id;--指定主表的關鍵字是 LEFT 和 RIGHT
總結
以上是生活随笔為你收集整理的sql 减法_SQL学习笔记整理(持更)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: chrome 获取硬件信息_在tinyc
- 下一篇: python读取文件如何去除空格_pyt