数据库相关内容学习

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;
然后继续向右匹配;直至第一个匹配不成功的,过程结束。

说这么多,其实用的最多的还是去除空格的用法吧。=。=

猜你喜欢

转载自blog.csdn.net/shelly_Chestnut/article/details/83109352
今日推荐