image.png
先创建空间,这样不会对主用户产生冲突

用户登录语句:select sysdate from dual;
阿特 表的位置 表名 分号结束
@d:/xxx.sql;
oracle 10g的OEM启动方式一般在开始菜单的Oracle Enterprise Manager就可以找到,打开进行管理;
oracle数据库笔记 - 图2
oracle进行更新到11g的版本时,将OEM功能通过web进行管理,
默认访问地址:https://localhost:1158/em

oracle数据库笔记 - 图3

oracle学习查询语句

查看表有哪些咧:desc
select from a
代表查询所有的咧
假如要出去某几列或者是某一列
select a_id,a_name,email from a
数字和日期使用的算术运算符
+-/
查询 employees表的名字薪水 查12个月的薪水然后在给每个人多家一千的奖金
select last_name,salary,12
salary+1000
from employees;
查询日期 使用sysdate就是今天 sysdate+1就是明天,sysdate-2就是前天
select sysdate,sysdate+1,sysdate-2 from dual;
SYSDATE SYSDATE+1 SYSDATE-2
—————- —————- —————-
2021/8/26 1 2021/8/27 1 2021/8/24 1

空值

空值不同于0,凡是空值参与的运算,结果都为空(null)
select employee_id,salary,commission_pct,salary*(1+commission_pct)
from employees

别名

列后面加as 加“”或者是空格加别名
连接符
把列与列,列与字符链接在一起
用“||”表示
可以用来合成咧
select last_name||’的工作是’||job_id
from employees

字符串

字符串可以是select列表中的一个字符,数字,日期
日期和字符只能用在单引号中出现
每当返回一行时,字符串被输出一次

重复行

默认情况下,查询会返回全部行,包括重复行。

去重 :distinct

select distinct department_id from employees
sql语句与sqlplus命令
sql
一种语言
ansi标准
关键字不能缩写
使用语句看着数据库中的表的定义信息和表中的数据
sql
plus
一种环境
oracle的特性之一
关键字可以缩写
命令不能改变数据库中的数据值
集中运行

带条件筛选的
select employee_id,last_name from employees where employees_id>200
带日期的条件筛选
select last_name,hire_date from employees where hier_date = ‘’
带条件查询,大于等于4千小于7千(between …and…)两个值之间的(含边界)
select last_name,hire_date from employees where between 4000 and 7000
带条件查询,部门70/80/90 (in())只包含里面的值
select last_name,department_id ,salary from employees where department_id in(70 ,80,90)
带条件的模糊查询(like)
select last_name,department_id ,salary from employees where last_name like ‘%a%’
带条件的模糊查询第二个字母是a的(like)
select last_name,department_id ,salary from employees where last_name like ‘_a%’
带条件查询为(null)
select last_name,department_id;salary,commission_pct from employees wherecommission——pct in null
排序 从高往底 order by (ASC升序,desc降序)
select last_name,department_id,salary from employees where department_id = 80
order by salary desc

字符函数

大小写控制函数

LOWER:将大写转换成小写
UPPER:区分字母直接
INITCAP:将首字母转换成大写
select LOWER(‘ATGUIGUJAVA’),UPPER(‘AtGuiGuJava’),INITCAO(‘AtGuiGujava’)
———————————————————————————————————————————输出
LOWER:(全部转成成小写了:atguigujava)UPPER(区分字母之间:ATGUIGU JAVA)INITCAO(首字母大写并且区分字母之间:Atguiju Java)
使用情况:在不知道名字或者其他的字段是否是大小写的情况下可以使用直接全部转换成大写或者是小写
select from employees where lower(last_name)=‘king’转换成小写
select
from employees where upper(last_name)=‘KING’转换成大写

字符控制函数 结果

concat(‘HELLO’,’WORlD’) helloworld 链接两个字符直接
substr(‘helloworld’,1,5) hello 1表示从哪里开始,5表示输出的个数
length(‘helloworld’) 10 表示字符串的长度
instr (‘helloworld’,‘w’) 6 表示首次出现的字符
lpad (salary ,10,’‘) (**10000) 左补位 假如工资 给十个位子 如果不够十位就用补位
rpad (salary,10 ,‘
’) (10000*) 右补位 假如工资 给十个位子 如果不够十位就用*补位
trtm (‘H’from ‘helloworld’) (elloworld)将h移除(只能移除首尾的h)
replace(‘abcd’,‘b’,‘m’)(amcd)将b替换成m(将所有的b都替换)

数字函数

round:四舍五入
round(45.926,2)——》45.93(写了2就是保留两位小数,没写数字就是默认清除所有的小数,如果写负数就表示一小数点为0的标节点0前面的就是负数)
select round(435.45,1),round(435.45),round(435.45,-2)
———————————————————————————————————————-
435.45 435 400
trunc:截断
trunc(45.926.2)———>45.92(截断写了1 表截断最后一位数,没有写数字表示从小数点后面全部截断,如果写了负数表示从0开始前面的就是-1然后截取0补位)
select trunc(435.45,1),trunc(435.45),trunc(435.45,-1)
————————————————————————————————————————
435.4 435 430
mod:求余
mod(1600,300)———>100(1600除以300还剩一百)

伪表 :dual

日期时间

在日期上加上或减去一个数字结果仍为日期
两个日期相减返回日期之间相差的天数
(日期不允许做加法运算 无意义)
可以用数字24来向日期中加上或减去天数

日期函数

months_between 两个日期相差的月数
(select employee_id,last_name,(sysdate-hire_date)/30,months_between(sysdate,hire_date)from employees)
add_months 向指定日期中加上诺干月数
select sysdate,add_months(sysdate,2),add_months(sysdate,-3),next_day(sysdate,’星期日’)from dual
——————————————————————————————————————————
2021/9/3 14 2021/11/3 14:08:44 2021/6/3 14:08:44 2021/9/5 14:08:44
next——day 指定日期的下一个星期“对应的日期
last——day 本月的最后一天
round 日期四舍五入
trunc 日期截断

转换函数

(数据类型的转换)
隐性
oracle自动完成下列转换
源数据类型 目标数据类型
varchar2 or char number
varchar2 or char date
number varchar2
date varchar2
显性
通用函数
单行函数可以嵌套先计算里面一层的然后在计算外面一层的
NVL(expr1,expr2)(如果1为空就用2代替,如果不为空就用1 本身)
将空值转换成一个已知的值:
可以使用的数据类型有日期字符数字
函数的一般形式
示列:求公司员工的年薪(含commission_pct)
select employee_id,last_name,salary12(1+nvl(commission_pct,0))employees(如果要求commission——pct这个值要是这个值是空的就用后面的0代替,不然显示的时候就空的)
示列:输出last_name,department_id,当department_id为null时用没有部门表示
select last_namenvl(to_char(department_id,’9999999’),’没有部门’)from employee(注解:to_char(department_id,’9999999’因为department_id和字符串类型的没有部门类型不兼容所有用了to_char转换类字符串类型的)
NVL2(expr1,expr2,expr3)
示列:查询员工的奖金率,若为空,返回0.01,诺不为空,返回实际奖金率加0.015
select last_name,commission_pct,nvl2(commission_pct,commission_pct+0.015,0.01)from employees
nullif(expr1,expr2):相等返回null,不等返回expr1

coalesce(expr1,expr2)

条件表达式

在SQL语句中使用if-then-else
使用两种方法
-case表达式
示列:查询部门为10,20,30的员工信息,若部门号为10,则打印其工资的1.1倍,
若部门号为20,则打印其工资的1.2倍,若部门号为30,则打印其工资的1.3倍
select employee_id,last_name,department_id,case department_id when 10 then salary 1.1
when 20 then salary
1.2
else salary 1.3 end new_sal
from employees
where department_id in(10,20,30)
case:xxx表示你要比的那一列的值
when:10表示你要比的值等于这个时
then:表示你怎么去处理
else:除上面的条件之外
end:表示结束
new:取别名
-decode函数
示列:select employee_id,last_name,department_id,decode(department_id,10,salary
1.1,
20,salary*1.2,
salary)new_sal
from employees
where department_id in(10,20,30)