文章目录
1.mysql中的limit与oracle中的相关实现
mysql中的limit:
limit:用于限制select语句返回的记录数;
(以下摘自参考[1])
Limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
例:
//初始记录行的偏移量是 0(而不是 1):
mysql> SELECT * FROM table LIMIT 5,10; //检索记录行6-15
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last
//如果只给定一个参数,它表示返回最大的记录行数目。换句话说,LIMIT n 等价于 LIMIT 0,n:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行。
oracle中实现limit:
以下摘自参考[2]
选择表中的某一行记录:
(理解:rownum是oracle系统顺序分配为从查询返回的行的编号)
select * from (select rownum a,t.* from testtab t) where a=2;
不能为:
select * from (select rownum,t.* from testtab t) where rownum=2;
//或
select * from testtab where rownum=2;
返回多行记录:
select * from testtab where rownum<=10;
返回某段记录:(如取记录表中4-10行)
select * from (select rownum no,testtab.* from testtab where rownum<=10) where no>=4;
返回有条件且经过排序的某段记录:
select rownum num1,tt.* from
(select rownum num,t.* from
(select EcodeInfo.* from EcodeInfo
where a=1
order by ecode desc)
t) tt
where num>19 and rownum<20>
因为oracle是先提取记录再排序的,而oracle的rownum是在提取记录就已经生成,它先于排序操作,所以必须使用子查询先排序。
不能为:
select * from tsettab where rownum>10;
返回最后一行记录:
select * from (select rownum a,t.* from testtab t) where a=(select count(*) from testtab);
返回最后N行记录:
select * from (select rownum a,t.* from testtab t) where a=(select count(*)-N from testtab);
select * from adminrole where rownum<=4 minus select * from adminrole where rownum<2> select * from (select rownum row_id ,b.* from (select a.* from sorttable a order by sortid)b) where row_id between 5 and 9;
总而言之,还是非常麻烦的。啊啊啊!!!
参考:
[1]https://www.cnblogs.com/acm-bingzi/p/msqlLimit.html
[2]https://blog.csdn.net/dyzhen/article/details/44803171
2.oracle中的distinct
select distinct name,sex
from t_stu
上述语句是对name和sex同时进行distinct;即:只有name和sex同时相同时,才会被认为是重复,而剔除。
3. NVL函数
语法:
NVL(eExpression1, eExpression2)
返回值:
如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。
使用场景:
当取了一列值为空,但下一步可能需要利用这一列进行计算时。
4.replace()函数
语法:
REPLACE(char, search_string, replacement_string )
参数:
char : 等待替换的字符串
search_string : 搜索需要替换的字符串
replacement_string : 替换字符串
如果没有指定replacement_string 变量的值,那么当发现search_string 变量的值时,就将其删除
栗子:
select first_name from stu
-- 查询结果:李一
-- 李四
-- 王五
select replace(first_name,'李','lee') from stu
-- 查询结果:lee一
-- lee四
-- 王五
5.wm_concat()函数
语法:
wm_concat(列名)
栗子:
参考:https://www.cnblogs.com/qianyuliang/p/6649983.html
表t:
u_id | good |
---|---|
1 | 菠萝蜜 |
1 | 菠萝 |
2 | 草莓 |
1 | 芒果 |
2 | 西瓜 |
使用wm_concat():
select u_id,wm_concat(good) good_sum
from t
group by u_id
结果:
u_id | good |
---|---|
1 | 菠萝蜜,菠萝,芒果 |
2 | 草莓,西瓜 |
6.trim,ltrim,rtrim函数
以下摘自:https://www.cnblogs.com/lanzi/archive/2013/01/14/2859666.html
用法一:
语法:
trim(某字段or字符串)
栗子:
--TRIM去除指定字符的前后空格
SQL> SELECT TRIM(' dd df ') FROM dual;
TRIM('DDDF')
------------
dd df
--LTRIM去除指定字符的前面空格
SQL> SELECT LTRIM(' dd df ') FROM dual;
LTRIM('DDDF')
-------------
dd df
--RTRIM去除指定字符后面后空格
SQL> SELECT RTRIM(' dd df ') FROM dual;
RTRIM('DDDF')
-------------
dd df
用法二:
语法:
TRIM(leading|trailing|both string1 FROM string2) FROM dual;
返回值:
表示字符串string2去除前面|后面|前后面(leading|trailing|both)的字符string1,默认去除方式为both
栗子:
SQL> SELECT trim(leading 'd' from 'dfssa') FROM dual;
TRIM(LEADING'D'FROM'DFSSA')
---------------------------
fssa
SQL> SELECT trim(both '1' from '123sfd111') FROM dual;
TRIM(BOTH'1'FROM'123SFD111')
----------------------------
23sfd
SQL> SELECT trim(trailing '2' from '213dsq12') FROM dual;
TRIM(TRAILING'2'FROM'213DSQ12'
------------------------------
213dsq1
注:trim去除字符只能是单个字符,如下,要去除的字符若为字符集则报错
SQL> SELECT trim(trailing '12' from '123dsq12') FROM dual;
SELECT trim(trailing '12' from '123dsq12') FROM dual
ORA-30001: 截取集仅能有一个字符
ltrim和rtrim去除字符的写法:
语法:
– 表示字符串string1去除前面与string2字符集匹配的,若无匹配则结束返回
SELECT ltrim(string1,string2) FROM dual;
– rtrim与ltrim类似,只是去除的是右边算起匹配的字符
SELECT rtrim(string1,string2) FROM dual;
栗子:
--如下,由于从右边算起,第一个字母是b没有与'main'匹配的字符,因此返回结果仍是'aaaaminb'
SQL> SELECT rtrim('aaaaminb','main') FROM dual;
RTRIM('AAAAMINB','MAIN')
------------------------
aaaaminb
--如下返回结果为空
SQL> SELECT rtrim('aaaaminb','mainb') FROM dual;
RTRIM('AAAAMINB','MAINB')
-------------------------
SQL> SELECT ltrim('ccbcminb','cb') FROM dual;
LTRIM('CCBCMINB','CB')
----------------------
minb
解释:
– 表示字符串string1去除前面与string2字符集匹配的,若无匹配则结束返回
SELECT ltrim(string1,string2) FROM dual;
如:SELECT ltrim(‘ccbcminb’,‘cb’) FROM dual;
即,从左开始匹配string2:“cb”中的字符;如果匹配成功则删除;这里,‘c’匹配成功,删除c;
然后继续向右匹配;直至第一个匹配不成功的,过程结束。
说这么多,其实用的最多的还是去除空格的用法吧。=。=