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

本文通过示例介绍了MySQL中一些常见的查询技巧,包括如何找到列的最大值、拥有最大值的行及按组的最大值等。

下面是一些学习如何用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子句只得到第一行:



       
SELECT  article, dealer, price
FROM  shop
ORDER   BY  price  DESC
LIMIT 
1 ;
:如果有多项最贵的物品( 例如每个的价格为19.95),LIMIT解决方案仅仅显示其中一个!

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 |
+---------+--------+-------+
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值