一些關於MySQL的基礎函數
來自專欄數據分析師之路
MySQL 全名是:關係型資料庫管理系統,由瑞典MySQL AB 公司開發,是當今世界上最流行的一種資料庫管理系統。
為什麼企業要用SQL?EXCEL不好用么?
是的,EXCEL還真不好用,當企業運營到一定程度,數據量變大,EXCEL就顯得笨拙了。常常會出現卡頓,企業面臨數據丟失的風險,所以需要一個能穩定、隨時提取數據的系統。
那SQL難學么?要怎麼樣才能學會?
還真不難,SQL是一種面向資料庫的語言,只要掌握好數據提取的邏輯,再加上熟練書寫語法,基本2周就可以上手
首先先普及下MySQL 的常識吧,這部分很重要,是你日後眾多報錯的主要源頭,一定要看。
- MySQL使用客戶端-伺服器這樣的結構,我們在客戶端書寫SQL語句發送給伺服器,伺服器訪問資料庫,再將結果以表的形式返回給我們。
- 資料庫必須以記錄(行)為單位進行數據讀寫。
- 以EXCEL來對應資料庫中的名詞:
行:記錄
列:欄位
列名:數據名稱
4.SQL語言按照操作內容不同分為三類
DDL:資料庫定義語言(CREATE;DROP;ALTER)
DML:數據操縱語言(SELECT;INSERT;UPDATE;DELETE)
DCL:數據控制語言(COMMIT;ROLLBACK;GRANT;REVOKE)
(不要輕易DROP啊,不要輕易DELETE啊,刪掉很難恢復的啊,拿到數據第一件事是先備份啊)
5.基本的書寫方法:
以 ;結尾
關鍵詞和表名首字母大寫
『字元串』與『日期』要加單引號
寫注釋就用/*注釋內容*/
接下來進入正題,一些最初級的入門SQL語句:
/*新建數據表空表 Product*//*空表包含列名: product_id 定長4個字元串長度 不為空 product_name 變長最多100個長度 不為空 product_type 變長最多32個長度 不為空 sale_price 為整數型 默認值為0 purchase_price 為整數型 regist_date 為日期型 product_id為查詢鍵*/CREATE TABLE Product(product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, product_type VARCHAR(32) NOT NULL, sale_price INTEGER DEFAULT 0, purchase_price INTEGER , regist_date DATE , PRIMARY KEY(product_id));/*填充表內容如下*/INSERT INTO Product VALUES(0001,T恤衫,衣服,1000,500,2009-09-20);INSERT INTO Product VALUES(0002,打孔器,辦公用品,500,320,2009-09-11);INSERT INTO Product (product_id,product_name,product_type,sale_price,purchase_price)VALUES(0003,運動T恤,衣服,4000, 2800);INSERT INTO Product VALUES(0004,菜刀,廚房用具,3000,2800,2009-09-20);INSERT INTO Product VALUES(0005,高壓鍋,廚房用具,6800, 5000,2009-01-15);INSERT INTO Product (product_id,product_name,product_type,sale_price,regist_date)VALUES(0006,叉子,廚房用具,500,2009-09-20);INSERT INTO Product VALUES(0007,擦菜板,廚房用具,880,790,2009-04-28);INSERT INTO Product (product_id,product_name,product_type,sale_price,regist_date)VALUES(0008,圓珠筆,辦公用品,100,2009-11-11);/*查詢出表中所有列*/SELECT *FROM Product;/*為regist_date設置別名:日期*/SELECT regist_date AS 日期FROM Product;/*查看別名日期*/SELECT 日期FROM Product;/*在查詢表中新建一列列名為string,值全部為商品,另一列為number,值全部為38的兩列*/SELECT 商品AS string,38 AS numberFROM Product;/*插入兩行重複行*/INSERT INTO Product VALUES(0009,擦菜板,廚房用具,880,790,2009-04-28), (0010,擦菜板,廚房用具,880,790,2009-04-28);/*刪除兩列重複值返回的值*/SELECT DISTINCT product_type,product_nameFROM Product;/*只查詢值為衣服的銷售名稱和單價*/SELECT product_name,product_type,sale_priceFROM ProductWHERE product_type=衣服;/*將銷售單價統一提高2倍*/SELECT sale_price*2FROM Product;/*選出提價後的銷售單價高於5000元的商品*/SELECT product_id,sale_price*2,product_nameFROM productWHERE sale_price*2>5000;/*查一下purchase_price中為空的單元格*/SELECT purchase_price IS NULLFROM Product;/*查一下sale_price中4000以上和1000以下的商品*/SELECT product_id,product_name,product_type,purchase_priceFROM productWHERE sale_price>4000 OR sale_price<1000;/*計算表中有多少條記錄*/SELECT COUNT(*)FROM Product;/*計算表中進貨價總和*/SELECT SUM(purchase_price)FROM Product;/*計算表中銷售單價平均值*/SELECT AVG(sale_price)FROM Product;/*計算表中進貨單價平均值【聚合函數會先去掉NULL再計算】*/SELECT AVG(purchase_price)FROM Product;/*計算表中最高銷售單價物品*/SELECT MAX(sale_price)FROM Product;/*計算表中最低銷售單價物品*/SELECT MIN(sale_price)FROM Product;/*刪除銷售單價中重複值之後求銷價的平均值*/SELECT AVG(DISTINCT sale_price)FROM Product;/*按type分組*/SELECT *FROM productGROUP BY product_type;/*按sale_price排序*/SELECT *FROM productORDER BY sale_price;/*創建ProductCopy表,備份本表*/CREATE TABLE ProductCopy(product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, product_type VARCHAR(32) NOT NULL, sale_price INTEGER DEFAULT 0, purchase_price INTEGER , regist_date DATE , PRIMARY KEY(product_id));/*把表Product備份到Copy中*/INSERT INTO ProductCopy (product_id,product_name,product_type,sale_price,purchase_price,regist_date)SELECT product_id,product_name,product_type,sale_price,purchase_price,regist_dateFROM Product;/*創建一個匯總表,按name匯總*/CREATE TABLE ProductName(product_name_sum VARCHAR(100) NOT NULL, sale_price_sum INTEGER DEFAULT 0, purchase_price_sum INTEGER , PRIMARY KEY (product_name_sum));/*開始匯總*/INSERT INTO ProductName (product_name_sum,sale_price_sum,purchase_price_sum)SELECT product_name,SUM(sale_price),SUM(purchase_price)FROM productGROUP BY product_name;
推薦閱讀:
※Functional Analysis Week 2
※雙線性插值
※plus token真偽性查詢之搬磚流水查詢
※用數學思維,打破數據悖論 | 數據科學50人·吳明輝
※排序——選擇排序