验证中...
私信发送成功
语言: SQL
分类: 数据库相关
最后更新于 2017-09-13 22:08
数据的查询与排序
原始数据 复制代码
------------------------第三章:查询与排序------------------------------
------------查询-------------
--例1、查询dept表全部数据
select * from dept;
--查询指定字段(过滤列)
--例2、查询部门名称和位置
select dname,loc from dept;
--计算列
--例3、查询员工的姓名和年薪
select ename,sal*12 from emp;
/*
虚表(dual):如果需要计算的列或字段不来自任何一张表,例如我们想查询3*4的结果,其中3和4不来自任何一张表,
但oracle的查询语句必须满足select * from 表名的形式,所以我们可以使用dual这张虚拟表作为查询语句的表名,
语句如下 select 3*4 from dual,虚拟表只有一个字段 DUMMY 类型是varchar2(1)
*/
--例4、询3*4的结果
select 3*4 from dual;
--给字段加别名
--例5、查询员工姓名和年薪,年薪字段显示成 结果。
select ename,sal*12 as 结果 from emp;
--也可以也成:
select ename,sal*12 结果 from emp;
--注意如果别名本身带有空格,需要用双引号括起来
--例6:年薪字段想显示成 结 果,语句如下
select ename,sal*12 as "结 果" from emp;
--字符串和字符串连接:||
--例7:查员工的姓名和月薪, 要求数据的显示格式如下:姓名: SMITH,月薪:800
select '姓名:'||ename || ',月薪:' || sal as ename_sal from emp;
--如果字符串中本身就有单引号,想显示这个单引号,需要使用两个单引号进行转义,即’’代表'
--例8:想显示每个员工姓名后连接上 123’4 需要使用如下sql语句
select ename ||'123''4' ename from emp;
--NVL函数
-- 例9:求真正的年薪(带年终奖),使用如下语句会发生错误
select ename,sal*12+comm as annual_sal from emp;
-- 原因是null和任何数参与四则运算都返回null
-- nvl(comm,0)函数介绍, 如果第一个参数为null,则返回第二个参数(0),
-- 如果第一个参数不为null,则函数返回第一个参数本身
select ename,sal*12+nvl(comm,0) as annual_sal from emp;
--查询系统当前时间
select sysdate from dual;
--使用distinct关键字去掉重复行
--例:查看员工到底来自哪几个部门,sql语句如下
select distinct deptno from emp;
--例:查一下一共有几个工种,sql语句如下
select distinct job from emp;
-- 如果distinct修饰两个字段,代表两个字段组合起来不能重复
select distinct deptno,job from emp;
-------------------------------过滤行where ------------------------
-- 例:查询部门编号为10的员工的全部信息
select * from emp where deptno=10;
--例:查询薪水大于1500的员工姓名,工资
select ename,sal from emp where sal>1500;
--例:查询部门编号不是10的员工姓名和薪水以及部门编号。注意:<>表示不等于,也可以用!=表示
select ename,sal ,deptno from emp where deptno<>10;
select ename,sal ,deptno from emp where deptno!=10;
--使用between and 确定范围
--例如:查询薪水大于等于800小于等于1500的员工姓名和工资
select ename,sal from emp where sal between 800 and 1500;
-- NULL (空值是无效的,未指定的,未知的或不可预知的值,空值不是空格或0,包含空值的数学表达式的值都是空值。)
-- 例如:查询没有奖金的员工姓名和工资、奖金
select ename,sal,comm from emp where comm is null;
-- 使用in简化多个or
例如:查询薪水是800或1500或2000的员工的姓名和薪水、奖金
select ename,sal,comm from emp where sal=800 or sal=1500 or sal=2000;
select ename,sal,comm from emp where sal in(800,1500,2000);
--例如:查询部门编号为10并且薪水大于1000的员工的姓名和工资
select ename,sal from emp where deptno=10 and sal>1000;
--模糊查询
-- 使用like关键字,支持条件的模糊查询
-- _ :一个字母
-- % :代表0个或多个字母
-- 其余的字符代表身
-- 要想查带%的字符串 需要用到转义字符\%
--例:查询姓名里面包含ALL的员工姓名
select ename from emp where ename like '%ALL%'
-- 需求2:查询姓张的同学
select * from student where sname like '张%'
-- 需求3:查询第二个字母为A的员工姓名
select ename from emp where ename like '_A%'
-- 使用order by对过滤后的数据进行排序 asc表示升序 desc表示降序, 注意:不写asc的话 默认按升序排列
-- 需求1:查询所有部门信息,按部门编号降序排列
select * from dept order by deptno desc
-- 需求2:查询所有的员工的信息,根据薪水升序排列
select * from emp order by sal asc
-- 需求3:查询员工的姓名、薪水、部门编号,先按部门编号升序、部门编号相同的按姓名降序
select ename,sal,deptno from emp order by deptno asc,ename desc

评论列表( 0 )

你可以在登录后,对此项目发表评论