Oracle 学习笔记
Day_1
工具安装:
pysql 安装:不能安装再有中文,空格的路径下
然后破解(百度破解)
select * from tab
/* 数据库-数据库实例-表空间-数据文件
通常情况下,orcale 只有一个是实例。
新建项目时的区别:
MYsql: 创建一个数据库,创建相应的表
ORACLE: 创建一个表空间,创建用户,再由用户创建相应的表
oracie是多用户的,MYsQL是多数据库的
1.遵循sQL标准
2.不同厂商,不同的数据库产品,但是有自己的方言
3.使用自己的方言,也能够完成相同的功能
4. oracle安全级别要高,MYSQL开源免费
*/
-
基本查询
SQl:结构化查询语言
SQL的分类以及常见的操作符:
四类:
DDL∶数据定义语言.create.4ler drop truncateDML :数捂操纫语言insert update delete
DCL :数据控制语言安全授权grant revoke
DQL :数据查询语言select from子句where子句 -
查询语句的结构
select [列名] [*] from tablename [where 条件] [group by 分组条件] [having 过滤] [order by 排序 ] select 1+1 --抛出异常(但是在MySQL正常运行,同样是sql 标准 ,执行的方言和标准不同) select 1+1 daul --在Oracle 中建立虚表伪表,补齐语法结构,系统提供。
--别名查询,使用as 关键字 select ename 姓名 ,sal 工资 from emp; /* 别名不允许存在特殊字符(&,%《%#@)关键字,如果有加双引号*/ --去除重复数据 distinct(每一列都一样,才是重复) select distinct name from emp --单例去除重复 select distinct job,name from emp --多例去除重复 --查询中的四则运算 select 1+1 from dual --查询员工年薪 select SAl* 12 from emp --查询员工年薪+奖金 select SAL*12+comm from emp --出现NULL select SAL*12+nal(comm,0) --nal(a,b) => com==True?comm,0 /* 注意:null值,代表不确定的不可预知的内容,不可以做四则运算 */
员工表
出现空:
--字符串拼接 java : + ; oracle :||
--查询员工姓名 姓名:scott
select * from emp;
select '姓名:' || ename from emp; --使用连接符 ||
select concat('姓名:',ename) from --函数查询 concat()
- 条件查询
/*
条件查询: where[后面的写法]
关系运算符:>>==<<= :=<>逻辑运算符: and or not
其它运算符:
like模糊查询
in(set)在某个集台内
between. .and. .在某个区/间内is null 判断为空
is not nuli郑断不为空r
*/
--查询每个月能的能得到奖金的员工信息
select * from emp where comm is not null ;
select * from emp where sal >=1500 and sal <=3000;
--查询缪个名字在某个范围的员工信息("json",'scott','ford') in
select * from emp where ename in ('Jones','ford','scott');
员工信息表:
- 模糊查询
/*
模糊查询:like
% 匹配多个字符
- 匹配单个字符
*/
select * from emp where eanme like '__O%'; --查询第三个字符是)
--查询员工姓名中包含% 的员工信息
select * from emp where eame like '%\%%' escape '\' --告诉Oracle '\' 是转义字 符
- 排序
/*
排序: order by
排序:按
升序:asc
升序:asc
ascend
扬升
降序:desc
降序:DESC
descend
下降
*/
--查询员工信息,按照奖金由高到低排序
select * from emp order by comm desc --此时默认nulls first 也就是 null 类型默认排列在前面
select * from emp order by comm desc nulls last --null 类型排列在最后
select sum(sal) from emp;
select count(1) from emp;
select avg()
- 数值函数
--数值函数
select ceil(45.975) from dual;
select floor(23.4) from dual;
--四舍五入
select round (34.923,-2) from dual;
select round (34,999,-3) from dual;
--截断
select trunc(234.432,-2) from dual; --234.43
--求余
select mod(9,3) from dual; --0
select mod(9,4) from dual; --1
--字符函数 substr(str1,起始索引,长度)
select substr('lloveyou',0,3) from dual;
select substr('loveyou',1,3,) from dual;
select lengh('loveyou') from dual;
--去除字符串的空格
select trim(' loveyou ') from dual;
--替换字符串
select replace ('loveyou ','o','l') from dual; --替换o 为 l
- 日期函数
select add_month(sysdate,3) from dual ; --第三天
select sysdate-hiredate from dual;
select ceil(sysdate -hiredate)/7 from emp;
--查询员工入职的天数
select months_between(sysdate,hiredate)/12 from emp;
- 转换函数
--转换函数数值转字符字符转数值日期
--字符转数值to_number (str)鸡肋
select 110+'12' from dual --122 自动转换
--年
select to_char(sysdate ,'yyyy') from dual;
--日
select to——char(sysdate,'dd') from dual
--字符转日期
select to_date ('2017-04-10','yyyy-mm-dd') from dual;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eab2DdyN-1608898881220)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20201224214424499.png)]
员工查询:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RMPXCOYM-1608898881224)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20201224214851748.png)]
- 通用函数
/*
通用函数:
nvi(参议i,参数2)如果参数1 = null就返回参数2
nvl2(参数1,参数2,参数3)如果参数1 = null,就返回参数3,否则返回参数2
nullif(参数1,参谈2)如果参数1 = 参数二2 ,那么就返回null,否则就返回参数1
coalesce :返回第一个不为空的数。
*/
- 条件表达式
/*条件表达式:
case 字段:
when 值ithen值when值2then值eise
默认值end
*/
select
case ename
when 'smith' then '刘备小二'
when 'alien' then '诸葛村夫'
else
'路人甲'
end '中文名'
from emp;
--对应英文取一个中文名
select decode (ename,'smith','诸葛菜鸡','allth','刘备小二','black','张飞飞') from emp ;
- 分组查询
/*
分组表达式group by
select 分组的条件,分组之后的操作 from 表名 group by 分组的条件 having 条件过滤
*/
--分组统计所有部门的平均工资,找出平均工资大于2000的部门。
select deptno ,avg(sal) from emp group by deptno ;
--过滤大于2000的
select deptno ,avg(sal) from emp group by deptno having avg(sal) >2000;
--where和having的区别:
-- where后面不能接聚合函数,可以接单行函数
-- having是在group by之后执行,可以接聚合函数
/*
sql的编写顺序:
select . . from ... where ..group by having .. order by
from .. where group by having ..select ..order by
*/
SQL 的执行顺序:
大于2000的
select deptno ,avg(sal) from emp group by deptno having avg(sal) >2000;
–where和having的区别:
– where后面不能接聚合函数,可以接单行函数
– having是在group by之后执行,可以接聚合函数
/*
sql的编写顺序:
select . . from … where …group by having … order by
from … where group by having …select …order by
*/
**SQL 的执行顺序:**
![image-20201224221251962](https://img-blog.csdnimg.cn/img_convert/70db80fff05dce1f30a1b6d1ddb0813c.png)