4-1 Oracle的基本查询语句
查询:使用最频繁的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据
语法:select [distinct] * / cilum_name / expression [alias]
from table
where condition
alias指定别名
expression 表达式
(一)--去除重复行
--select distinct deptno, job from emp;
-------------------------------------------------------------------------------
(二)查询日期列
(1)日期列:指数据类型为日期类型的列,如date类型
(2)日期列的默认显示格式为DD-MON-RR
(3)代表年,而且只取年份的后两位数字
---------------------------------------------------------------------------------
(三) 以简体中文显示日期结果
(1)如果以简体中文显示日期结果,那么可以将会话的nla_language参数设置为:
simplified chinese
(2)alter session set nls_language = 'simplified chinese'
select * from emp;
--设置简体中文的日期格式
alter session set nls_language = 'SIMPLIFIED CHINESE';
select empno,ename,hiredate from emp;
--------------------------------------------------------------------------------
(四)以美国英语显示日期结果
(1)如果以美国英语显示日期结果,那么可以将会话的nla_language参数设置为:
American
(2)alter session set nls_language = 'AMERICAN';
--设置美国英语的日期格式
alter session set nls_language = 'AMERICAN';
select empno,ename,hiredate from emp;
--------------------------------------------------------------------------
(五)以特定格式显示日期结果
(1)如果希望定制日期显示格式,并按照特定方式显示日期结果,那么可以设置会话的
nls_date_format参数
(2)alter session set nls_date_format='YYYY/MM/DD';
--设置特定格式
alter session set nls_date_format='YYYY/MM/DD';
select empno,ename,hiredate from emp;
---------------------------------------------------------------------------
4-2 Oracle查询语句中算术运算符的使用
(一)算术运算符
算术运算符可应用在数字和日期的列上
例:
(1)需求:应用scott.emp表查询雇员编号,雇员名,雇员月工资,雇员年收入
--select * from emp;
--select empno,ename,sal,sal*12 from emp;
(2)需求:应用scott.emp表查询雇员编号,雇员名,雇员年收入+半月工资
--select empno, ename, sal*12+sal/2 from emp;
(3)需求:应用scott.emp表查询雇员编号,雇员名,雇员年收入+200奖金
--select empno, ename, 200+sal*12 from emp;
(4)需求:应用scott.emp表查询雇员编号,雇员名,月工资每月涨100后的年工收入
--select empno, ename, (sal+100)*12 from emp;
(5)需求:应用scott.emp表查询雇员编号,雇员名,雇员月工资,补助(comm),实发工资
--select empno, ename, sal, comm, sal+comm from emp;
---------------------------------------------------------------------------
4-3 查询语句中列的别名、连接符、字符串
--列的别名
不使用列的别名
select empno, ename, sal*12 from emp;
使用列的别名的方式
(1)直接跟别名
select empno 雇员编号, ename 雇员名, sal*12 年收入 from emp;
select empno "雇员编号", ename "雇员名", sal*12 "年收入" from emp;
(2)列名和别名之间用as连接
select empno as 雇员编号, ename as 雇员名, sal*12 as 年收入 from emp;
select empno "雇员编号", ename "雇员名", sal*12 "年收入" from emp;
select empno "雇员编号", ename "雇员名", sal*12 年收入 from emp;
select empno "雇员编号", ename "雇员名", sal*12 as 年收入 from emp;
--连接符
连接列的字符串特点:
(1)字符串可以是select列表中的字符,数字,日期
(2)日期和字符只能在单引号中出现
(3)每当返回一行时,字符串被输出一次
select ename||'的月工资是:'||sal||'岗位是:'||job as 雇员职位信息 from emp;
select ename||5 from emp;
-----------------------------------------------------------------------------
4-4 基本查询--过滤数据(比较运算)
过滤数据:使用where字句,将不满足条件的行过滤掉
(1)where字句中使用数字值
当在where字句中使用数字值时,即可用直接引用数字值,也可用用单独引号引住数字值
例:
--数字值的情况
select * from emp where deptno=20;
(2)where字句中使用字符值
当where字句使用字符值,必须给字符值加上单引号
--字符值
select * from emp where job='MANAGER';
(3)where字句中使用日期值
当where字句中使用日期值时,必须给日期值加单引号,且日期值必须符合日期语言和显示格式
--日期值
select * from emp where hiredate = '02-4月-81';
--比较运算
select * from emp where sal = 3000;
select * from emp where sal >= 3000;
select * from emp where sal < 3000;
select * from emp where sal <> 3000;
select * from emp where sal != 3000;
select * from emp where sal>1000 and sal<3000;
select * from emp where sal<1000 or sal>3000;
-----------------------------------------------------------------------------
4-5 基本查询--过滤数据(范围模糊查询等)
(一)范围查询between..and
select empno, ename, sal from emp where sal between 1500 and 3000;
等价于
select empno, ename, sal from emp where sal>=1500 and sal<=3000;
(二)范围查询in
select empno,ename, job from
where job in ('SALESMAN','MANAGER','CLERK');
等价于
select empno,ename, job from emp
where job = 'salesman’or job = 'manager’or job ='clerk';
(三)模糊查询like
select * from emp where ename like 'J%';
select * from emp where ename like '_AR%';
select * from emp;
select * from emp where ename like 'G\_%' escape '\';
(四)判断空值 is null/is not null
select empno, ename, sal, comm from emp where comm is null;
select empno, ename, sal, comm from emp where comm is not null;
-----------------------------------------------------------------------
4-6 基本查询--过滤数据(逻辑运算)
4-6 基本查询--过滤数据(逻辑运算)
逻辑运算符
(1)逻辑操作符and
select empno, ename, job, deptno from emp where job='MANAGER' and deptno=10;
--------------------------------------------------------------------------------
(2)逻辑操作符or
select empno, ename, job, sal from emp where job='MANAGER' or sal>2000;
---------------------------------------------------------------------------
(3)逻辑操作符not
select empno, ename,job from emp where job not in ('CLERK','SALESMAN','MANAGER');
------------------------------------------------------------------------------
(1)逻辑操作符--混合
not》and》or
select empno,ename, job, sal from emp where (sal>2000 or deptno=30) and job not in ('PRESIDENT','MANAGER');
----------------------------------------------------------------------------
4-7 基本查询--排序数据
(一)排序数据order by子句
asc升序/desc降序
-------------------------------------------------------------------------
(一)单列排序(升序或降序排序,空值靠较大值)
select ename, comm from emp order by comm asc;
------------------------------------------------------------------------
(二)使用列的别名排序
select empno, ename, sal*12 年收入 from emp order by 年收入 desc;
------------------------------------------------------------------------
(三)多列排序
select empno,ename, deptno, sal from emp order by deptno asc, sal desc;