查詢數(shù)據(jù)
SELECT 語法結(jié)構(gòu)
SELECT (DISTINCT) column_name1, column_name2,.....,aggregate_function(column_name) FROM table_name ORDER BY column_name1, column_name2,....(LIMIT 0,5);
- SELECT 命令可以讀取一條或者多條記錄。
- 你可以使用星號(*)來代替其他字段,SELECT語句會返回表的所有字段數(shù)據(jù)
- 你可以使用 WHERE 語句來包含任何條件。
- 你可以使用 LIMIT 屬性來設(shè)定返回的記錄數(shù)。
- 你可以通過OFFSET指定SELECT語句開始查詢的數(shù)據(jù)偏移量。默認(rèn)情況下偏移量為0。
過濾數(shù)據(jù)
值比較符號=、<>、 !=、<、<=、>、>=、IS [NOT] NULL
范圍(BETWEEN AND), IN(范圍, 范圍) NOT IN(范圍, 范圍)
LIKE過濾
語法結(jié)構(gòu):
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1;
| 模式 | 描述 | 示例 |
|---|---|---|
| _ | 表示任意單個字符。類似于正則表達(dá)式中的星號 "." | 'a' //三位且中間字母是a的 <br />'a' //兩位且結(jié)尾字母是a的 <br />'a' //兩位且開頭字母是a的 |
| % | 表示任意字符,類似于正則表達(dá)式中的星號 ""* | '%a' //以a結(jié)尾的數(shù)據(jù) <br />'a%' //以a開頭的數(shù)據(jù) <br />'%a%' //含有a的數(shù)據(jù) |
| [...] | 字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 | |
| [^...] | 負(fù)值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。 |
示例:
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%'; //搜索prod_name字段中包含jet字符串的所有數(shù)據(jù)
正則表達(dá)式過濾
| 模式 | 描述 | 示例 |
|---|---|---|
| ^ | 匹配輸入字符串的開始位置 | 查找name字段中以'st'為開頭的所有數(shù)據(jù):<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st'; |
| $ | 匹配輸入字符串的結(jié)束位置 | 查找name字段中以'ok'為結(jié)尾的所有數(shù)據(jù):<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$'; |
| \ | 匹配特殊字符。 | 查找name字段中包含.的所有數(shù)據(jù):<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '\\.'; |
| [...] | 字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 | 查找name字段包含:ak, ek,ik, ok, uk等所有數(shù)據(jù):<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '[aeiou]k'; |
| [^...] | 負(fù)值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。 | <br /> |
| . | 匹配除 "\n" 之外的任何單個字符。要匹配包括 '\n' 在內(nèi)的任何字符,請使用像 '[.\n]' 的模式。 | 查找name字段中以'ok'為結(jié)尾的所有數(shù)據(jù): |
| * | 匹配前面的子表達(dá)式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價于{0,}。 | <br /> |
| + | 匹配前面的子表達(dá)式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價于 {1,}。 | <br /> |
| {n} | n 是一個非負(fù)整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。 | |
| {n,m} | m 和 n 均為非負(fù)整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。 | <br /> |
| p1|p2|p3 | 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。 | 查找name字段中以元音字符開頭或以'ok'字符串結(jié)尾的所有數(shù)據(jù):<br />mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$'; |
示例:
SELECT prod_name FROM products WHERE prod_name REGXP '[1-5] Ton' ORDER BY prod_name;
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name;
[NOT] EXISTS
判斷子查詢是否存在。語法結(jié)構(gòu):
SELECT column_name1, column_name2,... FROM table_name_1 WHERE [conditions] and [NOT] EXISTS (SELECT * FROM table_name_2 where [conditons]);
執(zhí)行過程:
1、首先進(jìn)行外層查詢,在表table_name_1中查詢滿足條件的column1;
2、接下來進(jìn)行內(nèi)層查詢,將滿足條件的column1帶入內(nèi)層的表table_name_2中進(jìn)行查詢;
3、如果內(nèi)層的表table_name_2滿足查詢條件,則返回true,該條數(shù)據(jù)保留;如果內(nèi)層的表table_name_2不滿足查詢條件,則返回false,該條數(shù)據(jù)不保留;
4、最終將數(shù)據(jù)進(jìn)行返回;
示例:
select * from student s where exists( select * from classinfo c where s.classid = c.classid);
函數(shù)
- 拼接字段:Concat
- 別名:AS, 會創(chuàng)建新的列
- 算術(shù)計算:+,-,*,/
- 文本處理函數(shù):Ltrim(), RTrim(), Lower(), Upper(), Left(), Right(), - Length(),<br />日期和時間處理函數(shù):Date(), Year(), Month(), Day(), Hour()
- 匯總數(shù)據(jù):AVG(), COUNT(), MAX(), MIN(), SUM() 忽略列值為NULL的行,可以加DISTINCT參數(shù)。
分組
GROUP BY語句根據(jù)一個或多個列對結(jié)果集進(jìn)行分組,如果想要對分組的結(jié)果進(jìn)一步過濾,可以使用HAVING。<br />語法結(jié)構(gòu):
SELECT column_name1, column_name2……,aggregate_function(column_name)
FROM table_name
[WHERE conditions]
GROUP BY column_name1,column_name2…… [HAVING conditions];
執(zhí)行流程:<br />1.首先進(jìn)行外層查詢,根據(jù)WHERE條件過濾出數(shù)據(jù);<br />2.對第一步所得數(shù)據(jù)按照GROUP BY后面跟的字段進(jìn)行分組,分組順序與字段順序保持一致;<br />3.HAVING子句篩選滿足第二條件的數(shù)據(jù); 如果HAVING中有使用SELECT中聚合函數(shù)生成的字段,那等SELECT完之后再執(zhí)行過濾;<br />4.執(zhí)行SELECT, 返回指定的字段;
示例:
SELECT order_num, SUM(quantity*item_price) AS ordertotal FROM orderitems
GROUP BY order_num
HAVING SUM(quantity*item_price) >= 50
ORDER BY ordertotal;
增刪改數(shù)據(jù)
INSERT INTO customers(cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country) VALUES(...);
UPDATE customers SET cust_name = 'The Fudds', cust_email = 'elmer@fudd.com' WHERE cust_id = 10005;
DELETE FROM customers WHERE cust_id = 10006;
表定義操作
創(chuàng)建和刪除表
SHOW DATABASES; //顯示數(shù)據(jù)庫;
USE <數(shù)據(jù)庫名>; //使用數(shù)據(jù)庫;
SHOW TABLES; //顯示庫下面所有表;
DROP TABLE <表名>; //刪除表
ALTER TABLE <表名> ADD <新字段名><數(shù)據(jù)類型>[約束條件]; //添加字段
ALTER TABLE <表名> DROP <字段名>; //刪除字段
ALTER TABLE <表名> CHANGE <舊字段名> <新字段名> <新數(shù)據(jù)類型>;//修改字段定義
ALTER TABLE <表名> MODIFY <字段名> <新數(shù)據(jù)類型>;//修改字段定義, 跟CHANGE區(qū)別是不能重命名字段
參考:
1.幾種MySQL中的聯(lián)接查詢操作方法總結(jié)Mysql腳本之家<br />http://www.jb51.net/article/64006.htm<br />3.第8篇 MySQL 多表連接查詢