您的位置:首页 > 数据库 > MySQL

MYSQL学习笔记(4)常用查询的例子

2007-06-06 10:16 351 查看
下面是一些学习如何用MySQL解决一些常见问题的例子。

在一些例子中,使用数据库表“shop”来储存某个商人(经销商)的每件物品(物品号)的价格。假定每个商人对每项物品有一个固定价格,那么(物品,商人)即为该记录的主关键字。

启动命令行工具mysql并选择数据库:

shell> mysql your-database-name

(在大多数MySQL中,你可以使用test数据库)。

你可以使用以下语句创建示例表:




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);

执行语句后,表应包含以下内容:



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. 列的最大值

“最大的物品号是什么?”


SELECT MAX(article) AS article FROM shop;



+---------+
| article |
+---------+
|       4 |
+---------+


3.6.2. 拥有某个列的最大值的行

任务:找出最贵物品的编号、销售商和价格。
这很容易用一个子查询做到:




SELECT article, dealer, priceFROM shop


WHERE price=(SELECT MAX(price) FROM shop);

另一个解决方案是按价格降序排序所有行并用MySQL特定LIMIT子句只得到第一行:[/code]




SELECT article, dealer, price


FROM shop


ORDER BY price DESC


LIMIT 1;

:如果有多项最贵的物品( 例如每个的价格为19.95),LIMIT解决方案仅仅显示其中一个![/code]

3.6.3. 列的最大值:按组

任务:每项物品的的最高价格是多少?


SELECT article, MAX(price) AS price


FROM   shop


GROUP BY article



+---------+-------+
| article | price |
+---------+-------+
|    0001 |  3.99 |
|    0002 | 10.99 |
|    0003 |  1.69 |
|    0004 | 19.95 |
+---------+-------+


3.6.4. 拥有某个字段的组间最大值的行

任务:对每项物品,找出最贵价格的物品的经销商。

可以用这样一个子查询解决该问题:


SELECT article, dealer, price


FROM   shop s1


WHERE  price=(SELECT MAX(s2.price)


FROM shop s2


WHERE s1.article = s2.article);



3.6.5. 使用用户变量

你可以清空MySQL用户变量以记录结果,不必将它们保存到客户端的临时变量中。(参见 9.3节,“用户变量”.)。

例如,要找出价格最高或最低的物品的,其方法是:


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 |
+---------+--------+-------+
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: