欢迎光临散文网 会员登陆 & 注册

Oracle学习笔记 实现查询From子句,where子句,order by子句

2023-03-10 13:56 作者:阿彦绝地反击  | 我要投稿

day01.目标

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;



--【day01总结】---------------------------------------------------------------------------

 查部门表的所有内容:

select * from dept;

select deptNo,dname,loc from dept;

 查部门编号是20的部门

select * from dept where deptNo=20;

 查部门所在区域是纽约的部门

select * from dept where loc='NEW YORK';

 查部门信息按部门编号的降序显示

select * from dept order by deptNo desc;


Oracle学习笔记 实现查询From子句,where子句,order by子句的评论 (共 条)

分享到微博请遵守国家法律