1. 安装Oracle,配置环境 2. 实现查询From子句 3. 实现查询where子句 4. 实现查询order by
一、环境安装
1. 登录:以管理员身份登录
sqlplus 登录名/密码
管理员身份登录:sqlplus system/123456
2. 登录后,导入案例。下载scott.sql文件,执行下面一行的命令
SQL>@"E:\兄弟连文档\oracle\java 19\day01\script\scott.sql";
此时我们拥有非管理员的用户:scott
3. 激活scott的账号,激活用scott可登录
alter user scott identified by tiger;
alter user 登录 identified by 登录密码;
此时如果成功:
SQL> show user
显示:USER 为 "SCOTT"
4. 退出system管理登录,重新以scott/tiger登录
C:\..\sqlplus scott/tiger
登录成功
SQL> desc dept;
如成功
名称 是否为空? 类型
----------------------------------------- -------- ------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
---------------------------------------------------------------------------------------------
二、sql命令
0. 在Oracle环境下清空屏幕
SQL> host cls;
1. 查看表结构
SQL> desc 表名;
例如: desc dept; 查看dept部门表的表结构
desc emp; 查看emp员工表的表结构
2.专业词汇
数据库:存储数据的仓库。
数据存储经历的阶段
人工阶段 -- 很久很久以前...有一个屋子放置一台(巨大个的)计算机,用于实现科学计算。
文件阶段 -- 用文件实现【永久存储】
数据库阶段--用数据库实现存储
常见关系型数据库
DB2 -- IBM
Oracle -- Oracle公司(甲骨文)
Sql Server -- 微软
MySQL -- Oracle公司
java程序猿必备关系数据库:Oracle\MySql
数据库分类
非关系型数据库: 后续课程有说
关系型: 层次结构、网状结构、关系型数据库
数据库系统
DB -- 数据库
RDB -- 关系型数据库
RDBMS -- 关系型数据库管理系统
数据库存储的基本单位
表(实体描述) -- class Student{... ...}
字段(列) -- 属性
值(行) -- 实体对象值
dept表 列
行 DEPTNO DNAME LOC
------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Oracle常见数据类型:
数值型 number(有效长度,小数点保留位数); 举栗:number(10,2) 12345678.12
字符
可变长度字符 varchar2(有效长度) 举栗:varchar2(5) 'ab' 实际存 'ab'
varchar2(5) 'abcde' 最多存5个
不可变长度字符 char(有效长度) 举栗:char(5) 'ab' 实际存 'ab '
char(5) 'abcde' 最多存5个
char当实际存储字符不足时补空格,varchar2按实际字符长度存储不补空格
日期 date ... 月/日/年 小时:分钟:秒 ...
3.查询一个表的内容:from子句
前导条件:登录名scott 密码tiger
3.1 查询dept部门表的所有字段信息
select * from dept;
*表示所有的列字段: deptNo,dName,loc
3.2 查询显示emp员工表中:员工编号、员工姓名、工资、奖金、部门编号
语法:select 列名1,列名2,...,列名N from 表名;
练习:select empNo,eName,sal,comm,deptNo from emp;
3.3 查询显示dept部门的:部门编号,部门名称,所在地区
select deptNo,dName,loc from dept;
--【总结】from子句-------------------------------------------------------------------------------------
查询一个表的所有字段:字段名可用* 代替。
select 列名1,列名2,... ... ,列名N from 表名;
select * from 表名;
4. from 子句进阶
4.1 别称,给当前字段或这个表起外号:显示部门时统一部门字段标题dXxx的格式。
语法:select 列名1 别称1,列名2 别称2,... ,列名N 别称N from 表名;
默认:select deptNo,dName,loc from dept;
练习:select deptNo dNo,dName,loc dLoc from dept;
思考:
员工表emp里有字段:empNo,eName...deptNo(部门编号)
部门表dept里有字段:deptNo(部门编号),dName,loc
列字段同名了,此时必须用别称来区分
4.2 数学运算:+ - * / 求当前员工的年薪(忽略奖金) = 月薪*12. 显示员工姓名、月薪、年薪
select eName,sal, sal*12 from emp; 显示标题eName,sal,sal*12
select eName,sal, sal*12 yearSal from emp; 显示标题eName,sal,yearSal
思考:员工当月实发工资=工资sal+提成comm ,显示员工姓名和实发工资
select eName,sal,comm,sal+comm from emp; 此时没奖金的人没有实发工资,
oracle中 运算数1+运算数2 任何1个是null结果是null
当某个员工没有绩效奖金comm是,工资sal+奖金comm显示结果是null
没有控制处理时:select eName,sal,comm,sal+comm money from emp;
ENAME SAL COMM MONEY
-------------------- ---------- ---------- ----------
SMITH 800
... ...
4.3 null值的处理,查询奖金是null时依然计算实发工资
语法:nvl(字段,新值) 功能:将字段里时null的内容替换成新值
s
练习:将奖金是null的显示0
select eName,nvl(comm,0) from emp;
练习:当奖金是Null时依然计算实发工资(sal+comm)
select eName,sal,nvl(comm,0) cm, sal+nvl(comm,0) money from emp;
显示结果:
ENAME SAL CM MONEY
-------------------- ---------- ---------- ----------
SMITH 800 0 800
... ...
练习:查询所有员工年薪和年度提成(显示员工姓名、年薪yearSal、年度提成yearComm)
ename sal*12 nvl(comm,0)*12==对
select eName, sal*12 , nvl(comm,0)*12 from emp;
完美要求可加入别称
select eName, sal*12 yearSal, nvl(comm,0)*12 yearComm from emp;
4.4 字符链接。 当需要有显示前缀、后缀、中间链接赋的时候可用
练习:显示 部门名_所在地区
java的字符链接: "abc"+"123" 结果是 "abc123"
oracle的字符链接:'abc'||'123' 结果是 'abc123' select 'abc'||'123' from dual;
答:select dName||'_'||loc from dept;
练习:要求姓名以 Mr.开头
答:select 'Mr.'||eName,sal from emp;
思考:显示 abc 成 'abc' 即显示结果中有'号,特殊符号的处理
思考答1:select '''abc''' from dual;
思考答2:select ''''||'abc'||'''' from dual;
5、where子句 :有条件查询 ,表达满足什么条件显示数据。结合from使用
5.1 查工资大于1000的员工
select * from emp where sal>=1000; --显示当前工资在1000及以上员工的所有字段
select eName,sal from emp where sal>=1000; --查询工资大于1000及以上员工的姓名和工资
5.2 姓名是WARD的员工
select * from emp where eName = 'WARD';
select * from emp where eName = 'Ward'; 还能出来结果吗?答不出,'值'区分大小写
5.3 查询部门所在地区纽约的部门信息是什么?
select * from dept where loc='NEW YORK';
5.4 查没奖金的员工信息。
你们认为:select eName,comm from emp where comm = null;
答案1:select eName,comm from emp where nvl(comm,0) = 0 ;
6、order by 子句:排序,按指定规则排序
6.1 按部门编号从大到写显示部门信息
思路:排序依据是部门编号,排序规则是从大到小
答:select * from dept order by deptNo desc; --desc降序从大到小的排序规则。asc升序
6.2 按部门名称升序排列显示
答: select * from dept order by dname asc;