下面是一些學(xué)習(xí)如何用MySQL解決一些常見問題的例子。
在一些例子中,使用數(shù)據(jù)庫表“shop”來儲(chǔ)存某個(gè)商人(經(jīng)銷商)的每件物品(物品號(hào))的價(jià)格。假定每個(gè)商人對(duì)每項(xiàng)物品有一個(gè)固定價(jià)格,那么(物品,商人)即為該記錄的主關(guān)鍵字。
啟動(dòng)命令行工具mysql并選擇數(shù)據(jù)庫:
shell> mysql your-database-name
(在大多數(shù)MySQL中,你可以使用test數(shù)據(jù)庫)。
你可以使用以下語句創(chuàng)建示例表:
mysql> CREATE TABLE shop (
-> article INT(4) UNSIGNED ZEROFILL DEFAULT ’0000’ NOT NULL,
-> dealer CHAR(20) DEFAULT ’’ NOT NULL,
-> price DOUBLE(16,2) DEFAULT ’0.00’ NOT NULL,
-> PRIMARY KEY(article, dealer));
mysql> INSERT INTO shop VALUES
-> (1,’A’,3.45),(1,’B’,3.99),(2,’A’,10.99),(3,’B’,1.45),
-> (3,’C’,1.69),(3,’D’,1.25),(4,’D’,19.95);
執(zhí)行語句后,表應(yīng)包含以下內(nèi)容:
mysql> SELECT * FROM shop;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
3.6.1. 列的值
“的物品號(hào)是什么?”
SELECT MAX(article) AS article FROM shop;+---------+| article |+---------+| 4 |+---------+
3.6.2. 擁有某個(gè)列的值的行
任務(wù):找出最貴物品的編號(hào)、銷售商和價(jià)格。
這很容易用一個(gè)子查詢做到:
SELECT article, dealer, priceFROM shopWHERE price=(SELECT MAX(price) FROM shop);另一個(gè)解決方案是按價(jià)格降序排序所有行并用MySQL特定LIMIT子句只得到第一行:
SELECT article, dealer, priceFROM shopORDER BY price DESCLIMIT 1;注:如果有多項(xiàng)最貴的物品( 例如每個(gè)的價(jià)格為19.95),LIMIT解決方案僅僅顯示其中一個(gè)!
3.6.3. 列的值:按組
任務(wù):每項(xiàng)物品的的價(jià)格是多少?
SELECT article, MAX(price) AS priceFROM shopGROUP BY article+---------+-------+| article | price |+---------+-------+| 0001 | 3.99 || 0002 | 10.99 || 0003 | 1.69 || 0004 | 19.95 |+---------+-------+
3.6.4. 擁有某個(gè)字段的組間值的行
任務(wù):對(duì)每項(xiàng)物品,找出最貴價(jià)格的物品的經(jīng)銷商。
可以用這樣一個(gè)子查詢解決該問題:
SELECT article, dealer, priceFROM shop s1WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article);
3.6.5. 使用用戶變量
你可以清空MySQL用戶變量以記錄結(jié)果,不必將它們保存到客戶端的臨時(shí)變量中。(參見 9.3節(jié),“用戶變量”.)。
例如,要找出價(jià)格或最低的物品的,其方法是:
mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price;
+---------+--------+-------+| article | dealer | price |+---------+--------+-------+| 0003 | D | 1.25 || 0004 | D | 19.95 |+---------+--------+-------+
在一些例子中,使用數(shù)據(jù)庫表“shop”來儲(chǔ)存某個(gè)商人(經(jīng)銷商)的每件物品(物品號(hào))的價(jià)格。假定每個(gè)商人對(duì)每項(xiàng)物品有一個(gè)固定價(jià)格,那么(物品,商人)即為該記錄的主關(guān)鍵字。
啟動(dòng)命令行工具mysql并選擇數(shù)據(jù)庫:
shell> mysql your-database-name
(在大多數(shù)MySQL中,你可以使用test數(shù)據(jù)庫)。
你可以使用以下語句創(chuàng)建示例表:
mysql> CREATE TABLE shop (
-> article INT(4) UNSIGNED ZEROFILL DEFAULT ’0000’ NOT NULL,
-> dealer CHAR(20) DEFAULT ’’ NOT NULL,
-> price DOUBLE(16,2) DEFAULT ’0.00’ NOT NULL,
-> PRIMARY KEY(article, dealer));
mysql> INSERT INTO shop VALUES
-> (1,’A’,3.45),(1,’B’,3.99),(2,’A’,10.99),(3,’B’,1.45),
-> (3,’C’,1.69),(3,’D’,1.25),(4,’D’,19.95);
執(zhí)行語句后,表應(yīng)包含以下內(nèi)容:
mysql> SELECT * FROM shop;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
3.6.1. 列的值
“的物品號(hào)是什么?”
SELECT MAX(article) AS article FROM shop;+---------+| article |+---------+| 4 |+---------+
3.6.2. 擁有某個(gè)列的值的行
任務(wù):找出最貴物品的編號(hào)、銷售商和價(jià)格。
這很容易用一個(gè)子查詢做到:
SELECT article, dealer, priceFROM shopWHERE price=(SELECT MAX(price) FROM shop);另一個(gè)解決方案是按價(jià)格降序排序所有行并用MySQL特定LIMIT子句只得到第一行:
SELECT article, dealer, priceFROM shopORDER BY price DESCLIMIT 1;注:如果有多項(xiàng)最貴的物品( 例如每個(gè)的價(jià)格為19.95),LIMIT解決方案僅僅顯示其中一個(gè)!
3.6.3. 列的值:按組
任務(wù):每項(xiàng)物品的的價(jià)格是多少?
SELECT article, MAX(price) AS priceFROM shopGROUP BY article+---------+-------+| article | price |+---------+-------+| 0001 | 3.99 || 0002 | 10.99 || 0003 | 1.69 || 0004 | 19.95 |+---------+-------+
3.6.4. 擁有某個(gè)字段的組間值的行
任務(wù):對(duì)每項(xiàng)物品,找出最貴價(jià)格的物品的經(jīng)銷商。
可以用這樣一個(gè)子查詢解決該問題:
SELECT article, dealer, priceFROM shop s1WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article);
3.6.5. 使用用戶變量
你可以清空MySQL用戶變量以記錄結(jié)果,不必將它們保存到客戶端的臨時(shí)變量中。(參見 9.3節(jié),“用戶變量”.)。
例如,要找出價(jià)格或最低的物品的,其方法是:
mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price;
+---------+--------+-------+| article | dealer | price |+---------+--------+-------+| 0003 | D | 1.25 || 0004 | D | 19.95 |+---------+--------+-------+