今天在plsql中使用with时候用了union。sql如下:
with a as (select to_date('2014-01-02', 'yyyy-mm-dd') startDate, 2 v_num from dual union select to_date('2014-01-06', 'yyyy-mm-dd') startDate, 1 v_num from dual union select to_date('2014-01-06', 'yyyy-mm-dd') startDate, 2 v_num from dual union select to_date('2014-01-06', 'yyyy-mm-dd') startDate, 1 v_num from dual union select to_date('2014-01-06', 'yyyy-mm-dd') startDate, 2 v_num from dual) select count(1),startDate from a group by startDate
结果如下:
看到这个结果很惊讶,而是使用
select * from a order by startDate,v_num
看了下,结果为:
一开始还以为是with过滤掉了重复值,后来想到自己用错了,如果先保留重复值,不能使用union,必须使用union all.如下:
with a as (select to_date('2014-01-02', 'yyyy-mm-dd') startDate, 2 v_num from dual union all select to_date('2014-01-06', 'yyyy-mm-dd') startDate, 1 v_num from dual union all select to_date('2014-01-06', 'yyyy-mm-dd') startDate, 2 v_num from dual union all select to_date('2014-01-06', 'yyyy-mm-dd') startDate, 1 v_num from dual union all select to_date('2014-01-06', 'yyyy-mm-dd') startDate, 2 v_num from dual) select * from a order by startDate,v_num
结果为:
有些知识很久不用很容易忘记,特此记录。
全文完。
相关推荐
在这个例子中,WITH子句定义了一个名为dept_hierarchy的公共子查询,它首先选择了所有顶级部门(fparent IS NULL),然后通过UNION ALL与自身连接,将所有子部门添加进来,直到遍历完整个部门树。 总结来说,Oracle...
全外连接在比较两个数据集并显示所有可能的数据时非常有用,但Oracle数据库不直接支持全外连接,需要通过UNION ALL或自连接来模拟。 模拟全外连接的示例: ```sql SELECT columns FROM (table1 LEFT OUTER JOIN ...
- 注意点: Oracle使用 `START WITH` 和 `CONNECT BY` 进行层次查询,而DB2使用 `WITH RECURSIVE` 子句。 #### 9. 打印输出信息 - **Oracle** 和 **DB2** 都支持打印输出信息。 - Oracle示例: ```sql DBMS_...
- 尽量避免在`where`子句中使用函数,这可能会导致索引失效。 - 示例: ```sql -- 错误示例 select * from tab1 where lower(col1) = 'value'; -- 正确示例 select * from tab1 where col1 = 'VALUE'; ``` #...
UNION ALL SELECT d.user_name, d.dep_name, d.report_name, d.age FROM t_dept_hp d JOIN dept_hp p ON d.report_name = p.user_name ) SELECT * FROM dept_hp; ``` 这将查询出 allen 的整个组织结构,包括所有...
- 在SQL SERVER中,递归查询通常使用`WITH`子句创建公共表表达式(CTE),结合`UNION ALL`和`JOIN`来实现。如示例所示,`cte_root`或`cte_child`定义递归起点,`connect by ID=prior ParentID`表示递归路径。 - ...
随着MYSQL版本的更新,尤其是MYSQL 8.0之后,开始支持公用表表达式(CTE)和WITH RECURSIVE语法,这使得在MYSQL中进行递归查询变得简单而直接。 在上述三种数据库系统中实现递归查询的示例代码通常如下: ORACLE中...
这里,`WITH`子句`a`定义了一个临时视图,用于筛选出部门名称包含"A"的所有部门编号,然后在主查询中使用这个结果来获取符合条件的员工信息。 #### 四、WITH子句的应用场景 **4.1 测试SQL语句** 当需要测试特定的...
UNION ALL SELECT d.id, d.parent_id, d.name FROM department d JOIN tree t ON d.parent_id = t.id ) SELECT * FROM tree; ``` 这里的`:root_id`是树的根节点ID。 三、层次查询 (CONNECT BY) Oracle特有的...
- 示例:`WITH RECURSIVE cte (id, parent_id, level) AS (SELECT id, parent_id, 1 FROM table WHERE parent_id IS NULL UNION ALL SELECT t.id, t.parent_id, cte.level + 1 FROM table t JOIN cte ON t.parent_id...
Oracle 11GR2的递归WITH子查询是一种强大的工具,它允许你在SQL查询中创建递归关系,处理层级数据,比如组织结构、家族树或依赖关系等。WITH子查询,也称为公共表表达式(Common Table Expression,简称CTE),自SQL...
在学习Oracle 11g的过程中,了解和掌握集合操作以及序列的使用是非常关键的知识点。 集合操作在数据库查询中扮演着重要的角色。Oracle 11g支持四种基本的集合操作:UNION、UNION ALL、INTERSECT和MINUS。这些操作...
- `UNION ALL`:返回两个查询结果集的并集,不自动去重。 - `INTERSECT`:返回两个查询结果集的交集。 - `MINUS`:返回第一个查询结果集中不在第二个查询结果集中的行。 6. **SQL函数**: - `DECODE()`:条件...
关于“不符合统计的统计方法”,这可能是指在Oracle SQL中使用非标准的聚合函数或者自定义统计计算。比如,可能需要计算某个列的中位数,而Oracle的标准函数并不提供这个功能。这时,我们需要自定义SQL语句或者创建...
3. **表达式的使用**:可以在SQL语句中使用数学运算符来处理数字和日期字段。 4. **NULL值处理**:NULL值表示未知或缺失的数据。 5. **别名**:使用AS关键字为表或列指定别名,以提高查询的可读性。 6. **SPPOOL命令...
- **原理**:索引能够加速数据的查找过程,尤其是在WHERE子句和ORDER BY子句中使用的列。 - **实践**:例如,在查询`SELECT * FROM table WHERE column = value ORDER BY another_column;`时,如果在`column`和`...
首先,递归查询在Oracle中主要依赖于`START WITH`和`CONNECT BY`子句。`START WITH`指定查询的起始节点,而`CONNECT BY`定义了如何在层级结构中移动,通常与`PRIOR`关键字一起使用,表明当前行的父节点是前一行的...
- 使用`UNION ALL`结合`JOIN`操作实现递归。 - 示例略。 - **存储过程法**: - 创建存储过程,使用循环结构和条件判断来实现递归。 - 示例略。 **结论**: 虽然MySQL没有提供类似于Oracle的内置递归查询功能,但...
- **UNION和UNION ALL**:合并多个查询结果。 #### 第七章 子查询 - **简单子查询**:使用IN、=、等操作符的子查询。 - **比较子查询**:使用>、<等操作符的子查询。 - **EXISTS子查询**:使用EXISTS关键字进行...