( 经典的练习题 作为新手也是去练习 和理解思路)
利用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;
(别名需要使用“”号圈中,英文不需要“”号 )