oracle中的单表查询,单字段与多字段排序

—单表的查询学习
–查询表的所有数据 select *from 表名; *代表所有

select *from emp;

–查询表中指定字段的值 ;select 字段名1,字段名2,…from表名

select empno from emp;
select empno,ename from emp;

–给查询结果中的字段使用别名
–在字段名后使用关键字 字段名 as “别名”
–作用:方便查看查询结果
–注意:as关键字可以省略不写,别名中没有特殊字符双引号也可以省略不写

select empno 员工编号,ename "员工姓名",job as 工作,mgr as "领导编号" from emp;

–连接符:select 字段名||‘字符’||字段名||…from 表名
–||为sql语句的字符连接符,使用在select和from之间
–字符连接格式为 字段名||‘字符’||字段名
–注意:一个拼接好的连接在结果集中作为一个新的字段显示,可以使用别名优化字段显示

select empno,ename from emp;
select empno||'的姓名是'||ename from emp;
select empno||'的姓名是'||ename as "信息",job||'哈哈'||mgr from emp;
-

-去除重复,select distinct 字段名,字段名,…from 表名
–注意:去除重复的规则是按照行进行去除的,多行数据完全相同取其一

select distinct job,mgr from emp;

–排序
–单字段排序

      --select *from 表名 order by 字段名 asc 升序排序  asc可以省略不写
       --select *from 表名 order by 字段民 desc 降序排序
select *from emp order by empno desc;
select empno,ename,job from emp order by ename asc;
  

–多字段排序

–select *from emp order by 字段名1,字段名2…
–先按照字段1排序,如果字段1的值相同,则按照字段2进行排序…

select *from emp order by empno,ename;   --多字段排序

–字段的逻辑运算


```sql
select empno,ename,job,sal*2+1000 from emp;
select empno,ename||'好多钱',job,sal*2+1000 from emp;
select empno,ename,job,sal*2+1000,sal+comm from emp;
-----------------------------------------------------------------------------------------

–使用


where子语句进行查询筛选
--select 字段名,字段名,...from表名 where 筛选条件
--单筛选条件
           --使用运算符进行筛选=,>,>=,<,<=,<> 单个条件中
           --注意:如果条件中的值为字符,必须使用单引号括起来
       

```sql
    --查询所有员工的工资信息
           select empno,ename,sal+comm as 薪资 from emp;
           --查询SMITH的个人信息
           select *from emp where ename='SMITH';
           --查询SMITH的薪资信息,逻辑运算符=
           select empno,ename,sal,sal+comm from emp where ename='SMITH';
           --查询工资大于2000的员工信息,逻辑符>
           select *from emp where sal>'2000';
           --查询工资不等于3000的员工信息
           select *from emp where sal<>3000 order by sal;         
-

-练习

--查看工资大于1250的员工信息
select ename,job from emp where sal>1250;
--查看工资大于等于2000的员工信息
select *from emp where sal>=2000;
--查看工资低于2000的员工信息
select *from emp where sal<2000;
--查看工资不等于1500的员工信息
select *from emp where sal<>1500;
--查看入职日期在81年后的员工信息
--注意:oracle 默认的日期格式为日-月-年,示例'03-1月-1981’
select *from emp order by hiredate;
select *from emp where hiredate>='01-1月-1981' order by hiredate;
    --多条件筛选(where子句关键字:and,or,like,is null,is not null,between and )
          --查询工资在2000-3000之间的员工信息
          --使用and关键字,多条件同时成立的筛选使用and关键字进行条件连接
          select *from emp where sal>=2000 and sal<=3000
          --使用between and 关键字进行条件连接,包含两头的数据
          select *from emp where sal between 2000 and 3000
          --查询工作为SALESMAN,ANALYST,MANAGER的员工信息
            --使用or关键字,进行或条件的筛选
          select *from emp where job='SALESMAN' or job='ANALYST'or job='MANAGER' order by job
          --使用in关键字,也可以进行或筛选,但是in中的内容只能为一个字段的值
          select *from emp where job in('SALESMAN','ANALYST','MANAGER')
          --查询姓名中包含s的,以s开头的,以s结尾的,第二个字符为A的。(模糊查询)
          --%表示任意多个的任意字符
                 --select *from 表名 where 字段名 like '%字符%’查询包含指定字符的数据
                 select *from emp where ename like '%S%'  --包含s的
                 select *from emp where ename like 'S%'   --以S开头的
                 select *from emp where ename like '%S'   --以s结尾的
                 select *from emp where ename like '_A%'  --第二个字符为A的  _表示任意字符
                 --escape将指定的字符变成转义字符
                 --转义字符可以将特殊字符转为普通字符
                 select *from emp where ename like '%/_%' escape '/'; 
                 select *from emp for update
          --查询有津贴的员工信息
          --select *from 表名 where 字段名 is null 字段值为null
          --select *from 表名 where 字段名 is not null 字段值不为null
          --多个条件使用and关键字进行连接,筛选的是符合所有条件的数据
                    --select *from 表名 where 筛选条件1 and 条件2 and...
          select *from emp where comm is not null and comm>0;
          -------------------------------------------------------------------
 --1.选择部门30中的所有员工
 select *from emp where deptno=30;
 --2.列出所有办事员(CLERK)的姓名,编号和部门编号
 select empno,ename,deptno from emp where job='CLERK';
 --3.找出佣金高于薪金的员工
 select *from emp where comm>sal;
 --4.找出佣金高于薪金60%的员工
 select *from emp where comm>sal*0.6;
 --5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料
 select *from emp where (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK';
 --6.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK),即不是经理又不是办事员但其薪金大于或等于2000的员工的详细资料
 select *from emp where (job<>'MANAGER' and job<>'CLERK' and sal>=2000) or (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK'; 
 --7.找出收取佣金的员工的不同工作
 select job from emp where comm is not null
 --8.找出不收取佣金或收取佣金低于100的员工
 select *from emp where comm is null or comm<100
 --9.找出各月倒数第三天受雇的员工
 select *from emp where hiredate=last_day(hiredate)-2
 --10.找出早于12年前受雇的员工
 select *from emp where hiredate<'01-1月-1982'order by hiredate
 --11.以首字母大写的方式显示所有员工的姓名.
 select INITCAP(ename) from emp
 --12.显示正好为5个字符的员工的姓名
 select ename from emp where length(ename)=5
 --13.显示不带有"R"的员工的姓名
 select *from emp where ename not like '%R%';
 --13.显示不带有“R”的员工和姓名
 select *from emp where ename not like '%R%'
 --14.显示所有员工姓名的前三个字符
 select substr(ename,1,3) from emp
 --15.显示所有员工的姓名,用a替换所有“A”
 select replace(ename,'A','a')from emp
 --16.显示满35年服务年限的员工的姓名和受雇如期
 select ename,hiredate,floor((sysdate-hiredate)/365) from emp where (sysdate-hiredate)/365>35
 --17. 显示员工的详细资料,按姓名排序
 select * from emp order by ename
 --18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面。
 select ename,hiredate,floor((sysdate-hiredate)/365) years from emp order by hiredate asc
 --19.显示所有员工的姓名、工作和薪金,按工作的年限排序,若工作相同则按薪金排序
 select ename,job,sal from emp order by job desc,sal
 --20.显示所有员工的姓名、加入公司的年份和月份,按受雇佣日期所在月份排序,若月份相同则将最早年份的员工排在前边
 select ename,hiredate,to_char(hiredate,'yyyy')years,to_char(hiredate,'mm') ms from emp order by ms,hiredate
 --21.显示在一个月为30天的情况所有员工的日薪金,忽略余数
 select floor((sal+nvl(comm,0))/30) from emp  
 --22.找出在(任何年份的)2月受聘的所有员工
 select *from emp where to_char(hiredate,'mm')=2 
 --23.对于每个员工,显示其加入公司的天数
 select ename,sysdate-hiredate from emp.
 --24.显示姓名字段的任何位置包含"A"的所有员工的姓名
 select ename from emp where ename like '%A%'
 --25.以年月日的方式显示所有员工的服务年限
 select ename,floor(floor(months_between(sysdate,hiredate))/12),mod(floor(months_between(sysdate,hiredate)),12),floor(mod(sysdate-hiredate,30))from emp
            
----------------------------------------------------------------------------------------------
 --查询工作为SALSMAN,MANAGER并且工资大于2500的员工信息
 --and关键字的执行级别高于or,可以使用小括号提升条件的执行级别,使用了小括号的级别是最高的
 select *from emp where (job='SALESMAN' or job='MANAGER') and sal>2500
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值