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