一、背景
1、创始人:Orcle创始人拉里·埃里森
2、引入:1989年Orcle进入中国以甲骨文命名
3、Orcle数据库是一个可以永久保存数据的仓库.database简称db,是一个关系型数据库(由多张表进行存储数据)
4、Orcle中使用的语言:
- sql语言:结构化查询语言,用于操作数据库的
- sql文件的扩展名为.sql
5、Orcle默认的端口号:1521
Mysql端口号:3306
SQLServer端口号:1433
二、分类
- DQL (数据查询语言) 查询(select)
- DML (数据操作语言) 增删改(insert \delete\update)
- TCL (事务控制语言) commit rollback
- DDL (数据定义语言) 表的操作:新建表,修改表,删除表,主键,约束
- DCL(数据控制语言) DBA某些操作
三、数据表
- 列(字段)
- 行(记录):一行是一条记录(记录整条数据的各种信息)
- 列值(内容)
四、数据类型
Orcle当中有23种数据类型,常用数据类型分为:
数字型:
整数 | number(m) | m代表位数 | number(11) |
小数 | number(m,n) | m代表总数,n表示小数点后面几位 | number(5,2) 999.99 |
字符型:
可变字符 | varchar2(m) | m代表字符串长度 |
固定字符 | char(m) | m代表字符串长度 |
日期型:data
面试题
- varchar2和char的区别:
- varchar2:是一个可变长度的字符类型,规定了最大字符的空间大小,但实际用多少空间就占用多大空间,不浪费空间,但是效率低。
- char:是一个固定长度的字符类型,规定了大小后,如果存入的字符要比规定的长度小,长度不变,它浪费空间,效率高。
五、设置
1、设置关键字大写步骤:
工具 → 首选项 → 用户界面 → 编辑器 → 滚动右边滚动条 → 找到关键字大小写 → 设置成大写
2、设置字体大小步骤:
工具 → 首选项 → 用户界面 → 字体 → (编辑器)选择 → 14
六、查询语句
(1)简单查询
没有任何条件的查询,查询所有,或者指定的某一个字段来查
1、简单查询:
select * from 表名;
- select查询
- from从哪个表查询数据
- *代表所有列
2、查询指定字段数据
select 字段1,字段2,... from 表名;
3、有算数运算表达式的查询
算数运算符:+ 、- 、* 、/
select 字段1,字段2+100,字段3+字段4 from 表名;
注意:任何非空字段与空字段做加法运算,结果都是空,所以用到nvl函数,空值赋值0
空值:null
空置是无效的,未指定的,未知的...
4、别名使用
select 字段 as "别名",字段2 "别名",字段3 别名 from 表名;
- as字段"别名"
- 字段"别名"
- 字段 别名
注意:双引号使用:名字中有特殊符号的适合,区分大小写的适合
5、||拼接
select 字段 ||'任意字符' || 字段2 别名 from 表名;
6、distinct 去重
注意:去重复关键字必须放在开头
select distinct 字段1,字段2 from 表名;
实例:
--简单查询
--1、查询emp表里所有的员工
select * from emp;
--2、根据指定的字段查询想要的信息
select empno, ename, job, sal
from emp;
--3、带有算数运算表达式的查询
--每一个员工的公司上涨1000
select empno, ename, job, sal + 1000
from emp;
--查询所有员工的用工资(工资+奖金)
--任何非空字段与空字段做加法运算,结果都是空
--所以用到nvl函数,空值赋值0
select empno,ename,job,sal+nvl(comm,0)
from emp;
--4、别名使用
--方式1:字段as“别名”
select empno as "员工编号",ename,job,sal+1000 as "工资"
from emp;
--方式2:字段“别名”
select empno "员工编号",ename,job,sal+1000 "工资"
from emp;
--方式3:字段 别名
--双引号使用:名字中有特殊符号 或 区分英文大小写的时候
select empno 员工编号,ename,jopb,sal+1000 工资
from emp;
select empno 员工编号,ename,jopb,sal+1000 "工-资"
from emp;
select empno 员工编号,ename,jopb,sal+1000 "mothsal"
from emp;
--''单引号:表示字符串
--5、字段拼接||
select empno || '的姓名是' || ename 备注,job,sal
from emp;
(2)条件查询
1、条件查询
select * from 表名 where 条件1 and 条件2 or 条件3 !=条件4;
- and:并且
- or:或者
- != <>: 取反
- 执行顺序 :先from--->where条件--->再select查询字段
2、非空与空
is null:是空 is not null:非空
select * from emp where 字段 is not null(或is null);
3、比较运算的使用
①等值比较
- 字段=数值
- 字段=’字符串‘
- 字段=to_date(日期,'yyyy-mm-dd')
②不等值比较:> < >= <= <>
4、betweeen and
select * from 表名 where 字段 between 值1 and 值2;
- between and :在两者之间,包含边界
- not between and :不在两者之间
5、in():在...之内【等价于其中的任意一个】
select * from 表名 where 字段 in(值1,值2);
实例:
--条件查询
--1、单条件查询
--查询工资大于2000的员工信息
select * from emp;
select empno,ename,job,sal
from emp
where sal > 2000;
--2、多条件查询
--①查询工资大于等于2000 并且小于等于3000的员工
select empno,ename,job,sal
from emp
where sal >= 2000 and sal <=3000;
--②查询工资小于等于2000和大于3000的员工
select empno,ename,job,sal
from emp
where sal <=2000 or sal > 3000;
--③查询工资不包含3000的员工信息
select empno,ename,job,sal
from emp
where sal <> 3000;
select empno,ename,job,sal
from emp
where sal != 3000;
--④查询工资大于等于3000并且小于等于7000的或者小于1500并且不等于1000的员工
select empno,ename,job,sal
from emp
where ( sal >=3000 and sal <= 7000 )or (sal < 1500 or sal <> 1000 );
select empno,ename,job,sal
from emp
where sal >=3000 and sal <= 7000 or sal < 1500 and sal <> 1000 ;
--执行顺序:from -> where -> select
--3、非空与空
--①查询有奖金的员工信息
select * from emp
where comm is not null;
--②查询没有奖金的员工信息
select * from emp
where comm is null;
--4、条件语句:比较运算的使用
/*
比较运算:等值比较:=
字段=数值
字段=’字符串‘
不等值比较:> < >= <= <>
*/
--查询工资等于3000的员工信息
select * from emp where sal = 3000;
--查询工资岗位是clerk的员工信息
--字符串用单引号,单引号里的内容会区分大小写
select * from emp where job ='CLERK';
--查询入职日期为1980年12月17日入职的员工
-- to_date('1980-12-17','yyyy-mm-dd')或yyyy/mm/dd
--to_date():将字符串转日期格式
select * from emp
where hiredate = to_date('1980-12-17','yyyy-mm-dd');
--查询入职日期在1987年之后入职的员工
select * from emp
where hiredate >= to_date('1987-01-01','yyyy-mm-dd');
--两者之间 between and [包含边界值]
--查询工资在1000到3000之间的员工信息
select * from emp
where sal between 1000 and 3000;
--查询入职日期在1981年1月1日到1981年12月31日之间的员工
select * from emp
where hiredate between to_date('1981-01-01','yyyy-mm-dd')
and to_date('1981-12-31','yyyy-mm-dd');
--员工工资不在2000到3000之间的员工信息
select * from emp
where sal not between 2000 and 3000;
--in 在...之内
--查询工资是1500或是300 或者是5000的员工信息
select * from emp
--where sal = 1500 or sal = 3000 or sal = 5000;
where sal in(1500,3000,5000);
--查询工作岗位是CLERK,Manager的员工信息
select * from emp
where job in('CLERK','Manager');
--查询工作岗位不适合CLERK,Manager的员工信息
select * from emp
where job not in('CLERK','Manager');
(3)模糊查询
select * from 表名
where 字段 like '%m%';
- 开头:where 字段 like '字符%';
- 包含:where 字段 like '%字符%';
- 结尾:where 字段 like '%字符';
注意:_代表一个字符,一个位置
--查询名字中带有下划线的员工信息
select * from emp
where ename like '%/_%' escape '/';
--''里的下划线表示一个位置,用escape赋予/转义含义
'_'(下划线):需要先转义,但是/没有转义的功能,必须通过escape关键字将/变为带有转义功能的斜线
(4)排序查询
select * from 表名
order by 字段 desc/asc
执行顺序 :from-->where-->select-->order by
order by 永远放在代码块的最后一行,是最后执行
- order by:排序
- desc:降序
- asc:升序(可以省略)
实例:
--排序查询
--【单条件排序】
--将工资表按照工资的降序排序
--desc降序排序
select * from emp
order by sal desc;
--将工资表按照工资的升序排序
select * from emp
order by sal asc;--默认是升序,asc可省略
--根据员工的姓名排序
select * from emp
order by ename desc;
--【多条件排序】
--根据工资降序排序,如果工资相同按照入职日期升序排序,如果日期一样,按照姓名升序排序
select * from emp
order by sal desc,hiredate asc,
ename asc;
--查询员工工资大于1000并且名字中含有字母A的员工信息,将工资按照降序排序
select * from emp
where sal > 1000 and ename like '%A%'
order by sal desc;
--执行顺序 from-->where-->select-->order by
--order by 永远放在代码块的最后一行,是最后执行