中文参考手册--8.MySQL教程--8.3常用查询的例子
来源:互联网 发布:域名交易中心 编辑:程序博客网 时间:2024/05/22 06:43
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
一些例子使用表“shop”,包含某个商人的每篇文章(物品号)的价格。假定每个商人的每篇文章有一个单独的固定价格,那么(物品,商人)是记录的主键。
你能这样创建例子数据库表:
CREATETABLEshop(articleINT(4)UNSIGNEDZEROFILLDEFAULT'0000'NOTNULL,dealerCHAR(20)DEFAULT''NOTNULL,priceDOUBLE(16,2)DEFAULT'0.00'NOTNULL,PRIMARYKEY(article,dealer));INSERTINTOshopVALUES(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);
好了,例子数据是这样的:
SELECT*FROMshop+---------+--------+-------+|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|+---------+--------+-------+
“最大的物品号是什么?”
SELECTMAX(article)ASarticleFROMshop+---------+|article|+---------+|4|+---------+
“找出最贵的文章的编号、商人和价格”
在ANSI-SQL中这很容易用一个子查询做到:
SELECTarticle,dealer,priceFROMshopWHEREprice=(SELECTMAX(price)FROMshop)
- 用一个
语句从表中得到最大值。使用该值编出实际的查询:SELECTarticle,dealer,priceFROMshopWHEREprice=19.95
另一个解决方案是按价格降序排序所有行并用MySQL特定子句只得到的第一行:
SELECTarticle,dealer,priceFROMshopORDERBYpriceDESCLIMIT1
注意:如果有多个最贵的文章(例如每个19.95)解决方案仅仅显示他们之一!
“每篇文章的最高的价格是什么?”
SELECTarticle,MAX(price)ASpriceFROMshopGROUPBYarticle+---------+-------+|article|price|+---------+-------+|0001|3.99||0002|10.99||0003|1.69||0004|19.95|+---------+-------+
“对每篇文章,找出有最贵的价格的交易者。”
在中,我可以用这样一个子查询做到:
SELECTarticle,dealer,priceFROMshops1WHEREprice=(SELECTMAX(s2.price)FROMshops2WHEREs1.article=s2.article)
在MySQL中,最好是分几步做到:
- 得到一个表(文章,maxprice)。见。对每篇文章,得到对应于存储最大价格的行。
这可以很容易用一个临时表做到:
CREATETEMPORARYTABLEtmp(articleINT(4)UNSIGNEDZEROFILLDEFAULT'0000'NOTNULL,priceDOUBLE(16,2)DEFAULT'0.00'NOTNULL);LOCKTABLESarticleread;INSERTINTOtmpSELECTarticle,MAX(price)FROMshopGROUPBYarticle;SELECTarticle,dealer,priceFROMshop,tmpWHEREshop.article=tmp.articelANDshop.price=tmp.price;UNLOCKTABLES;DROPTABLEtmp;
如果你不使用一个表,你也必须锁定“tmp”表。
“它能一个单个查询做到吗?”
是的,但是只有使用我称之为“MAX-CONCAT诡计”的一个相当低效的诡计:上一页
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 中文参考手册--8.MySQL教程--8.3常用查询的例子
- MySQL中文参考手册--MySQL教程(3)--常用查询的例子
- MySQL中文参考手册-- 常用查询的例子
- 中文参考手册--8.MySQL教程--8.2输入查询
- 中文参考手册--8.MySQL教程--8.7双胞胎项目的查询(实例)
- MySQL中文参考手册--MySQL教程(2)--输入查询
- MySQL中文参考手册-8 MySQL教程
- 中文参考手册--8.MySQL教程--8.4创造并使用一个
- 中文参考手册--8.MySQL教程--8.5获得和表的信息
- mysql系列:常用查询的例子
- MySQL 4.1.0 中文参考手册 --- 6.9 MySQL 查询缓存
- 中文参考手册--8.MySQL教程--8.6以批处理模式使用mysql
- MySQL中文参考手册--MySQL教程(1)--SQL 语法参考
- 4.1.0中文参考手册---6.9MySQL查询缓存
- 中文参考手册--8.MySQL教程--8.1连接与断开服务者
- 常用查询的例子
- 常用查询的例子
- mysql中文参考手册
- 毕业旅行·厦大,环岛路
- 中文参考手册--8.MySQL教程--8.4创造并使用一个
- C#组合的递归算法
- 北京海淀发生地震
- No getter method for property info of bean user 解决办法
- 中文参考手册--8.MySQL教程--8.3常用查询的例子
- 中文参考手册--8.MySQL教程--8.2输入查询
- 中文参考手册--8.MySQL教程--8.1连接与断开服务者
- JAVA的框架的形成是否会向C#一样,用鼠标编程?
- 中文参考手册---7MySQL语言参考
- 如何静态链接pthreads-win32
- 中文参考手册---6MySQL存取权限系统
- 很全面的,很好的一片论文,主要是在线考试
- 建立自己的WAP手机网站