![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
sql
grace_cxj
这个作者很懒,什么都没留下…
展开
-
Oracle with as临时表 去除重复代码(解决查询结果需要复用的问题)
需求 在一个大任务中,有个中间查询结果(这个结果需要连表查询,而且条件多,sql语句长),需要被多次使用,不想将这大段的sql重复写5、6遍,可读性也很差。 解决方法 用with tmp_sql as (…需要重复使用的sql…)的方法,将这句话放在大查询的前面,相当于声明一个临时表叫tmp_sql,之后要用这个查询结果时,就直接select * from tmp_sql 就行,代码易读性会好很多。 ...原创 2021-04-13 16:30:41 · 494 阅读 · 0 评论 -
Oracle cross join交叉相乘生成有m*n条记录的表(排列组合、穷举、生成课程成绩)
需求 A表为学生表,存了所有学生的编号和姓名信息(如张三、李四),B表为课程表(如语文、数学、英语),现在需要生成一张成绩表,即每位学生的每门课程为一条记录。如果有2名学生,3门课程,这张成绩表里需要有6条记录,如何生成这样一张表呢? 解决方法 使用 类似笛卡尔乘积的连接方法cross join。 (select 姓名 from A) cross join (select 课程名 from B) ...原创 2021-04-13 16:46:46 · 296 阅读 · 0 评论 -
Oracle union all和union(直接合并与去重合并)
A中有:苹果????、水蜜桃???? B中有:苹果????、菠萝???? union all直接合并 (select * from A) union all (select * from B) 得到:苹果????、水蜜桃????、苹果????、菠萝???? union去重合并 (select * from A) union (select * from B) 得到:苹果????、水蜜桃????、菠萝???? ...原创 2021-04-13 16:58:33 · 683 阅读 · 0 评论 -
Oracle删除Date日期后的时分秒
问题 想将1997/1/8 10:30:27变为1997/1/8。 不想使用to_char再to_date这样两次转换。 解决方案 select trunc(birthday) from tableName; trunc一下即可。原创 2021-04-15 17:29:42 · 6622 阅读 · 2 评论 -
Oracle分组后再组内排序编号
oracle分组后再组内编号 需求 一张表中,每位员工有多条记录,需要将每位员工的记录按时间顺序排列并独立编号(每个人都从1开始重新编号) 解决方法 select row_number() over(partition by user_id order by create_date asc) rn, t.user_id, t.create_date from tableA t; 这样rn列就是每个人从1开始编好号的一列。 ...原创 2021-04-13 15:44:14 · 1916 阅读 · 0 评论 -
Oracle自动生成ID,自动编号,自增补零填充
问题 在pl/sql中,需将某个查询结果插入到一个新表tableNameA中时,如何通过sql自动生成ID列,且形如:ID0001,ID0002,ID0003……。 解决方案 insert into tableNameA(id, …) (select 'ID'||lpad(rownum,4,0), … from tableName where …) ...原创 2021-04-15 17:22:05 · 3459 阅读 · 0 评论