数据库的使用

学习库

在linux环境下怎么把删除键定为删除

数据库的使用_第1张图片

scott

hr

在sql修改用户,只有sys才能修改

数据库的使用_第2张图片

在sql里切换用户 

conn sys/oracle@iweb as sysdba

数据库的使用_第3张图片

在sott用户下

查看表

emp :员工信息表    bonus :薪资  dept:部门

数据库的使用_第4张图片

SQL语言

select * from 表名 

select ename,sal from emp where sal >2000;  --查询工资大于2000

--找空值null,任何值与它比较都是false
select * from emp where comm is null;

--区间比较  between and 有端点值
select * from emp where comm between 1250 and 3000

--逻辑判断 or and 可没有端点值 in(a,b,c):表示在a,或在b,或在c   not in(a,b,c)
select * from emp where comm >1250 and comm <3000;

--模糊查询  '_'可指定表示一个字符 '%'表任意多个字符
select * from emp where ename like '%A%';

--计算
select empno,ename,sal+1000 as newsal from emp ;

--去重 distinct 
select distinct job from emp;

--拼接 ,在姓名前加
select 'DEAR' ||ename from emp;

--排序 asc正序 desc 倒序 默认正序 order当在与其他组合时写在末尾
select * from emp order by sal asc;

sql函数

字符函数

--dual表专门看函数或结果变量
--upper 使大写 lower 使小写 initcap 是第一个字母大写
SELECT upper('abc') FROM dual ;

--concat 拼接
SELECT concat('dear ',initcap(ename) ) FROM emp;

--substr 截取字符串
select substr('abcdefg',3,4) from dual;
 

--length 长度
select length('blake') from dual;

--replace 替换
select replace('www.bb.com','www','aaa') from dual; 

--instr 返回指定字符开始的位置
select instrb('corporate floor','or') from dual;

--lpad左填充 rpad右填充

--trim 去除空格

数值函数

--round 四舍五入,float向上,ceil向下,mod取模
select round(4.5),float(4.9),ceil(4.1) from dual;

--trunc 截取数值,可以截取日期
select trunc(3.255555,2)from dual;

--extract 抽取函数
select extract(month from sysdate)  from dual;



--日期
--查看当前时间
select systimestamp from dual;

select sysdate from dual;     --是由年月日

--有几个月
select month_between(sysdate,hiredate) from dual;

--加月份
select add_months(sysdate,1) from dual;

--下个星期一是几号
select next_day(sysdate,'星期一') from dual;

--last_day 某月的最后一天

--日期可加减




--转换函数


--to_char 字符串 看字符串首字排序

--to_date 日期
--找1981年以前入职

--to_number 数值

数据库的使用_第5张图片

数据库的使用_第6张图片

通用函数

--nvl 对null的处理

数据库的使用_第7张图片

数据库的使用_第8张图片

1. 找出每个月倒数第三天受雇的员工(如:2009-5-29)

select * from emp where trunc(last_day(hiredate))-2 = trunc(hiredate,'day');


2. 所有员工名字前加上 Dear ,并且名字首字母大写

SELECT concat('dear ',initcap(ename) ) FROM emp;


3. 找出姓名为 5 个字母的员工

SELECT * FROM emp where length(ename)=5;


3. 找出姓名中不带 R 这个字母的员工

SELECT * FROM emp where ename not like '%R%';


4. 显示所有员工,按名字降序排列,若相同,则按工资升序排序

SELECT * FROM emp order by ename desc,sal;


5. 找到 2 月份受雇的员工

SELECT * FROM emp where extract(month from hiredate)=2;


6. 列出员工加入公司的天数(四舍五入)

select ename,round(sysdate-hiredate) from emp;

分组函数

--count 统计 avg sum max min
--按部门数人数

select count(ename),deptno from emp group by deptno

--先找到大于2000再分组
select count(ename),deptno from emp where sal >2000 group by deptno;

--先分组再找到大于2000
select count(ename),deptno from emp  group by deptno having sal >2000;

--分好几种组
select count(ename),deptno from emp  group by deptno job;

--先分组再排序
select count(ename),deptno from emp  group by deptno order by count(ename);

--嵌套
select max(avg(sal)) from emp  group by deptno;
1. 分组统计各部门下工资>500 的员工的平均工资、

select deptno,avg(sal) from emp where sal>500 group by deptno;


2. 统计各部门下平均工资大于 500 的部门

select deptno,avg(sal) from emp group by deptno having avg(sal) >500;


3. 算出部门 30 中得到最多奖金的员工奖金

select max(comm) from emp where deptno=30 group by deptno;


4. 算出每个职位的员工数和最低工资

select count(ename),min(sal),job from emp group by job ;


5. 算出每个部门,,每个职位的平均工资和平均奖金(平均值包括没有奖金),如果平均奖金大于300,显示“奖金不错”,如果平均奖金 100 到 300,显示“奖金一般”,如果平均奖金小于 100,显示“基本没有奖金”,按部门编号降序,平均工资降序排列

select * from emp;
select avg(comm),avg(sal),deptno ,case 
when avg(comm)>300 then '奖金不错'
when avg(comm)>100 then '奖金不错'
else '基本没有奖金' end from emp group by deptno order by deptno desc,avg(sal)desc;


6. 列出员工表中每个部门的员工数,和部门 no

select count(ename),deptno from emp group by deptno; 


7. 分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金)

select deptno,job,avg(coalesce(comm,0)),sum(coalesce(comm,0)+sal) FROM emp group by deptno,job; 

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