Oracle数据库SQL语句(上)

一、 创建表空间

create tablespace itheima
datafile 'C:\itheima.dbf'
size 100m
autoextend on
next 10m;

二、 创建用户

create user itshunzi
identified by root
default tablespace itheima;

三、 给用户授权

grant dba to itshunzi;  -- 授予“itshunzi”用户超级管理员权限

四、解锁scott用户

alter user scott account unlock;

– 解锁scott用户密码

alter user scott identified by tiger;

–创建序列

create sequence seq_user;

– 删除序列

drop sequence seq_user;

– 从虚表中查询数据

select seq_user.nextval from dual;
select seq_user.currval from dual;

–创建表

create table tab_user(
   id number(11) primary key,
   username varchar2(20),
   password varchar2(20)
);

– 向表中添加数据

insert into tab_user values(
   seq_user.nextval,
   'zhangsan',
   '123456'
);

insert into tab_user values(
   seq_user.nextval,
   'lisi',
   '123456'
);
commit;

* 注:在Oracle数据库中,默认执行增删改的时候,不会自动提交事务,需要手动提交。

– 添加一列

alter table tab_user add(address varchar2(32));
commit;

– 修改某一列的属性

alter table tab_user modify(address varchar2(50));
commit;

– 修改某一列的名称

alter table tab_user rename column address to addr;
commit;

– 删除表

drop table tab_user;
commit;

– 修改表数据

update tab_user set password = '456789' where id = 1;
commit; 

– 删除表数据

delete from tab_user where id = 1;
commit;

– 数值函数(round – 四舍五入)

select round(35.55) from dual;
select round(35.55,-1) from dual;

– 日期函数(sysdate:当前时间,hiredate:入职时间,months_between:求月份函数)

-- 查询每位员工入职的天数
select ename,sysdate - hiredate from emp;
-- 查询每位员工入职的周数
select ename,round((sysdate - hiredate)/7) from emp;
-- 查询每位员工入职的月数
select ename,round(months_between(sysdate,hiredate)) from emp;
-- 查询每位员工入职的年数
select ename,round(months_between(sysdate,hiredate)/12) from emp;

– 转换函数

-- 日期转字符串(to_char)
select empno,ename,to_char(hiredate,'yyyy-mm-dd hh24-mi-ss') from emp;
-- 字符串转日期(to_date)
select to_date('1995-07-17 23:59:59','yyyy-mm-dd hh24-mi-ss') from dual;

–通用函数

--空值处理函数:(nvl)  comm:奖金,存在空值的情况
select ename,nvl(comm,0),sal*12 + nvl(comm,0) from emp;

-- case when函数
select e.empno,
       case 
         when e.job = 'clerk' then '业务员'
          when e.job = 'manager' then '经理'
           when e.job = 'analyst' then '分析员'
             when e.job = 'president' then '总裁'
               when e.job = 'salesman' then '销售'
                 else
                   '无业'
                   end
from emp e;

– 分组函数

select count(ename),deptno from emp group by deptno;(正确写法)
select ename,count(ename),deptno from emp group by deptno;(错误写法)
-- *注:在分组查询中,查询的字段只能包含分组条件字段和聚合函数,不能包含其他的内容

– *分页查询(rownum)

-- 1.查询 emp 表带有 rownum 列
select rownum,t.* from emp t;
-- 2.查询 emp 表中前五条数据
select rownum ,t.* from emp t where rownum<6;
-- 3.查询 emp 表中工资排名前五的数据
select ttt.* from (
       select rownum r,tt.* from(
              select t.* from emp t  order by sal desc) tt) ttt
where r<6 and r>0;

-- 注:分组查询的rownum是一个伪列,表示的是查询结果的行数,他是根据select查询出来的,先于分组条件的执行,所以分组之后,rownum的顺序会被打乱

–Oracle数据库书写格式

SELECT   ......  
FROM     ......  
WHERE    ......  
GROUP BY ......  
HAVING   ......  
ORDER BY ......

注:(1)where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
(2)having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组

你可能感兴趣的:(Oracle数据库)