Oracle基本使用

网友投稿 858 2022-11-23

Oracle基本使用

Oracle基本使用

创建数据库

创建 scott 数据库中的 dept 表create table dept( -- 部门编号 deptno int unsigned auto_increment primary key, -- 部门名称 dname varchar(15) , -- 部门所在位置 loc varchar(50) )engine = InnoDB;创建 scott 数据库中的 emp 表 create table emp( -- 雇员编号 empno int unsigned auto_increment primary key, -- 雇员姓名 ename varchar(15) , -- 雇员职位 job varchar(10) , -- 雇员对应的领导的编号 mgr int unsigned , -- 雇员的雇佣日期 hiredate date , -- 雇员的基本工资 sal decimal(7,2) , -- 奖金 comm decimal(7,2) , -- 所在部门 deptno int unsigned , foreign key(deptno) references dept(deptno))engine = innodb;创建数据库 scott 中的 salgrade 表,工资等级表create table salgrade( -- 工资等级 grade int unsigned , -- 此等级的最低工资 losal int unsigned , -- 此等级的最高工资 hisal int unsigned )engine=innodb;创建数据库 scott 的 bonus 表,工资表create table bonus( -- 雇员姓名 ename varchar(10), -- 雇员职位 job varchar(9), -- 雇员工资 sal decimal(7,2), -- 雇员资金 comm decimal(7,2))engine=innodb;dept表中的数据INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO dept VALUES (20,'RESEARCH','DALLAS'); INSERT INTO dept VALUES (30,'SALES','CHICAGO'); INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON'); salgrade表中的数据INSERT INTO salgrade VALUES (1,700,1200); INSERT INTO salgrade VALUES (2,1201,1400); INSERT INTO salgrade VALUES (3,1401,2000); INSERT INTO salgrade VALUES (4,2001,3000); INSERT INTO salgrade VALUES (5,3001,9999);emp表中的数据INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,to_date('1980-12-17','yyyy-mm-dd'),800,NULL,20); INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,to_date('1981-2-20','yyyy-mm-dd'),1600,300,30);INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,to_date('1981-2-22','yyyy-mm-dd'),1250,500,30);INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,to_date('1981-4-2','yyyy-mm-dd'),2975,NULL,20);INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,to_date('1981-9-28','yyyy-mm-dd'),1250,1400,30);INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,to_date('1981-5-1','yyyy-mm-dd'),2850,NULL,30);INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,to_date('1981-6-9','yyyy-mm-dd'),2450,NULL,10);INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,to_date('87-7-13','yyyy-mm-dd'),3000,NULL,20);INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,to_date('1981-11-17','yyyy-mm-dd'),5000,NULL,10);INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,to_date('1981-9-8','yyyy-mm-dd'),1500,0,30);INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,to_date('87-7-13','yyyy-mm-dd'),1100,NULL,20);INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,to_date('1981-12-3','yyyy-mm-dd'),950,NULL,30);INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,to_date('1981-12-3','yyyy-mm-dd'),3000,NULL,20);INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,to_date('1982-1-23','yyyy-mm-dd'),1300,NULL,10);

伪列

简介:它不属于任何一张表,但是会被所有的表共享

rownum:逻辑序列 1 2 3 4 5 6 7 8

rowid:物理序列(18)真实的存放位置

例子

select rowid,rownum,e.* from emp e where mgr>7800;

相同

rownum:不同SQL语句在执行时,rownum的值不一致

不同

rownum:在相同SQL语句在执行时,rownum的值不变

查询工资最高的前3条员工信息

有问题的sql语句:

select ename,sal from emp where rownum <=3order by sal desc

使用子查询

select rownum ,empno,ename,mgr,sal,deptno from -- 然后按伪列标记查出(select * from emp order by sal desc) -- 先查出emp的倒序出来where rownum <=3 -- 把伪列的前三个取出

创建一张表

create table mystudent( stuno number, stuname varchar2(10), stuage number);insert into mystudent values(1,'ls',12);insert into mystudent values(2,'2s',12);insert into mystudent values(3,'ws',12);insert into mystudent values(4,'ss',12);-- 使用伪列查看 select rownum,s.* from mystudent s;-- 使用伪列删除 delete from mystudent where rowid='AAAWl2AABAAAbXBAAD'

如何删除重复的数据

rowid:根据插入的顺序 一次递增

rownum:逻辑伪列

rowid: 物理伪列

思路

根据编号分组(将重复的数据 放到一组),然后在每组中只保留一个

-- 先查询select .... from mystudent group by stuno

delete from mystudent where rowid not in(select min(rowid) -- 查询最大的from mystudent group by stuno)

查看

SQL> select * from mystudent;

STUNO STUNAME STUAGE 1 ls 12 2 ls 12 3 xs 22 1 ls 12 2 ls 12 3 ws 32

已选择6行。

SQL> select * from mystudent;

STUNO STUNAME STUAGE 1 ls 12 2 ls 12 3 xs 22

对查询出的结果集去重:distinct

-- 把查询出来的null值,变为0select ename,comm,nvl(comm,0),nvl2(comm,comm,0) from emp

修改字段长度

alter table 表名 modify (字段名 长度);alter table user modify (password varchar2(32));

​​学习视频​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringDataJpa多表操作的实现
下一篇:注解开发
相关文章

 发表评论

暂时没有评论,来抢沙发吧~