Oracle数据库学习笔记(二)——简单查询

1.简单查询语句的语法

select 列名,列名,...,列名 from 表名;

select ... from :它是查询语句的关键字
select后面跟是你要从数据库里取的数据
from后面跟表名,表示你要从哪张中读取这些数据

如:
--查询emp表中员工的编号、姓名、工作、工资
select empno,ename,job,sal from emp;

--查询emp表中所有列的信息
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;

如果要查询表中所有列的信息,那么select和from之间的列名可以用*来表示,注意:*号的执行效率比写列名时的执行效率低,(*在执行sql语句时,oracle会去查数据库中的数据字典,查询这个张表都有哪些列,然后查出这张表的所有列的数据)

2.注释

单行注释:–(俩个下划线)
多行注释:以/* 开始,以*/结尾

3.SQL中的别名

别名语法:
      对象名 as 别名
      对象名  别名
如:
select empno as 员工编号,ename 姓名,job 工作,mgr 上级编号,hiredate 入职日期,sal 工资,comm 佣金,deptno 部门编号 from emp;

注意:给表、视图取别名时不能加as
select e.* from emp e; --select * from emp; 
select e.empno,e.ename,e.job,e.sal from emp e;

select emp.empno,emp.ename,emp.job,emp.sal from emp;

4.带条件的查询语句

select 列名,列名,...,列名 from 表名 where 条件表达式;

where:条件关键字,后面跟条件表达式,这个条件一般是和数据库中列相关

4.1 条件表达式

<、>、<=、>=、=、!=、<>(!=、<>代表不等于)

--查询工资大于1500的员工信息
select * from emp where sal>1500;
--查询名字叫SMITH的员工的信息
select * from emp where ename='SMITH';

说明:在oracle数据库中,数字类型直接写就可以,字符串类型的数据要用单引号括起来

--查询不是10号部门的员工的信息
select * from emp where deptno!=10;
select * from emp where deptno<>10;

4.2 in和notin

in:后面跟一个集合或者子查询
oracle中表示一个简单的集合 ,(元素,元素,元素,... 元素) 例如 (1,2,3,4,5)  ('a','b','c','d')
--查询emp表中,工资是800,1600,或者3000的员工信息

select * from  emp  where sal in(800,1600,3000);

not in:和in是相反的
select * from  emp  where sal not in(800,1600,3000);

4.3 模糊查询 like、’%’、’_'和not like

like:它只用在字符串列,表示对字符串进行模糊匹配
     有两个点位符:
           %:表示在这个%出现的地方可以有0个或者多个字符
           _: 表示在_出现的地方有且只能一个任意字符
--查询员工姓名是S结尾的员工信息
select * from emp where ename like '%S';

--查询emp表中员工姓名的第二个字符是L的员工信息
select * from emp where ename like '_L%';

--查询emp表中员工姓名第三个字符是A的员工信息
select * from emp where ename like '__A%';

insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(7311,'qer_q%oasf','etl',7369,sysdate,3000,200,null);

--查询员工姓名中有_的员工信息

select * from emp where ename like '%_%';
like中的转义字符:\
在新版的oracle中,使用转义字符需要手动去定义 定义  escape '\'
转义字符,它会把紧跟在它后面的字符当作一个普通的字符去处理
select * from emp where ename like '%\_%' escape '\';

select * from emp where ename like '___\_%' escape '\';

select * from emp where ename like '%a%%'  escape 'a';

not like:和like相反

--查询名字中没有S的员工信息
select * from emp swhere ename not like '%S%';

4.4 all、any

all、any:后面都跟一个集合或者子查询
>all:表示大于集合中最大的元素  >all(1,2,3,4,5) 等价于 >5
<all:表示小于集合中最小的元素  <all(1,2,3,4,5) 等价于 <1
>any:表示大于集合中最小的元素  >any(1,2,3,4,5) 等价于 >1
<any:表示小于集合中最大的元素  <any(1,2,3,4,5) 等价于 <5
--查询员工信息,要求员工的工资比以下的值都低 1600,2000,3000
select * from emp where sal <all(1600,2000,3000);

--查询比以下任意一个(1600,2000,3000)工资高的员工信息
select * from emp where sal>any(1000,2000,3000);

--查询工资比所有人(1600,2000,3000)都高的员工信息
select * from emp where sal > all(1600,2000,3000);

4.5 exists和not exists

exists:它不和任何列一起使用,后面跟的是一个子查询(查询语句select语句),如果子查询能查出结果,那么这个条件就是成立的,查不出结果条件不成立
not exists:和exists相反

select * from emp where exists(select * from emp where 1=0);

select * from emp where exists(select * from emp);

4.6 条件连接符

and:表示并且,当and连接的两个条件同时成立时,总条件才算成立,只要有一个条件不成立,整体不成立
or:表示或者,当or连接的两个条件有一个条件成立,整体条件成立,只有两个条件都不成立时,整体才不成立
between value1 and value2:value1的值比value2值小,value1和value2一般是数字类型,还可以是日期,表示值在value1和value2之间
         它的取值是包含value1和value2的。
--查询10号部门,工资大于1000的员工信息
select * from emp where deptno=10 and sal>1000;


--查询10号部门,或者工资小于2000的员工信息
select * from emp where deptno=10 or sal<2000;

--查询工资在1000到3000之间的员工信息
select * from emp where sal>=1000 and sal<=3000;

select * from emp where sal between 1000 and 3000;

--查询工资大于1000并且小于3000的员工信息
select * from emp where sal>1000 and sal<3000;

select * from emp where sal between 1000 and 3000 and sal!=1000 and sal!=3000; 

is null:表示这个值是空时条件成立
is not null:表示值不为空时条件成立

select * from emp where comm is null;

select * from emp where comm is not null;

4.7 dual表

dual表:它是oracle内置的一个单行表,

select 1 from dual;
select 'abc' from dual;
select 2*3 from dual;
select 1,2,3,4 from dual;

select 1 from emp;
--查询员工的年薪
select sal*12 from emp;
Select ‘年薪’, sal*12 from emp;

猜你喜欢

转载自blog.csdn.net/Hao1999_/article/details/120654471