Oracle⼦字符串去重,Oracle数据库(⼀)准备知识和SQL语句
基础
***准备知识
1、Oracle的卸载
oracle安装完成后,所有服务设置为⼿动,只启动实例服务和监听服务即可
sqlplus密码不回显
2、sqlplus命令总结
3、scott⽤户表结构
dept部门表、emp员⼯表、salgrade⼯资等级表、bonus⼯资条表
4、Oracle数据库、实例、表空间、⽤户、数据⽂件和数据表之间的关系
oracle 数据库和其他数据库不⼀样的是 oracle 的表和其他的数据库对象都是存在⽤户下的;⼀、SQL基本分类
1 DDL批量更新sql语句
命令:CREATE、ALTER 、DROP
修改表结构
ALTER TABLE MODIFY (column definition);
ADD (column definition);
DROP COLUMN column;
查看表结构
DESC ;
给表⾥的字段加上约束条件
ALTER TABLE 表名 ADD CONSTRAINT PRIMARY KEY (字段名);
ALTER TABLE 表名 ADD CONSTRAINT UNIQUE (字段名);
改表名
alter table persons2 rename to personone;
改列名
alter table persons rename COLUMN name to pname;
2 DQL
命令:SELECT…FROM…WHERE…
distinct是对⾏去重,不是对列去重
select可以输出常量,数字原样输出,字符串加单引号,可以⽤ || 拼接
3 DML
命令:INSERT、UPDATE、DELETE
-
-oracle数据库批量insert
insert all into persons2 values(1,'haha',23)
into persons2 values(2,'haha',23)
into persons2 values(3,'haha',23)
into persons2 values(4,'haha',23)
into persons2 values(5,'haha',23)
select 1 from dual;
4 DCL
命令:GRANT、REVOKE、COMMIT、ROLLBACK
授予对象权限
GRANT SELECT,UPDATE ON order_master
TO MARTIN;
取消对象权限
REVOKE SELECT,UPDATE ON order_master
FROM MARTIN;
事务相关
UPDATE xxx;
SAVEPOINT mark1;
DELETE FROM xxx;
SAVEPOINT mark2;
ROLLBACK TO SAVEPOINT mark1;
COMMIT;
⼆、where | group by | order by | having等关键词的使⽤
--执⾏顺序
select from where group by having order by
1、关于聚合函数和 group by
查询列使⽤聚合函数,如果没有使⽤别名,⽤原列名进⾏group by 不会报错
使⽤聚合函数的列如果使⽤别名,且group by 后⾯跟别名则会报错
select中有聚合函数但是后⾯没有group by,则select⼦句中不能再出现其他的字段使⽤了group by后select⼦句中只能出现聚合函数和分组字段
聚合函数嵌套之后,select⼦句中只能嵌套的聚合函数,不能包含其他的字段
2、伪列 rowid 和 rownum(伪表dual)
rownum(⾏号)
⾏号是⾃动⽣成的,但是⼀旦select出来就是临时表的⼀个列了,是固定的值rownum 只能⽤⼩于
⾏号的应⽤:查询第⼀⾏;查询第n到m⾏(实现分页操作),具体代码的形式如下
rowid
数据⾏唯⼀的物理地址的编号(案例:数据去重并保留最早的数据)
3、关于限定查询 where
select 中定义的别名在 where 中不能使⽤
not in 和 null 不能⼀起使⽤
is null 和 is not null
null 做计算结果为 null
多条件⽤ and 和 or 连接的时候每个条件⽤()分割
where不许使⽤聚合函数(统计函数),这也是他和 having 不同的地⽅
4、关于 order by
最后执⾏,可以使⽤select中定义的别名
order by 后⾯可以跟多个字段,实现按多字段的排序
5、关于执⾏顺序
from > where > group by > having > select > order by
三、多表关联查询与⼦查询
###准备
多表查询产⽣笛卡尔积,查询后的⾏数是各表的⾏数相乘;
使⽤连接条件就是为了去除⽆⽤的笛卡尔积;
1、表连接
(1)⾃连接:FROM  e    ,  e1  WHERE  e.id    =    e1.id
(2)外连接:
左外连接:FROM e JOIN d ON e.id = d.id(+)
右外连接:FROM e JOIN d ON e.id(+) = d.id
全外连接(SQL99⾥的语法):Afull outer join B on 条件
外连接的另⼀种写法:
ame,e.deptno,d.dname from emp e,dept d where e.deptno = d.deptno;
(3)说明:
使⽤连接时:(+)是 oracle 的独有写法,⼀般是 (left)right join on
使⽤连接是为了消除⽆效的笛卡尔积
要有关联字段才能实现多表查询
关联字段不局限于等于的连接
超过2个表,加⼀个表加⼀个连接条件
可以关联⾃⾝查询
多表查询的关键在于确定要查哪些表和表之间的关联条件是什么
sql1999多表查询语法,如下:
2、⼦查询(单⾏|多⾏)
from⼦句中使⽤⼦查询:⼦查询的结果是多⾏多列,看成⼀个临时表作为数据源
where⼦句中使⽤⼦查询:⼦查询的结果可以是单⾏单列,多⾏单列(in | not in)或者单⾏多列,单⾏多列的情况⽐较少having⼦句中使⽤⼦查询:当使⽤了聚合函数后才会使⽤
select⼦句中的⼦查询⼀般不使⽤
关于确定数据范围的 in all(⽐所有数据⼤)any(⽐任意⼀个⼤)
⼦查询的效率⾼于多表查询,尽量少⽤多表查询
3、结果集的交并差
并集
union(去重)      union all(不去重)
交集
intersect
差集
minus
可以不断连接查询结果,前提是要保证列字段相同
四、常⽤函数
1 单⾏函数:字符|数值|⽇期|转换|通⽤
字符串函数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。