快捷搜索:   服务器  PHP  安全  linux 安全  IIS

MySQL_常用查询的例子

下面是一些学习如何用MySQL解决一些常见问题的例子。

一些例子使用数据库表“shop”,包含某个商人的每篇文章(物品号)的价格。假定每个商人的每篇文章有一个单独的固定价格,那么(物品,商人)是记录的主键。  

你能这样创建例子数据库表:

好了,例子数据是这样的:

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

3.2 拥有某个列的最大值的行
“找出最贵的文章的编号、商人和价格”
  
在ANSI-SQL中这很容易用一个子查询做到:

在MySQL中(还没有子查询)就用2步做到:

用一个SELECT语句从表中得到最大值。
使用该值编出实际的查询:

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

注意:如果有多个最贵的文章( 例如每个19.95),LIMIT解决方案仅仅显示他们之一!
  
3.3 列的最大值:按组:只有值

“每篇文章的最高的价格是什么?”

3.4 拥有某个字段的组间最大值的行
“对每篇文章,找出有最贵的价格的交易者。”
  
在ANSI SQL中,我可以用这样一个子查询做到:
  

在MySQL中,最好是分几步做到:
  
得到一个表(文章,maxprice)。见3.4 拥有某个域的组间最大值的行。
对每篇文章,得到对应于存储最大价格的行。
这可以很容易用一个临时表做到:

如果你不使用一个TEMPORARY表,你也必须锁定“tmp”表。

“它能一个单个查询做到吗?”  

是的,但是只有使用我称之为“MAX-CONCAT诡计”的一个相当低效的诡计:

最后例子当然能通过在客户程序中分割连结的列使它更有效一点。

3.5 使用外键

不需要外键联结2个表。

MySQL唯一不做的事情是CHECK以保证你使用的键确实在你正在引用表中存在,并且它不自动从有一个外键定义的表中删除行。如果你象平常那样使用你的键值,它将工作得很好!

顶(1)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论