Oracle over函数的简单使用

OVER() 在使用时一般会配合其他函数一起使用
1.row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号
2.rank() OVER (PARTITION BY COL1 ORDER BY COL2)
跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
3.dense_rank() OVER (PARTITION BY COL1 ORDER BY COL2)
连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的
4.lag(arg1,arg2,arg3)
arg1是从其他行返回的表达式;arg2是希望检索的当前行分区的偏移量;arg3是在arg2表示的数目超出了分组的范围时返回的值.
5.FIRST_VALUE(arg) OVER (PARTITION BY COL1 ORDER BY COL2)
返回组中数据窗口的第一个值,可以不进行order by
6.LAST_VALUE(arg) OVER (PARTITION BY COL1 ORDER BY COL2)
返回组中数据窗口的最后一个值,可以不进行order by

现在拿row_number举例: read more

Oracle在不连表的情况下进行集合操作

--前提是两个查询的列的数量和数据类型必须完全相同

--最常用的,拼接结果集(取并集)
--去重拼接
SELECT ID FROM TABLE_A
UNION
SELECT ID FROM TABLE_B;

--不去重拼接
SELECT ID FROM TABLE_A
UNION ALL
SELECT ID FROM TABLE_B;

--取交集
SELECT ID FROM TABLE_A
INTERSECT
SELECT ID FROM TABLE_B;

--去差集
--先查第一条SQL结果集,看是否在第二条中,如果在则移除;
--再查第二条,如果在第一没有出现过,则移除
SELECT ID FROM TABLE_A
MINUS
SELECT ID FROM TABLE_B;

Oracle中的trunc函数

trunc()在操作日期时,相当于把时间格式化为零时零分零秒
select sysdate,trunc(sysdate) from dual;
通过执行以上脚本可以发现,被trunc处理过的只有日期,没有时间
trunc传参的用法:
select trunc(sysdate-1) from dual t;–昨天
select trunc(sysdate+1) from dual t;–明天

select trunc(sysdate, ‘yy’) from dual;–当年第一天
select trunc(sysdate, ‘year’) from dual;–当年第一天
select trunc(sysdate, ‘yyyy’) from dual;–当年第一天 read more

Windows下不知道MySQL密码情况下重新设置密码

1.打开任务管理器,关掉mysqld.exe进程

2.打开cmd,cd到 C:\Program Files\MySQL\MySQL Server 5.5\bin(默认安装目录,自定义目录类同)

3.输入mysqld -nt --skip-grant-tables(注意mysqld与-nt之间有一空格)

4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录(操作同步骤2)

5.输入mysql回车,如果成功,将出现MySQL提示符 > 。如果不成功,可能是mysql.exe没关,关了重复5步骤

6.连接权限数据库>use mysql; (>是本来就有的提示符,别忘了最后的分号) 

7.改密码:> update user set password=password("123456") where user="root"; (别忘了最后的分号) 

8.刷新权限(必须的步骤)>flush privileges; 

9.退出 > \q 

10.DOS登录:->mysql -u root -p
->123456

11.登录成功