( 经典的练习题 作为新手也是去练习 和理解思路)
利用scott用户存在的几张表(emp,dept)为大家演示如何使用select语句,select语句在软件编程中非常有用!
部门表(dept)
№ | 名称 | 类型 | 描述 |
1 | DEPTNO | NUMBER(2) | 表示部门编号,由两位数字所组成 |
2 | DNAME | VARCHAR2(14) | 部门名称,最多由14个字符所组成 |
3 | LOC | VARCHAR2(13) | 部门所在的位置 |
员工表(emp)
№ | 名称 | 类型 | 描述 |
1 | EMPNO | NUMBER(4) | 雇员的编号,由四位数字所组成 |
2 | ENAME | VARCHAR2(10) | 雇员的姓名,由10位字符所组成 |
3 | JOB | VARCHAR2(9) | 雇员的职位 |
4 | MGR | NUMBER(4) | 雇员对应的领导编号,领导也是雇员 |
5 | HIREDATE | DATE | 雇员的雇佣日期 |
6 | SAL | NUMBER(7,2) | 基本工资,其中有两位小数,五倍整数,一共是七位 |
7 | COMM | NUMBER(7,2) | 奖金,佣金 |
8 | DEPTNO | NUMBER(2) | 雇员所在的部门编号
简单的查询语句
|
一,查看表结构
desc emp;1,查询所有列
select * from emp;
切忌动不动就用select *
set timing on; 打开显示操作时间的开关,可以在下面显示查询时间。
在数据多的时候 可以查看语句的查询速度(好的查询语句可以更好更快的进行查询)
2,查询制定列
select ename, sal, job, deptno from emp;
取消重复行distinct
select distinct deptno, job from emp;
查询SMITH所在部门,工作,薪水
select deptno,job,sal from emp where ename = 'SMITH';
注意
:oracle对内容的大小写是
区分
的,所以ename='SMITH'和ename='smith'是不同的
问题:如何显示每个雇员的年工资?
select sal*13+nvl(comm, 0)*13 "年薪" , ename, comm from emp;
3,使用列的别名
select ename "姓名", sal*12 AS "年收入" from emp;
4,如何处理null值
使用nvl函数来处理
如何连接字符串(||)
select ename || ' is a ' || job from emp;
5,使用where字句
问题:如何显示工资高于3000的 员工?
SELECT * FROM emp WHERE sal > 3000;
问题:如何查找1982.1.1后入职的员工?
SELECT ename,hiredate FROM emp WHERE hiredate >'1-1月-1982';
6,如何使用like操作符
%:表示0到多个字符 _:表示任意单个字符
问题:如何显示首字符为S的员工姓名和工资?
SELECT ename,sal FROM emp WHERE ename like 'S%';
如何显示第三个字符为大写O的所有员工的姓名和工资?
SELECT ename,sal FROM emp WHERE ename like '__O%';
问题:如何显示empno为7844, 7839,123,456 的雇员情况?
SELECT * FROM emp WHERE empno in (7844, 7839,123,456);
使用is null的操作符
问题:如何显示没有上级的雇员的情况?
错误写法:
select * from emp where mgr= '';
正确写法:
SELECT * FROM emp WHERE mgris null;
8,使用逻辑操作符号 问题:查询工资高于500或者是岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J?
SELECT * FROM emp WHERE (sal >500 or job = 'MANAGER') and ename LIKE 'J%';
9,使用order by 字句 默认asc
问题:如何按照工资的从低到高的顺序显示雇员的信息?
SELECT * FROM emp ORDER by sal; ,
问题:按照部门号升序而雇员的工资降序排列
SELECT * FROM emp ORDER by deptno, sal DESC;
select ename, (sal+nvl(comm,0))*12 "年薪" from emp order by "年薪" asc;
(别名需要使用“”号圈中,英文不需要“”号 )