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;