--给表添加注解commentontable emp is'雇员表';--给列添加注解commentoncolumn emp.ename is'雇员姓名';--查询雇员表中部门编号是10的员工select empno,ename from emp where deptno=10;--distinct去重selectdistinct deptno from emp;--去重也可以针对多个字段,多个字段中只要有一个字段不匹配就算是不同的记录selectdistinct 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 isnull;select*from emp where comm isnotnull;--between x and y 该范围包含x和y的值select*from emp where sal between1500and3000;select*from emp where sal >=1500and sal <=3000;--in(list),以下两种方法结果一样select*from emp where deptno in(10,30);select*from emp where deptno =10or deptno =30;--not in(list),以下两种方法结果一样select*from emp where deptno notin(10,30);select*from emp where deptno !=10and deptno !=30;/*exists(sub-query),当exists中的子查询语句能查到对应结果的时候,
意味着条件满足
相当于双层for循环
*/--查询部门编号为10或者20的员工,要求使用existsselect*from emp e
whereexists(select deptno
from dept d
where(d.deptno =10or 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 orderby sal;select*from emp orderby sal desc;select*from emp orderby ename;select*from emp orderby 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数据库中的一张虚拟表,没有实际的数据,可以用来做测试select100+nullfrom dual;--计算所有员工的年薪(null做任何运算都还是为null,因此要将空进行转换)--引入函数nvl,nvl(arg1,arg2),如果arg1是空,那么返回arg2,如果不是空,则返回原来的值select ename,(e.sal+nvl(e.comm,0))*12from emp e;
--Aselect*from emp where deptno =30;--Bselect*from emp where sal >1000;--并集、将两个集合中的所有数据都进行显示,但是不包含重复的数据select*from emp where deptno =30unionselect*from emp where sal >1000;--全集、将两个集合中的数据都进行显示,但是不进行去重select*from emp where deptno =30unionallselect*from emp where sal >1000;--交集、两个集合中交叉的数据集,只显示一次select*from emp where deptno =30intersectselect*from emp where sal >1000;--差集、包含在A集合,而不包含在B集合中的数据,差集结果跟A和B的顺序与有关select*from emp where deptno =30 minus select*from emp where sal >1000;