oracle 表基本查询
介绍
在我们讲解的过程中我们利用scott 用户存在的几张表(emp,dept)为大家演示如何使用select
语句,select 语句在软件编程中非常有用,希望大家好好的掌握。
emp 雇员表
clerk 普员工
salesman 销售
manager 经理
analyst 分析师
president 总裁
mgr 上级的编号
hiredate 入职时间
sal 月工资
comm 奖金
deptno 部门
dept 部门表
deptno 部门编号
accounting 财务部
research 研发部
operations 业务部
loc 部门所在地点
salgrade 工资级别
grade 级别
losal 最低工资
hisal 最高工资
简单的查询语句
查看表结构
DESC emp;
查询所有列
SELECT * FROM dept;
切忌动不动就用select *
SET TIMING ON; 打开显示操作时间的开关,在下面显示查询时间。 CREATE TABLE users(userId VARCHAR2(10), uName VARCHAR2 (20), uPassw VARCHAR2(30)); INSERT INTO users VALUES('a0001', '啊啊啊啊', 'aaaaaaaaaaaaaaaaaaaaaaa');
--从自己复制,加大数据量 大概几万行就可以了 可以用来测试sql 语句执行效率
INSERT INTO users (userId,UNAME,UPASSW) SELECT * FROM users; SELECT COUNT (*) FROM users;统计行数
查询指定列
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'是不同的
使用算术表达式 nvl null
问题:如何显示每个雇员的年工资?
SELECT sal*13+nvl(comm, 0)*13 "年薪" , ename, comm FROM emp;
使用列的别名
SELECT ename "姓名", sal*12 AS "年收入" FROM emp;
如何处理null 值
使用nvl 函数来处理
如何连接字符串(||)
SELECT ename || ' is a ' || job FROM emp;
使用where 子句
问题:如何显示工资高于3000 的 员工?
SELECT * FROM emp WHERE sal > 3000;
问题:如何查找1982.1.1 后入职的员工?
SELECT ename,hiredate FROM emp WHERE hiredate >'1-1 月-1982';
问题:如何显示工资在2000 到3000 的员工?
SELECT ename,sal FROM emp WHERE sal >=2000 AND sal <= 3000;
如何使用like 操作符
%:表示0 到多个字符 _:表示任意单个字符
问题:如何显示首字符为S 的员工姓名和工资?
SELECT ename,sal FROM emp WHERE ename like 'S%';
如何显示第三个字符为大写O 的所有员工的姓名和工资?
SELECT ename,sal FROM emp WHERE ename like '__O%';
在where 条件中使用in
问题:如何显示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 mgr is null;