‘壹’ oracle基础(第二节)
进行筛选的基本运算符号:
--查询月薪高于2000的员工的姓名和其月薪
--查询员工SMITH的员工信息
--关键字,表名,列名:大小写是不敏感(随意写)
--数据:大小写是敏感(不能随意写)
--查询不在20号部门工作的员工信息
--查询在20号部门工作并且月薪高于2000的员工信息
--查询职位是MANAGER或者月薪不低于3000的员工信息
--查询在10号部门工作月薪低于2000并且职位不是CLERK的员工信息
--查询在10号部门工作或(20号部门工作并且月薪不低于1500)的员工信息
--and的优先级要高于or 如果两者混合使用,需要注意优先级的问题
--加括号解决优先级问题
--sql注入:利用了and的优先级高于or完成无密码进行登录
--SQL片段:通过在密码框中输入下方的SQL片段,更改了原有SQL语句的逻辑 ' or lname = 'admin --or前的逻辑:账号随意,密码为空 (登录失败) --or后的逻辑:用户名是admin的账号 (调取了admin的信息)
--1.查询10号部门职位是MANAGER的员工信息
--2.查询月薪低于2000或月薪高于3000的员工信息
--3.查询员工编号是7902的员工的所有下属的员工信息
--4.查询职位是CLERK或SALESMAN,并且月薪不低于1000的员工信息
--5.查询月收入不低于2500的员工信息
--6.查询30号部门年收入低于10000的员工信息
--7.查询员工SCOTT的月薪,奖金和月收入
--8.查询在1982年之前入职的员工信息(选做)
--相当于 >= A and <= B
--查询月薪在1000-2000区间的员工信息
--82年入职的员工
--like '特定字符'
-- 特定字符:由转义字符和搜索文本组成
-- 转义字符: %: 0-n个字符(任意长度的任意字符)
-- : 1个字符(1个长度的任意字符)
-- 比如 姓李 特定字符的写法 '李%'
-- 第二个字符是哈 特定字符的写法 ' 哈%'
--查询员工名字首字母是S的员工
--查询名字中倒数第2个字符是T的员工
--查询名字中包含字母T的员工
--查询名字中包含两个字母T的员工
--查询有两个连续的T
--查询名字中有%字符的员工
--声明标识字符
--相当于 = A or = B or = C...
--查询在10号部门或20号部门工作的员工
--查询在10号部门工作或月薪高于1200的员工
-- = null 无法筛选任何数据
-- is null 筛选null值
-- not between A and B 不在A与B区间内
-- not like '%A%' 名字里面没有A
-- not in(A,B,C) 不是A,B,C其中之一
-- is not null 不为null
--查询月薪不在1000-2000区间内并且名字中不包含字母T的员工信息
--order by 列名 或 列别名 或 表达式 或 列序号
--ASC 升序 由小到大
--DESC 降序 由大到小
--不写 默认是升序
--## 书写顺序:select...from...where...order by...
--## 执行顺序:from...where...select...order by...
--查询所有员工的信息,按照月薪的升序排序
--再按照月薪的降序排序
--利用表达式排序
--利用列别名进行排序
--利用列序号进行排序(第4列)
--排序的原则:
--1.数值按照数值的大小
--2.文本按照字典顺序
--3.日期按照未来的大
--#####order by 可以修饰多个列
-- ## order by A, B 先A的升序排序,如果A相同,再按B的升序排序
-- ## order by A desc, B desc 先A的降序排序,如果A相同,再按B的降序排序
--查询月薪高于1000的员工,按照部门的升序排序,再按照入职日期降序排序
--推荐在order by中使用列名或列别名
--1.查询名字中包含字母T,并且月薪在1500-3000之间的员工姓名和月薪
--2.查询公司的BOSS信息(mgr值为null的人)
--3.查询员工姓名,月薪,奖金,年收入,按照年收入降序进行排序显示
--4.查询职位中包含MAN并且有奖金收入(不是null不是0)的员工信息
--5.查询在在1981年期间入职的员工信息,并按照月薪降序排序
--6.查询员工信息,并按照职位升序,部门升序进行排序显示
--7.查询不在10号或20号部门工作,月薪低于1500的员工信息
--8.查询所有的职位名称,去掉重复后按照名称的升序排序显示
--9.查询员工SCOTT和ADAMS的员工信息
--10.查询年收入高于45000的员工信息,并按照年收入降序排序显示
‘贰’ Oracle的 函数 或 存储过程 中怎么 转义
额……比方说……像下面这个:create or replace function fun_get_bookinfo(key_words varchar2(10)) returns table(……)return table (select * from v_book_info where bookname like '/_%' key_words '/');like后面与字符串匹配,但是要用到传进来的参数直接引号括起来不就不能传参了么,是应该上面那样写么……
‘叁’ oracle怎么将字符串中的转义符
在ORACLE中,单引号有两个作用: 1:字符串是由单引号引用 2:转义。 单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解1.从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。
‘肆’ oracle 怎么转义
在字段里查找'%',涉及到Oracle的转义字符,现总结如下:
SQL> select * from test;
TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
A&B
已选择9行。
其中包含特殊的字符分别为%,_,&,有可能包含这些字符的数据含有错误,或者需要查找包含这些字符的数据。
SQL> select * from test where test like 'sdd _%' escape ' ';
TEST
--------------------
sdd_kk
转义字符为' ';
SQL> select * from test where test like 'sdd\_%' escape '\';
TEST
--------------------
sdd_kk
转义字符为'\';
SQL> select * from test where test like 'sdd=_%' escape '=';
TEST
--------------------
sdd_kk
转义字符为'=';
SQL> select * from test where test like 'sdd/_%' escape '/';
TEST
--------------------
sdd_kk
转义字符为'/';
SQL> select * from test where test like 'sddd_%' escape 'd';
未选定行
转义字符为d,没有实现转义功能;
SQL> select * from test where test like '%\_%' escape '\';
TEST
--------------------
sdd_kk
查找包含所有'_'的字段。
同理:通过这种方法查找含有'%'的所有字段:
SQL> select * from test where test like '%\%%' escape '\';
TEST
--------------------
dffa%asfs
1%2345
1%54321
2%54321
%%54321
但是'&'不能通过转义字符查找:
SQL> select * from test where test like '%\&%' escape'\';
select * from test where test like '%\&%' escape'\'
*
第 1 行出现错误:
ORA-01424: 转义符之后字符缺失或非法
可以通过另外的方式进行转义:
SQL> select ascii('&') from al;
ASCII('&')
----------
38
SQL> select * from test where test like '%'||chr(38)||'%';
TEST
--------------------
A&B
'''的转义:
SQL> select * from test where test like '%''%';
TEST
--------------------
d'd
特殊符号的数据的插入
SQL> insert into test values('test&test');
输入 test 的值: test
原值 1: insert into test values('test&test')
新值 1: insert into test values('testtest') -虽然插入,但是数据不对。
已创建 1 行。
SQL> show define
define "&" (hex 26)
SQL> set define off
SQL> show define
define OFF
SQL> insert into test values('test&test');
已创建 1 行。
SQL> show escape
escape OFF
SQL> set escape on
SQL> show escape
escape "\" (hex 5c)
SQL> insert into test values('test\&test');
已创建 1 行。
SQL> select * from test;
TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
A&B
testtest
TEST
--------------------
test&test
test&test
已选择13行。
SQL> commit;
提交完成。
SQL> select * from test;
TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
A&B
testtest
TEST
--------------------
test&test
test&test
已选择13行。
SQL> insert into test values('test\%test');
已创建 1 行。
SQL> insert into test values('test\_test');
已创建 1 行。
SQL> insert into test values('test\'test);
insert into test values('test'test)
*
第 1 行出现错误:
ORA-00917: 缺失逗号
SQL> insert into test values('test''test');
已创建 1 行。
SQL> select * from test;
TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
A&B
testtest
TEST
--------------------
test&test
test&test
test%test
test_test
test'test
已选择16行。
‘伍’ orcale中特殊字符怎么转义
在字段里查找'%',涉及到Oracle的转义字符,现总结如下: SQL> select * from test; TEST -------------------- sdd_kk d'd dfsfsa dffa%asfs 12345 1%2345 1%54321 2%54321 %%54321 A&B 已选择9行。 其中包含特殊的字符分别为%,_,&
‘陆’ 晕了晕了,Oracle转义字符
没有转义字符,如果有,就不用这么麻烦了。
四个单引号,最后的字符串中是一个单引号。
前面的那个三个单引号,是因为前面file前面还有一个单引号。
这个就死记硬背吧,用多了,就记个差不多了,用的时候再试试就出来了。
‘柒’ Oracle中的单引号怎么转义
1、在转义特殊字符的时候通常使用的就是单引号。但这种转义方式很不直观。
‘捌’ oracle sqldr导入文件中有特殊字符与分割符一样怎么处理
咨询记录 · 回答于2021-12-01
‘玖’ oracla特殊字符转义的方法汇总
1、”&“ 转义
这个是Oracle里面用来识别自定义变量的设置,现在我们在SQL*PLUS下将其关闭:
SQL Set define OFF;
然后再次执行导入脚本,OK!问题搞定。
注意:如果是在TOAD中执行,建议在每一个要导入的脚本第一行加上前面那句关闭define的话,否则当你导入第二个含有特殊字符的脚本的时候,又会出错。
如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了。直到你重新设置define ON为止。
·方法二:在SQL语句中将'&'替换成chr(38),因为chr(38)是‘&’的ASCII码
SQL Select 'Tom' || chr(38) || 'Jerry' from al;
·方法三:分拆原来的字符串
SQL Select 'Tom' || '&' || 'Jerry' from al;
我们可以看到,方法一最为简便,而且效率也最高。方法二因为有一个调用函数的过程,所以性能稍差。方法三需要两次连接字符串,效率最差!
2、” ' “ 转义
·方法一:使用转义字符
SQL Select 'test' || '''' from al;
第三个'才是我们真正的内容
·方法二:同样是使用转义字符,只不过方式不同而已
SQL Select 'test ''' from al;
注意:这里的第二个,第三个'就是我们上面方法一中提到的转义符和真正的内容
‘拾’ oracle 字符串拆分转义
这样不就行了吗
创建表
createtabletest
(idvarchar2(10),
namevarchar2(10))
insertintotestvalues('wq','王强');
insertintotestvalues('lm','李明');
insertintotestvalues('xh','小红');
创建函数
createorreplacefunctionf_str
(v_strvarchar2)
returnvarchar2
is
resultvarchar2(100);
begin
selectwm_concat(name)intoresultfromtest
whereidin
(selectcfrom
(withtestas(selectv_strcfromal)
selectsubstr(t.ca,instr(t.ca,',',1,c.lv)+1,instr(t.ca,',',1,c.lv+1)-(instr(t.ca,',',1,c.lv)+1))ASc
from(select','||c||','ASca,length(c||',')-nvl(length(REPLACE(c,',')),0)AScntFROMtest)t,
(<=100)cwherec.lv<=t.cnt));
returnresult;
end;