===SQLPLUS======================
1、什么是sql plus?
是用来和Oracle进行交互的工具
可电脑端使用,也可以在服务器上使用
2、启动SQLPLUS
3、设置界面风格
4、常用命令
show 显示SQL Plus中的信息
connect 先无条件断开当前数据库用户的连接,再建立连接;缩写(conn)
disconnect 断开当前连接。
set 设置SQL Plus中的相关信息
describe 返回存储对象的描述。缩写(desc)
help 获取SQL Plus命令的帮助。
clear screen清屏
exit或quit 退出
5、创建用户
a.创建一个普通用户:
语法:create user 用户名 identified by 密码;
b.授权给一个用户:
角色:oracle中内置了3个角色
DBA:系统管理权限
connect:创建会话连接权限
resource:操作数据库对象的权限
语法:grant 权限,权限..to 用户名;
创建用户名为ABC的用户,密码自拟
修改密码:alter user 用户名 identified by 新密码;
删除用户:drop user 用户名;
账户解锁:alter user 用户名 account unlock;
============================================
导入SQL脚本:
1.脚本文件内容,复制粘贴到SQLPLUS中;
2.@ 文件路径 文件名.后缀名;
SQL简单查询
1、什么是SQL?什么是表格?怎么查询?
SQL(Structured query language)结构化查询语言
用来和数据库进行交互的语言
表:行与列组成的二维空间,他是数据库存储的基本单位。
2、select语法
select 列名,列名2,列名3…… from 表名;
3、练习
--1从s_emp表中查询员工姓名
--2从s_emp表中查询员工编号、姓名
--3从s_emp表中查询员工编号、姓名、薪资
--4从s_emp表中查询所有员工信息
--5从s_emp表中查询公司中所有职位
--6从s_emp表中查询所有员工姓名、职位、入职日期
--7找出所有部门的部门编号、名称和地址
--8找出公司不同级别的最高工资和最低工资
=========================
5、sql在数据库中是用运算能力:
--从员工表中查询每个员工姓名和年薪
6、sql具有字符串拼接能力,并且可以取别名:
--字符串拼接(****是**入职的,工资是**,职位***)
7、空值置换函数nvl()
--查询所有员工的名字,年薪(不考虑提成)
--查询所有员工的名字,年薪(考虑提成)
注意:nvl()中的两个值要为同一数据类型
使用scott/tiger用户下的emp表完成下列练习,表结构说明如下
emp员工表 字段如下:
empno 员工号
ename 员工姓名
job 职位
mgr 上级编号
hiredate入职日期
sal 薪资
comm 提成
deptno 部门编号
--1、选择部门30中的员工;
select * from emp where deptno =30;
--2、查询所有办事员(CLERK)的姓名、编号和部门;
select ename,empno,deptno from emp where job = 'CLERK';
--3、找出提成高于工资的员工;
select * from emp where comm>sal;
--4、找出提成高于薪资60%的员工
select * from emp where comm>(sal*0.6);
--5、找出部门10中所有经理和部门20中所有办事员的详细资料
select * from emp where (deptno = 10 and job = 'MANAGER')or(deptno = 20 and job = 'CLERK');
=============================
--6、找出部门10中所有经理、部门20中所有办事员以及既不是经理又不是办事员但薪资大于或等于2000的所有雇员的详细资料
select * from emp
where (deptno = 10 and job = 'MANAGER') or (deptno = 20 and job= 'CLERK') or (job != 'MANAGER' and job != 'CLERK' and sal>=2000);
--7、找出收取提成的员工的不同职位;
select distinct job from emp where comm is not null;
--8、找出不收取提成 或收取提成低于100的员工;
select * from emp where comm is null or comm <100;
-*-9、找出各月最后一天入职的所有员工
-*-10、找出30年之前入职的员工
===================================
-*-11、显示只有首字母大写的所有员工的姓名
-*-12、显示正好为4个字符的员工姓名
--13、显示不带有R字母的员工姓名
select ename
from emp
where ename not like '%R%';
-*-14、显示所有员工姓名的前三个字符
-*-15、显示所有员工的姓名,用a代替所有的A
=========================================================
-*-16、显示所有员工的姓名以及工作满30年的入职日期
--17、显示雇员的详细资料,按姓名排序
select * from emp order by ename;
--18、显示员工姓名,根据工作年限将最老的员工排在最前面
select ename
from emp
where ename
order by hiredate asc;
--19、显示所有员工的姓名、部门编号和薪资,部门编号降序排列,同部门员工以薪资升序排列
select ename, deptno,sal from emp order by deptno desc,sal ;
-*-20、显示所有员工的姓名和入职日期,按照员工入职的月份降序排序,并将最前年份排在最前
============================================================
-*-21、显示在一个月为30 天的情况下,所有员工的日工资,忽略余数
-*-22、找出2月份入职的员工
-*-23、显示出所有员工姓名,和其在公司所在天数
--24、显示姓名字段的任何位置都包含A的所有员工姓名
select ename
from emp
where ename like '%A%';
-*-25、以年、月、日分别显示所有员工的工作时长;