SQL必知必會筆記(一)
阿新 • • 發佈:2020-01-28
SQL必知必會(一)
1,任何人一直學習任何一門手藝都會有些煩躁
2,休息好和玩好是學好的前提
3,死記硬背是融會貫通的前提
基礎知識
資料:
資料庫:儲存有組織的資料的容器(通常是一個檔案或一組檔案)
表:某種特定型別資料的結構化清單 表名唯一
列
資料型別
行:記錄
主鍵:
外來鍵:
必備程式碼
#一切以mysql為演示 #切換表 USE dingdan; #檢索單個列 SELECT prod_name FROM products; #檢索多個列 SELECT prod_name,prod_id,prod_price FROM products; #檢索所有列 SELECT * FROM products; #只保留不同的值 SELECT DISTINCT vend_id FROM products; #限制結果(MYSQL) SELECT prod_name FROM products LIMIT 5; //前5個 SELECT prod_name FROM products LIMIT 3 OFFSET 5; //第三行起的5行資料 #排序資料(單行) SELECT prod_name FROM products ORDER BY prod_name; #排序資料(多行) SELECT prod_name,prod_price FROM products ORDER BY prod_id,prod_name; #排序資料(按照列的位置) SELECT prod_name,prod_price FROM products ORDER BY 2,1; #指定排序方向(降序) SELECT prod_name,prod_name DESC; #指定排序方向(升序)預設升序 SELECT prod_name FROM products ORDER BY prod_name ASC; #過濾資料 = <> != < > <= >= !< !> between is null SELECT prod_name,prod_price FROM products WHERE prod_price = 3.49; #檢查單個值 SELECT prod_name,prod_price FROM products WHERE prod_price > 3.49; #不匹配檢查 SELECT prod_name,prod_price FROM products WHERE prod_price <> 3.49; #between SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10; #空值檢查 SELECT prod_name,prod_price FROM products WHERE prod_price IS NULL; #組合where and SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10 AND WHERE prod_name IS NOT NULL; #or SELECT prod_name,prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'; #SQL優先處理and,再處理or SELECT prod_name,prod_price FROM products WHERE(vend_id = 'DLL01' OR vend_id = 'BRSO1') AND prod_price >=10; #IN 操作符 SELECT prod_name,prod_price FROM products WHERE vend_id IN ('DLL01','BRS01') ORDER BY prod_name; #NOT 否定緊跟的限定語句 SELECT prod_name,prod_price FROM products WHERE NOT vend_id = 'DLL01' ORDER BY prod_name; #萬用字元 % SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE 'Fish%'; SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE '%bean bag%'; # _ 單個字元 SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE '__ inch teddy bear'; #[] 字符集匹配 SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[JM]%' ORDER BY cust_constact; #[^] 字符集匹配 SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[^JM]%' ORDER BY cust_constact; #拼接(MySQL) SELECT CONCAT(vend_name,' (',vend_country,')') FROM Vendors ORDER BY vend_name; #RTRIM 去除右邊空格 #LTRIM 去除左邊空格 #TRIM 去除左右空格 SELECT RTRIM(vend_name)+'(' + RTRIM(vend_country) + ')' FROM Vendors ORDER BY vend_name; #使用別名(MySQL) SELECT CONCAT(vend_name,')') AS vend_title FROM Vendors ORDER BY vend_name; #執行算術計算 SELECT prod_id,quantity,item_price,quantity * item_price AS expanded_price FROM OrderItems WHERE order_num = 20008; #函式 UPPER SELECT vend_name,UPPER(vend_name) AS vend_name_upcase FROM Vendors ORDER BY vend_name; /* UPPER() 轉換成大寫 LOWER() 小寫 LEFT() 返回字串左邊的字元 RIGHT() 右 LENGTH() 返回字串的長度 SOUNDEX() 返回字串的語音表示的字母數字 */ #發音匹配 SELECT cust_name,cust)contact FROM Customers WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green'); #日期函式(MySql) SELECT order_num FROM Orders WHERE YEAR(order_date) = 2012; /* ABS()絕對值 COS()餘弦 EXP()指數值 PI()圓周率 SIN()正弦 SQRT()平方根 TAN()正切 AVG() COUNT() MAX() MIN() SUM() */ #AVG() SELECT AVG(prod_price) AS avg_price FROM Products WHERE vend_id = 'DLL01'; #count() SELECT COUNT(cust_email) AS num_cust FROM Customers; #組合聚集函式 SELECT COUNT(*) AS num_items,MIN(prod_price) AS price_min,MAX(prod_price) AS price_max,AVG(prod_price) AS price_avg FROM Products; #資料分組 SELECT vend_id,COUNT(*) AS num_prods FROM Products GROUP BY vend_id; #過濾分組 SELECT vend_id,COUNT(*) AS num_prods FROM Products GROUP BY vend_id HAVING COUNT(*) >=2;
今天下午SQL學到這裡算是煩躁了,明天加油!