oracle SQL

  • Post author:
  • Post category:其他



Oracle中的any、some、all用法

any

select * from admin where  password>any(123,234,345)

select * from admin where password > any(select * from admin where password=123)

输出password中任意大于123、234、345其中一个值得数据

some

some与any的效果都是一样的,大于其中一个值就可以

select * from admin where  password>some(123,234,345)

all

大于其中所有的值

select * from admin where  password>all(123,234,345)


Mysql中的any、some、all

any

select * from bjb where xh> any(select xh from bjb where xh=2)

select * from bjb where xh> some(select xh from bjb where xh=5 union select xh from bjb where xh=12);

select * from bjb where xh> all(select xh from bjb where xh=5 union select xh from bjb where xh=2)


数据库中is null、is not null

我们只能用select * from bjb where xm is null来查找空的位置,不能使用where xm =null


数据库中between  x  and  y

select * from bjb where xh between  2 and 12;        包含x和y的值

select  * from bjb where  2<=xh and xh<=12;


数据库中的in和not in

需要进行某些值得等值判断的时候可以使用in和not in

in(list)        not in(list)

select * from bjb where xh in (2,5,12);

select * from bjb where xh  not in (2,5,12);

select * from bjb where xh=2 or xh=5 or xh=12;

and和or可能出现在同一个sql语句中,此时需要注意and和or的优先级

and的优先级高于or,所以一定要将or的相关操作用()括起来 ,提高优先级


数据库中的exists

exists(子查询)        相当一个for循环

select * from bjb e where exists(select xh from bjb d where (d.xh=2  or d.xh=5) and e.xh=d.xh);


模糊查询

like

在like的语法中需要使用占位符或通配符

_        某个字符或数字仅出现一次

%        任意字符出现任意次数

select  *  from bjb  where xh  like(“p%”)

倒数第二位为h        倒数第二位为o的

escape,使用转义字符,可以自己规定转义字符

使用like的时候需要注意,like的效率极低

使用like可以参考使用索引,但是要求不能以%开头

到大文本的检索的时候,可以使用某些框架luence、solr、elastic、search


数据库中的order by

select * from bjb order by 1 asc;        默认情况相下升序(可写可不写)

select * from bjb order by 1 desc;        倒叙

order by 做的是全排序,会比较消耗系统资源,因此选择在业务不太繁忙的时候进行


数据库中的union、union all、intersect、minus

1.union  all        全集

2.union        并集(去重)

3.intersect        交集

4.minus        差集


Oracle函数

SQL函数

函数一般是在数据上执行的,它给数据的转换和处理提供了方便。只是将取出的数据进行处理,

不会改变数据库中的值

sum        求和

count(*)        求多少条记录


having语句


单行函数的分类

字符函数:

concat:字符的连接,

等同于||

可用于区分数据库

initcap:将字符串首字母大写

upper:将字符串全部转换为大写

lower:将字符串装换为小写

lpad:左边填充字符串        lapd(字段,占的长度,用什么占位)

rpad:右边填充字符串

trim:去除左右两边空格        ltrim去除左边        rtrim去除右边

instr:查找指定字符串的位置        instr(字符串,需要查找的内容)

length:返回长度

substr:截取字符串的操作

replace:替换操作

数字函数:

round:给小数进行四舍五入,可以指定小数部分的位数

trunc:截断数据,按照位数去进行截断,但是不会进行四舍五入的操作

mod:取模操作

ceil:向上取整

floor:向下取整

abs:取绝对值

sign:取正负值

pow(x,y):x的y次幂

日期函数:

mysql中

select  current_time();

select  current_date();

select  current_timestamp();

Oracle数据库中

select  sysdate  from  dual;

select   current_date  from dual;

select   localtimestamp  from  dual;        返回当前的时间戳

转换函数:

标量数据可以有类型的转换,转换分为两种,

隐式类型转换和显示类型转换

隐式类型转换可用于:

字符和数字相互转换&字符和日期相互转换

varchar2  or   char   — number

varchar2  or   char   —  data

number — varchar2

date — varchar2

尽管数据类型之间可以进行隐式转换,仍建议使用显示转换函数,以保持良好的设计风格

to_char        转化为字符串

to_number        转化为数字

to_date        转化为日期

number和date之间不可以相互转化




(14条消息) 对于输出点是时间戳的渗透测试方法(以Oracle数据库为例)_不习惯有你的博客-CSDN博客_oracle渗透测试



https://blog.csdn.net/qq_58000413/article/details/125662269



date :  to_char

select  to_char(sysdate,’YYYY-MM-dd  HH24:MI:SS’) from dual

number : to_char


单行函数嵌套

单行函数可以被嵌入到任何层

嵌套函数从最深层到最底层求值


其他函数

decode

decode(选中参数,值的匹配,匹配到执行什么条件)

case  when

case  when  条件  then  执行操作1  when  条件  then 执行操作2  end

case  when  条件  then  执行操作1   else  执行操作2  end


组函数

常用的组函数

avg()        返回某列的平均值

min()        返回某列的最小值

max()        返回某列的最大值

sum()        返回某列值得和

count()        返回某列的行数,处理的时候会跳过空值处理非空值

count一般用来获取表中的记录条数,获取条数的时候可以使用*或者某一个具体的列,甚至可以使用纯数字来代替,但是

从运行效率的角度来考虑的话,建议使用数字或者某一个具体的列而不要会用*

group by        按照某些相同的值去进行分组操作

group进行分组操作的时候,可以指定一个列或者或多个列,但是当使用了group  by 之后,选择列表中只能

包含组函数

的值或者

group by的普通字段

例子:select  sum(薪水)  from  emp  group by  部门


数据分组

出现在select列表中的字段,如果出现的位置不是在组函数中,那么必须出现在GROUP BY子句中

不能在WHERE子句中使用组函数,

不能在WHERE子句中限制组,使用Having对分组进行限制


select子句顺序


关联查询

select  table1.column1 , table1.column2…

from  table2.column1 , table2.column2…

where  table1.column1=table2.column2

在进行连接的时候可以进行等值连接也可进行非等值(between  and )连接


外连接

没有关联的数据不会显示,此时需要外连接

分类:左外连接(把左表的全部数据显示),右外连接(把右表的全部数据显示)

select  *  from table1  t1,table2  t2  where  t1.column=t2.column        等值连接

select  *  from table1  t1,table2  t2  where  t1.column=t2.column(+)        左外连接

select  *  from table1  t1,table2  t2  where  t1.column(+)=t2.column        右外连接


自连接

将一张表当成不同的表来看待,自己关联自己

select   e.ename,m.ename  from  emp e,emp  m where  e.mgr=m.empno


笛卡尔积

当关联多张表,但是不指定连接条件的时候,会进行笛卡尔积

关联后的总记录条数为m*n,一般不要使用

select  * from  emp e,dept d

92的表连接语法有什么问题???

在92语法中,多张表的连接条件在where子句中,同时where需要对表进行过滤

因此,相当于将过滤条件和连接条件揉到一起,太乱了,因此出现了99语法



版权声明:本文为qq_58000413原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。