Oracle的基本查询、过滤和排序查询-day02

5 Oracle的基本查询、过滤和排序查询

5.1 解决SqlPlus出现中文乱码的问题

在这里插入图片描述

  • 之前使用的是hr登录,现在使用设置的另外一个登录
  • 使用scott帐号登录【sqlplus scott/[email protected]:1521/orcl】
    在这里插入图片描述
  • 起别名的时候发现中文乱码问题
    在这里插入图片描述

第一步

  • 在sqlplus中执行 select userenv(‘language’) from dual;
  • 查看当前数据库的字符集为:AMERICAN_AMERICA.ZHS16GBK
    在这里插入图片描述
  • 我们只需要把客户端字符集和操作系统字符集都设置成:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 就行了

第二步

  • 在系统环境变量中查找一个名为“NLS_LANG”的环境变量,如果找不到,则新建一个,把变量值赋值为:“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”
    在这里插入图片描述
  • 关闭dos终端,重写打开(中文乱码问题解决)
    在这里插入图片描述

5.2 Oracle基本查询语句

spool 保存sql到文件

  1. 保存sql语句到文件【spool C:\Users\shuyy\Desktop\a.txt】
  2. spool off 写入内容到文件【要在spool C:\Users\shuyy\Desktop\a.txt 与spool off 之间写入需要保存到文件中的sql,spool off关闭后,再写的sql将不会写入指定文件中】
    在这里插入图片描述

host cls 清屏

在这里插入图片描述

show user 显示当前登录用户

在这里插入图片描述

select * from tab; 显示当前用户下的表

  • Oracle与MySQL数据库不同,不会像MySQL那样显示数据库,然后使用
    在这里插入图片描述
  • Oracle数据库会直接显示当前用户权限所能看到的表【这里的表是Oracle默认提供的一些表】
    在这里插入图片描述

desc 查询表的结构【desc emp;】

在这里插入图片描述

show linesize 显示行宽

  • 查询emp表发现因为行宽问题,显示得很不美观
    在这里插入图片描述
    在这里插入图片描述

set linesize 150 设置行宽

  • 美观很多
    在这里插入图片描述

col ename for a8 设置ename列宽,显示8个字符,a表示字符

在这里插入图片描述
在这里插入图片描述

col sal for 9999 设置sal列显示4个数字,9表示数字

在这里插入图片描述

  • 999表示显示3个数字,发现4个数字的数据变成了####
    在这里插入图片描述

/ 表示执行上一条语句

在这里插入图片描述

c Change 命令,输错语句时用【如: c /form/from】

在这里插入图片描述

* + 乘法和加法运算

#查询员工信息: 员工号  姓名 月薪 
select empno "员工号", ename "名字",sal "月薪" from emp;

在这里插入图片描述

#查询员工信息: 员工号  姓名 月薪 年薪 奖金 年收入
select empno "员工号", ename "名字",sal "月薪", sal*12 "年薪",comm "奖金", sal*12+comm "年收入" from emp;
  • 【发现这样查询有问题,年薪与奖金为null的数据相加结果是null,显然这样是不符合要求的】
    在这里插入图片描述
#让comm里面的null变成0【nvl(comm,0)】
select empno "员工号", ename "名字",sal "月薪", sal*12 "年薪",comm "奖金", sal*12+nvl(comm,0) "年收入" from emp;

在这里插入图片描述

查询表中的null值

  • MySQL可以这样书写【Oracle中这样写会报错】:select * from emp where comm = null;
  • select * from emp where comm is null;
    在这里插入图片描述

as 列的别名

select empno as "员工号", ename "名字",sal "月薪", sal*12 "年薪",comm "奖金", sal*12+nvl(comm,0) "年收入" from emp;

在这里插入图片描述

ed 进入写入缓存文件 file afiedt.buf【方便修改长sql语句】

在这里插入图片描述

  • 修改完成后Ctrl+s保存,再关闭文件,输入 / 即可,表示执行上一条sql语句
    在这里插入图片描述

distinct 1.去除重复 2.作用于后面所有的列

#去除重复
select distinct deptno from emp;

在这里插入图片描述

#作用于后面所有的列
 select distinct deptno, job from emp;

在这里插入图片描述

concat 字符串连接

  • dual表示一个虚表
select concat('abc','def') from dual;

在这里插入图片描述

dual 表示一个虚表

select 3+2 from dual;

在这里插入图片描述

|| 也表示字符串连接

select 'abc'||'aaa' from dual;

在这里插入图片描述

 select ename|| '的工资是'||sal from emp;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3 Oracle的过滤和排序查询

字符大小写敏感

#如查询员工为SMITH的信息
select * from emp where ename='SMITH';
select * from emp where ename='SMITh';

在这里插入图片描述

日期格式敏感

#查看当前的日期格式
select * from v$nls_parameters;
#修改当前会话的日期格式【下一次打开还是原来的格式】
#java中是yyyy-MM-dd
alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
#查询日期
select * from emp where hiredate='17-12月-80';
select * from emp where hiredate='1980-12-17';

在这里插入图片描述
在这里插入图片描述

between and

#查询薪水1000~2000之间的员工,结果是包含1000和2000的
select * from emp where sal between 1000 and 2000;
#注:含有边界 小值在前 大值在后

在这里插入图片描述

in 在集合中、not in 不在集合中

#查询10和20号部门的员工
select * from emp where deptno in(10,20);
#查询不在10和20号部门的员工
select * from emp where deptno not in(10,20);
#注:如果集合中含有null,不能使用not in; 但可以使用in

在这里插入图片描述
在这里插入图片描述

like 模糊查询【与mysql类似】

#查询名字以S打头的员工
select * from emp where ename like 'S%';
#查询名字是4个字的员工,4个下划线即可
select * from emp where ename like '____';
#查询名字中含有下划线的员工 需要转义字符
select * from emp where ename like '%\_%' escape '\';

在这里插入图片描述

rollback 回滚

  • Oracle是自动开启事务,不同于mysql需要手动开启【start transaction;】

order by 排序

#1.查询员工信息 按照月薪排序【默认升序】
select * from emp order by sal;
#2.按年薪降序排序【order by后面  + 列,表达式,别名,序号】
select empno,ename,sal,sal*12 from emp order by sal*12 desc;

在这里插入图片描述

#根据别名排序
select empno,ename,sal,sal*12 年薪 from emp order by 年薪 desc;
#根据列数排序
select empno,ename,sal,sal*12 年薪 from emp order by 9 desc;

在这里插入图片描述
在这里插入图片描述

#3.按部门升序然后按工资降序排序员工信息
select * from emp order by deptno,sal desc;
#4.按部门降序然后按工资降序排序员工信息
select * from emp order by deptno desc,sal desc;
#注:order by 作用于后面所有的列;desc只作用于离它最近的列

在这里插入图片描述

#6.查询员工信息  按照奖金降序排序,null值是最大,所以会排在最前面
select * from emp order by comm desc;
select * from emp order by comm desc nulls last;

在这里插入图片描述

set pagesize 设置分页大小

#设置分页大小
set pagesize 20;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43414199/article/details/109258473