- DISTINCT:只返回不同的值
SELECT DISTINCT id FROM products;
- LIMIT N:返回不多於N行
SELECT id FROM products LIMIT 5;
- LIMIT M, N:第一個數M爲開始位置,第二個數N爲要檢索的行數
SELECT id FROM products LIMIT 5,4;
- ORDER BY:首先按價格排序,再按名稱排序(升序)
SELECT * FROM products ORDER BY prod_price, prod_name;
- ORDER BY:首先按價格排序(降序),再按名稱排序(升序)
SELECT * FROM products ORDER BY prod_price DESC, prod_name (LIMIT 1);
- LIKE:通配符進行過濾。%表示任何字符出現任意次數;_表示匹配任意單個字符。
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '_ello';
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '%llo';
- REGEXP:正則表達式
SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;
1. 匹配兩個字符 |
SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;
2. 匹配多個字符 []
SELECT prod_name FROM products WHERE prod_name REGEXP '[123]000' ORDER BY prod_name;
3. 匹配範圍 [0-9] [a-z]
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-3]000' ORDER BY prod_name;
4. 匹配特殊字符 \\. \\-
SELECT prod_name FROM products WHERE prod_name REGEXP '\\.' ORDER BY prod_name;
5. 匹配字符類
[:alnum:]任意字母和數字(同[a-zA-Z0-9])
[:alpha:]任意字母(同[a-zA-Z])
[:digit:]任意數字(同[0-9])
[:lower:]任意小寫字母(同[a-z])
[:upper:]任意大寫字母(同[A-Z])
\* 0個或多個匹配
\+ 1個或多個匹配
? 0個或1個匹配
{n} 指定數目的匹配
{n,} 不少於指定數目的匹配
{n,m} 匹配數目的範圍
SLECT prod_name FROM products WHERE pro_name REGXP '[[:digit:]]{4}' ORDER BY prod_name;
6. 定位符
^ 文本的開始
$ 文本的結束
[[:<:]] 詞的開始
[[:>:]] 詞的結尾
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name;
- 執行算術計算
SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 2005;
- 分組數據
1. AVG() 通過對錶中行數計數並計算特定列值之和,求得該列的平均值
SELECT AVG(prod_price) AS avg_price FROM products WHERE vend_id = 1003;
2. COUNT()函數進行計數。可利用COUNT()確定表中行的數目或符合特定條件的行數目
SELECT COUNT(*) AS num_cust FROM customers;#利用COUNT(*)對所有行計數
SELECT COUNT(cust_email) AS num_cust FROM customers;#對cust_email字段爲NULL的忽略
3. MAX()返回指定列中的最大值
SELECT MAX(prod_price) AS max_price FROM products;
4. MIN()返回指定列中的最小值
SELECT MIN(prod_price) AS min_price FROM products;
5. SUM()用來返回指定列值的和(總計)
SELECT SUM(quantity) AS items_ordered FROM orderitems WHERE order_num = 20005;
6. 聚集不同值
SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE order_id = 1003;
7. 組合聚集函數
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;
8. 子查詢
SELECT cust_id FROM orders WHERE order_num IN(SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');
【運營表】select t1.uid, t1.prize_code, t2.prize_code as jxq_code, t2.prize_tpl_code from t_user_redpacket t1, t_user_coupon t2 where t1.uid = t2.uid;
9. 作爲計算字段使用子查詢
SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customer.cust_id) AS orders FROM customers ORDER BY cust_name;
【運營表】select uid, prize_code from t_user_redpacket WHERE uid in (SELECT uid from t_user_coupon WHERE prize_tpl_code = 'JXQ4bb6eadc9ab9');
【運營表】select DISTINCT uid, (SELECT count(*) FROM t_user_coupon WHERE t_user_coupon.uid = t_user_redpacket.uid) AS tpl_count FROM t_user_redpacket;
10. 內部聯結
SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;
11. 左聯結
SELECT vend_name, prod_name, prod_price FROM vendors LEFT JOIN products ON vendors.vend_id = products.vend_id;
12. 右聯結
SELECT vend_name, prod_name, prod_price FROM vendors RIGHT JOIN products ON vendors.vend_id = products.vend_id;
13. 多表查詢或聯表查詢
【會員體系】SELECT uid, name, sex FROM t_member;
【會員體系】 SELECT uid, name FROM t_welfare_record;
【會員體系】SELECT t1.uid, t1.name, t1.sex FROM t_member t1, t_welfare_record t2 WHERE t1.uid = t2.uid;
14. union:在單個查詢中從不同的表返回類似結構的數據;對單個標執行多個查詢,按單個查詢返回數據
SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price <= 5
union SELECT vend_id, prod_id, prod_price FROM products WHERE vend_id IN (1001,1002) ORDER BY vend_id, pord_proice;
15. 存儲過程簡單來說,就是爲以後的使用而保存的一條或多條mysql語句的集合。可將其視爲批處理文件,雖然它們的作用不限於批處理。
16.SQL SELECT INTO 語句可用於創建表的備份復件。
SELECT INTO 語句從一個表中選取數據,然後把數據插入另一個表中。
SELECT INTO 語句常用於創建表的備份復件或者用於對記錄進行存檔。