Maison > Article > développement back-end > 请教一些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书籍,请大家发一下。谢谢。
怎么有点本末倒置的感觉,难道你的数据不是按便于查询组织的的么?
说的简单点可以这样理解:
如果是单表查询,写起来没问题。
如果是复杂点的数个表查询的SQL有时就无从写起。
其实我也知道无非就是联合查询、连接查询、子查询,然后运用相关SQL聚合函数、非聚合函数、GROUP BY等。可对于复杂的业务逻辑我不太明白何时用GROUP BY,何时运用连接查询。
连接查询:由于你按数据间的关系,把数据按相关性的程度分成了多个表。所以在需要取得的数据分布在二个及以上的表中时,就需要将先挂的表连接成一个大表
GROUP: 分组,当你需要考察同类数据的数理特征时,就需要分组(计数、求和、平均数...)
好像有点点觉悟了。谢谢版主。
其它的朋友们也请多多指点。
没什么捷径,看文档多练。
虽然没有系统的去看书,可也常常上论坛潜下水,肿么水平提升得这么慢呢。难道我的IQ有点不肿么样。
那些基本的很好理解,只是时间问题,许多复杂的只能在请教老鸟的过程中慢慢积累。
比如:
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
为什么会有 @ if,到现在还没搞懂。
看手册是最好的
@:
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
为什么会有 @ if,到现在还没搞懂。
多多练习项目,当你做项目的时候碰到需求你就会有深刻体会...
看手册是最好的
@:
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
英文的手册,慢慢看。
遇到基础问题还是多学会找资料看吧。
一般使用数据管理来处理问题,查询太多的话,会造成服务器相应过慢的。
比如
管理员表 id,用户名,密码,组ID
管理组表 id,组名,权限
...我一般要建个索引表
索引 管理员ID,管理组id
这样的话 你在使用的过程中就会减少很多的查询量
从时间复杂度上来说 可以减去一个次方
有本书不错,《数据库原理及应用教程》,里头有数据库操作的详细讲解。
找一些开源的项目也不错