日期:2014-05-17  浏览次数:20623 次

请教一些SQL的查询知识
大家好,本人了解一些基本的SQL知识,对SQL查询也了解一点点,有点问题一直学不会(主要是针对SQL查询),请大家指点一下。

己了解的基本知识如下:
SELECT、FROM、WHERE、GROUP BY、ORDER BY、LIMIT(部分聚合函数、非聚合函数。
联合查询、连接查询基本了解(union、union all、join、left join、right join等等)。
对SQL的执行顺序有一点了解。

最困惑的问题如下:
对一些比较复杂的查询无从下手。在网上也浏览了一些,比如说化繁为简,复杂的SQL都是由简单的SQL堆叠而成,虽然听起来好像是这个道理,可自去想去写时又无从下手。

请问我该如何去突破呢,有没有相关的贴子OR文档OR书籍,请大家发一下。谢谢。

------解决方案--------------------
连接查询:由于你按数据间的关系,把数据按相关性的程度分成了多个表。所以在需要取得的数据分布在二个及以上的表中时,就需要将先挂的表连接成一个大表

GROUP: 分组,当你需要考察同类数据的数理特征时,就需要分组(计数、求和、平均数...)
------解决方案--------------------
看手册是最好的

@:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

if:
http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html


引用:
那些基本的很好理解,只是时间问题,许多复杂的只能在请教老鸟的过程中慢慢积累。

比如:

insert into image_tb (images,link) 
select CONCAT(COALESCE((SELECT MAX(ID) + 1 FROM image_tb),1), '.jpeg'),'".$link."' 
from image_tb

这个已经搞明白了


再比如

SELECT * from
(SELECT @rn:=if(@pv=source, @rn+1, 1) as rId,
'a' t_name,id,title,@pv:=source,description,date,fullindex 
FROM table1 a1
JOIN (SELECT @pv:=0, @rId:=0)tmp
WHERE MATCH (fullindex) AGAINST ('+bool' IN BOOLEAN MODE)
ORDER BY source, date)a
WHERE a.rId <=5;

为什么会有 @ if,到现在还没搞懂。