Oracle SQL语句

--给表添加注解
comment on table emp is'雇员表';
--给列添加注解
comment on column emp.ename is'雇员姓名';
--查询雇员表中部门编号是10的员工
select empno,ename from emp where deptno=10;


--distinct去重
select distinct deptno from emp;
--去重也可以针对多个字段,多个字段中只要有一个字段不匹配就算是不同的记录
select distinct deptno,sal from emp;

--在查询过程中可以给表或者列添加别名
select e.empno 雇员编号,e.ename 雇员名称,e.job 雇员工作 from emp e where e.deptno=10;
--给列起别名可以加as,也可以不加
select e.empno as 雇员编号,e.ename as 雇员名称,e.job as 雇员工作 from emp e where e.deptno=10;
--给列起别名,如果别名中有空格,则整个别名要用“”包含起来
select e.empno as "雇员 编号",e.ename as "雇员 名称",e.job as "雇员 工作" from emp e where e.deptno=10;
--查询表中的所有字段,可以使用*,但是只查询固定数据的话不建议使用*,因为会降低检索性能,导致效率低
select * from emp;

-- =
select * from emp where deptno = 20;
-- != 和 <> 都是不等于的意思
select * from emp where deptno != 20;
select * from emp where deptno <> 20;
-- <
select sal from emp where sal < 1500;
-- >
select sal from emp where sal > 1500;
-- <=
select sal from emp where sal <= 1500;
-- >=
select sal from emp where sal >= 1500;
-- any表示取其中任意一个
select sal from emp where sal > any(100,1500,3000);
-- some 和 any 是同一个效果,只要大于其中某一个都会成立
select sal from emp where sal > some(100,1500,3000);
-- all 大于或者所有的值才会成立
select sal from emp where sal > all(1000,1500,3000);
select sal from emp where sal < all(1000,1500,3000);
--is null,在sql的语法中,null表示一个特殊的含义,null != null,不能使用=或者!=判断,需要使用is或者is not来判断
select * from emp where comm is null;
select * from emp where comm is not null;
--between x and y 该范围包含x和y的值
select * from emp where sal between 1500 and 3000; 
select * from emp where sal >= 1500 and sal <= 3000;
--in(list),以下两种方法结果一样
select * from emp where deptno in (10,30) ;
select * from emp where deptno = 10 or deptno = 30;
--not in(list),以下两种方法结果一样
select * from emp where deptno not in (10,30) ;
select * from emp where deptno != 10 and deptno != 30;

/*exists(sub-query),当exists中的子查询语句能查到对应结果的时候,
意味着条件满足
相当于双层for循环
*/
--查询部门编号为10或者20的员工,要求使用exists
select *
  from emp e
 where exists (select deptno
          from dept d
         where (d.deptno = 10 or d.deptno = 20)
            and e.deptno = d.deptno);
           
            
/*
like 模糊查询
在like的语句中,需要使用占位符或者通配符
_,某个字符或者数字仅出现一次
%,任意字符出现任意次数
escape,使用转义字符,可以自己规定转义字符
使用like的效率比较低
like中最好不要用%开头,这样效率最低
*/  
--查询名字以‘S’开头的用户
select * from emp where ename like('S%');    
--查询名字以S开头且倒数第二个字符为T的用户
select * from emp where ename like('S%T_');
--查询名字中带%的用户
select * from emp where ename like('%\%%') escape('\');
select * from emp where ename like('%a%%') escape('a');

/*order by 进行排序操作
默认情况下是升序
asc:默认的排序
desc:降序的排序方式
排序是按照自然顺序进行排序的
如果是数值,那么按照从大到小,如果是字符串,那么按照字典序排序
在进行排序的时候可以使用呢多个字段,且多个字段可以使用不同的排序方式
每次在执行order by的时候相当于是做了全排序
*/
select * from emp order by sal;
select * from emp order by sal desc;
select * from emp order by ename;
select * from emp order by sal desc,ename asc;


--使用计算字段
--字符串连接符
select 'my name is ' ||ename from emp;
select 'my name is ' ||ename name from emp;
select concat('my name is ',ename)from emp;

--dual是Oracle数据库中的一张虚拟表,没有实际的数据,可以用来做测试
select 100 + null from dual;

--计算所有员工的年薪(null做任何运算都还是为null,因此要将空进行转换)
--引入函数nvl,nvl(arg1,arg2),如果arg1是空,那么返回arg2,如果不是空,则返回原来的值
select ename,(e.sal+nvl(e.comm,0))*12 from emp e;

--A
select * from emp where deptno = 30;

--B
select * from emp where sal > 1000;

--并集、将两个集合中的所有数据都进行显示,但是不包含重复的数据
select * from emp where deptno = 30 union select * from emp where sal > 1000;


--全集、将两个集合中的数据都进行显示,但是不进行去重
select * from emp where deptno = 30 union all select * from emp where sal > 1000;

--交集、两个集合中交叉的数据集,只显示一次
select * from emp where deptno = 30 intersect select * from emp where sal > 1000;

--差集、包含在A集合,而不包含在B集合中的数据,差集结果跟A和B的顺序与有关
select * from emp where deptno = 30 minus select * from emp where sal > 1000;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值