热搜:NVER node 开发 php

请教一些SQL的查询知识

2024-09-14 15:00:01
请教一些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
这样的话 你在使用的过程中就会减少很多的查询量
从时间复杂度上来说 可以减去一个次方

有本书不错,《数据库原理及应用教程》,里头有数据库操作的详细讲解。

找一些开源的项目也不错