看书总结:
1、查看oracle 动态实例的状态
select status from v$instance;
2、关闭数据库
shutdown immediate;
3、启动数据库
startup
4、如何知道当前数据库的名称
show parameter db_name
show parameter :表示可以查看数据库中的各种参数值
db_name:表示oracle 数据库名称参数,查看该数据库可以知道具体的参数值
5、查询数据库中的某个用户的状态
select username,account_status from dba_users where username='SCOTT';
注意:“SQL查询oracle数据库时,oracle默认英文字母大小写都一样,即不区分大小写,但是在where 条件后面的每个字段表示的值是区分大小写的!!!”
6、如何得知数据表中都有哪些列?
desc user_tables;
7、对数据库用户进行解锁
alter user 数据库用户名 account unlock;
修改的用户状态更改为Expired,说明该用户已经解锁,但是目前处于到期状态,oracle 数据库默认该用户需要使用原来的密码重新登录,并设置新密码,即可解除到期状态。
8、查看当前的数据库用户
show user
9、用户连接语法
conn 用户名/密码
查看当前用户下拥有哪些表
select table_name from user_tables
插入一条新纪录
insert into dept (deptno,dname,loc) values(50,'Development','Beijing');
commit;//提交对数据库的修改操作。
如果没有commit ,则sql语句只存在计算机的内存中,操作的数据有可能不会存储在数据库中。
修改数据库表的数据
update dept set loc ='Shanghai' where deptno = 50;
commit;
删除数据库表的数据
delete from dept where deptno=50;
commit;
在oracle 的SQLPlus中,英文字符默认是左对齐、数字默认是右对齐。
设置查询数据的时间格式
alter session set nls_date_format ='YYYY-MM-DD';
查询当前数据库时间
select sysdate from dual;
dual 是oracle的一个虚表,在查询用到计算、常量表达式等时可以使用的dual虚表。
select ename,round((sysdate-hiredate)/365,0) from emp;
round(x,y)是oracle的一个四舍五入的函数,X表示这个数字需要进行四舍五入,Y则表示在哪位数进行四舍五入,如果Y=0,表示在个位数进行四舍五入,Y=2表示在小数点后两位进行四舍五入。
按照工作年数排序查询出每个员工的姓名及年数
select ename, round((sysdate-hiredate)/365,0) from emp order by 2;
oracle 默认是按照升序排序的,即把数字从小排到大,order by 2 中的2 表示按照第二列排序。
按年数倒叙排列数据
select ename,round((sysdate-hiredate)/365,0) from emp order by round((sysdate-hiredate)/365,0) desc
desc 表示排序使用降序来输出数据,即从大到小进行排序。
变成中文列名,本土化查询语句
select ename as "姓名" , round((sysdate-hiredate)/365,0) as "工作(年)" from emp order by "工作(年)" desc
as 是列别名的关键字,可以用英文双引号""里面的字符来表示该列的别名。在oracle数据库中,同时允许用列别名进行排序。
select ename|| '员工本月工资为:¥'||(sal+1500) as "公司员工本月工资表" from emp order by sal;
||两个竖杠是oracle的连接符,可以把查询出来的数据和其他字符串连接起来,可以对多个字符串,多个表的列值相连接。
''两个单引号里面的字符串,可以把里面的字符串输出。即表的列数据和字符串连接在一起输出结果。
过滤重复的数据
select distinct deptno from emp;
distinct 是去掉重复数据的SQL关键字。
按照薪水排序查询工资少于2000元的员工。
select ename,sal from emp where sal<=2000 order by sal;
where 是限制条件关键字,后面的条件如果是数字,可以进行运算,条件后面的值如果是数字,不用单引号,如果是字符串,则需要引号括起来。
order by 该关键字需要在where的后面,常用运算符有">",">=","<","<=","<>"和"!="(都是不等于),"="。
查看薪水在某个区间的员工
select ename,sal from emp where sal between 1500 and 2500 order by sal;
between ...and...用于条件where 之中,表示数值介于两个数值之间。
查询拿保底工资的销售人员
select empno ,ename,job,sal from emp where job='SALESMAN' and sal=1250;
这里where条件中的and 表示“而且”的意思。
查看没有奖金或者工资少于1500的员工
select empno ,ename,job,sal,comm from emp where comm is null or sal<1500;
or 表示或者的意思,
null在oracle数据库中是一个特殊的值,他既不表示0,也不表示空,是一个不能确定的未知数。
员工的工资加上提成,哪个员工的工资是最少的。
select empno ,ename,job,sal,comm,sal+nvl(comm,0) from emp where comm is null or sal<=1500 order by sal+nvl(comm,0);
nvl(X,Y)是数据库的一个内部函数,表示如果X有值,则返回X的值,如果X的值是null,则默认为Y。
查看名字开头为"M"的员工
select ename,job,sal from emp where ename like 'M%';
like 是where 中模糊查询的关键字,后面的字符串需要单引号括起来,%在SQL语句中表示字符后面所有字符,其中M%表示以M开头的所有字符。
查找哪些员工属于销售人员、分析师、管理人员
select ename,job from emp where job in('SALESMAN','ANALYST','MANAGER');
in 表示在某个列中存在多个值均符合,或者使用or代替也可。
select ename ,job from emp where job='SALESMAN' or job ='ANALYST' or
job='MANAGER';
统计公司每个岗位有多少个员工
select job ,count(*) from emp group by job;
group by 是oracle 数据库中的分组函数,可理解为按照工作职位进行分组,然后统计每个职位的个数。
count(*)是统计数量的一个函数,这里统计公司每个岗位有多少人。
统计公司每个岗位有多少员工,并按照数量进行排序。
select job ,count(*) from emp group by job order by count(*);
统计每个部门有哪些员工,并按照部门号排序
select deptno,count(*) from emp group by deptno order by deptno;
求公司共支付员工的薪水
select sum(sal)+sum(nvl(comm,0)) from emp;
sum 是oracle 数据库内部的一个函数,即所有数值之和,这里是把每个员工的工资和提成相加起来。
统计公司员工的平均工资
select round(avg(sal),2) from emp;
ave是oracle数据库的求平均值函数,作用是把所有的数值相加起来然后统计平均值。
求出最高薪水和最低薪水及它们的差距是多少。
select max(sal),min(sal),max(sal)-min(sal) from emp;
max是oracle数据库内部函数,专门计算最大的数值
min是oracle数据库内部函数,专门计算最小的数值
列出平均工资大于2500的岗位
select job ,avg(sal) from emp having avg(sal)>2500 group by job;
having在使用group by 分组时,如果条件限制,需要使用having ,而不能使用where 即在group by 所对应的条件限制为having,上面的例子中,数据库首先使用group by进行岗位分组,在使用avg(sal)求出每个岗位的平均工资,最后平均工资大于2500由having进行限制。