Tag: sql

SQL查询如何从多个表中返回数据

我想知道以下几点: 如何从我的数据库中的多个表中获取数据? 有什么types的方法可以做到这一点? 什么是联合和联合,它们又是如何不同的? 我应该什么时候使用每一个与其他人相比? 我打算在我的(例如 – PHP)应用程序中使用它,但不希望针对数据库运行多个查询,在单个查询中有哪些选项需要从多个表中获取数据? 注意:我正在编写这个,因为我希望能够链接到我在PHP队列中经常遇到的许多问题上编写良好的指南,所以当我发布答案时,可以链接到更多细节。 答案涵盖以下内容: 第1部分 – 联合和联盟 第2部分 – 子查询 第3部分 – 技巧和有效的代码 第4部分 – 从子句中的子查询 第五部分 – 约翰的伎俩混合袋

什么是最有效率的/优雅的方式来parsing一个平坦的表格成一棵树?

假设您有一个存储有序树形层次的平坦表格: Id Name ParentId Order 1 'Node 1' 0 10 2 'Node 1.1' 1 10 3 'Node 2' 0 20 4 'Node 1.1.1' 2 10 5 'Node 2.1' 3 10 6 'Node 1.2' 1 20 这是一个图表,我们有[id] Name 。 根节点0是虚构的。 [ROOT] / \ [1]节点1 [3]节点2 / \ \ [2]节点1.1 [6]节点1.2 [5]节点2.1 / [4]节点1.1.1 你将使用什么简约的方法将其输出为HTML(或文本)作为正确sorting,正确缩进的树? 进一步假设你只有基本的数据结构(数组和hashmaps),没有父母/孩子引用的奇特对象,没有ORM,没有框架,只有你的两只手。 该表格表示为一个结果集,可以随机访问。 […]

在关系数据库中存储分层数据有哪些select?

良好的概述 一般来说,您正在快速读取时间(例如,嵌套集)或快速写入时间(邻接列表)之间作出决定。 通常你会得到最适合你需求的选项组合。 以下提供了一些深入阅读: 多一个嵌套间隔与邻接表比较 :我发现的邻接表,物化path,嵌套集和嵌套间隔的最佳比较 。 分级数据的模型 :幻灯片中有很好的权衡解释和示例用法 在MySQL中表示层次结构 :特别是对嵌套集的很好的概述 关系数据库系统中的分层数据 :我所见过的最全面和最有条理的链接集,但对解释的方式并不多 选项 我知道的一般特征: 邻接表 : 列:ID,ParentID 易于实施。 便宜的节点移动,插入和删除。 昂贵的查找水平(可以存储为一个计算列),祖先和后代(桥表与水平列结合可以解决),path(天堂列可以解决)。 在那些支持它们遍历的数据库中使用公用表expression式 。 嵌套集 (又名修改的预定树遍历) 由Joe Celko在许多文章和他的书中的树和层次结构在Smarties中被推广 列:左,右 便宜的水平,祖先,后代 易失性编码 – 移动,插入,删除更昂贵。 需要特定的sorting顺序(例如创build)。 因此,以不同的顺序sorting所有后代需要额外的工作。 嵌套间隔 像嵌套集,但与真正的/浮点数/小数,这样的编码是不稳定的(便宜的移动/插入/删除) 必须处理真正/浮点/小数表示问题 一个更复杂的matrix编码变体增加了祖先编码的好处,就像物化path“自由” 桥表 (又名Closure Table :关于如何使用触发器维护这种方法的一些好主意) 列:祖先,后裔 站在它描述的表格之外。 可以在一个以上的层次中包含一些节点。 廉价的祖先和后代(虽然不是以什么顺序) 对于层次结构的完整知识需要与另一个选项相结合。 平的桌子 邻接列表的修改,为每个logging添加级别和排名(例如sorting)列。 昂贵的移动和删除 廉价的祖先和后代 好用:线程讨论 – 论坛/博客评论 沿袭列 […]

PostgreSQL交叉表查询

有没有人知道如何在PostgreSQL中创build交叉表查询? 例如,我有下面的表格: Section Status Count A Active 1 A Inactive 2 B Active 4 B Inactive 5 我想查询返回以下交叉表: Section Active Inactive A 1 2 B 4 5 这可能吗?

MySQL中的ROW_NUMBER()

MySQL中有一个很好的方法来复制SQL Server函数ROW_NUMBER()吗? 例如: SELECT col1, col2, ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRow FROM Table1 然后,我可以,例如,添加一个条件来限制intRow为1,以获得每个(col1, col2)对具有最高col3的单个行。

显式与隐式SQL连接

显式与隐式内部连接有效率差异吗? 例如: SELECT * FROM table a INNER JOIN table b ON a.id = b.id; 与 SELECT a.*, b.* FROM table a, table b WHERE a.id = b.id;

PDO准备的语句是否足以防止SQL注入?

比方说,我有这样的代码: $dbh = new PDO("blahblah"); $stmt = $dbh->prepare('SELECT * FROM users where username = :username'); $stmt->execute( array(':username' => $_REQUEST['username']) ); PDO文件说: 准备报表的参数不需要引用; 司机为你处理。 这真的是我需要做的,以避免SQL注入? 这真的很简单吗? 如果它有所作为,你可以假设MySQL。 另外,我真的只对使用SQL注入准备好的语句感到好奇。 在这种情况下,我不关心XSS或其他可能的漏洞。

INNER JOIN ON与WHERE子句

为了简单起见,假定所有相关的字段都不是NULL。 你可以做: SELECT table1.this, table2.that, table2.somethingelse FROM table1, table2 WHERE table1.foreignkey = table2.primarykey AND (some other conditions) 要不然: SELECT table1.this, table2.that, table2.somethingelse FROM table1 INNER JOIN table2 ON table1.foreignkey = table2.primarykey WHERE (some other conditions) 这两个工作在MySQL的相同方式吗?

在GROUP BY中使用LIMIT来获得每个组的N个结果?

以下查询: SELECT year, id, rate FROM h WHERE year BETWEEN 2000 AND 2009 AND id IN (SELECT rid FROM table2) GROUP BY id, year ORDER BY id, rate DESC 收益率: year id rate 2006 p01 8 2003 p01 7.4 2008 p01 6.8 2001 p01 5.9 2007 p01 5.3 2009 p01 4.4 2002 p01 3.9 2004 […]

如何在MySQL中做一个完整的外部连接?

我想在MySQL中做一个完全的外连接。 这可能吗? MySQL是否支持完全外部联接?