(1)基础查询 SQL> --清屏 SQL> host cls SQL> --Linux上清屏: host clear SQL> --查询该用户下的表 SQL> show user; USER 为 "SCOTT" SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- DEPT TABLE EMP TABLE BONUS TABLE SALGRADE TABLE SQL> --查询员工的信息 SQL> desc emp; 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) SQL> select * from emp; SQL> --设置行宽 SQL> set linesize 150 SQL> / SQL> --设置列宽 SQL> col sal for 9999 SQL> col ename for a8 SQL> 解锁用户 alter user scott account unlock; SQL> --设置pagesize SQL> set pagesize 20 SQL> set feedback off --关闭 “已选择14行。”提示 SQL> set feedback on SQL> / SQL> --通过列名查询员工信息 SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp; SQL> -- * 和列名的方式哪个性能好?Oracle9i后,可以认为一样 之前是列名免解析较快, SQL> -- 查询员工的编号,姓名和薪水 SQL> select empno,ename,sal fomr emp; SQL> --修改sql SQL> / EMPNO ENAME SAL SAL*12 COMM SAL*12+COMM ---------- -------- ----- ---------- ---------- ----------- 7369 SMITH 800 9600 7499 ALLEN 1600 19200 300 19500 SQL> --关于空值 SQL> /* SQL> 1. 如果表达式中含有空值,则整个表达式为空 SQL> 2. 在SQL中,null!=null SQL> */ SQL> --1. 使用滤空函数nvl(a,b): 当a为空时,返回b SQL> ed 已写入 file afiedt.buf 1 select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0) 2* from emp SQL> / EMPNO ENAME SAL SAL*12 COMM SAL*12+NVL(COMM,0) ---------- -------- ----- ---------- ---------- ------------------ 7369 SMITH 800 9600 9600 7499 ALLEN 1600 19200 300 19500 7521 WARD 1250 15000 500 15500 SQL> -- 2. 在SQL中,null!=null SQL> --查询奖金为空的员工信息 SQL> select * 2 from emp 3 where comm=null; 未选定行 SQL> --过滤掉空值 SQL> select * 2 from emp 3 where comm is null; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO -------- -------- --------- ---------- -------------- ----- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20 7566 JONES MANAGER 7839 02-4月 -81 2975 20 SQL> --使用别名
SQL> --c命令 SQL> 2 2* fomr emp SQL> c /fomr/from 2* from emp SQL> / EMPNO ENAME SAL ---------- -------- ----- 7369 SMITH 800 SQL> select empno,ename,sal 2 fomr emp; fomr emp * 第 2 行出现错误: ORA-00923: 未找到要求的 FROM 关键字 SQL> --ed命令 SQL> ed 已写入 file afiedt.buf 1 select empno,ename,sal 2* from emp SQL> / EMPNO ENAME SAL ---------- -------- ----- 7369 SMITH 800 7499 ALLEN 1600 SQL> --算术表达式:查询员工的信息,要求有编号,姓名,月薪,年薪 SQL> select empno,ename,sal,sal*12 from emp; EMPNO ENAME SAL SAL*12 ---------- -------- ----- ---------- 7369 SMITH 800 9600 SQL> -- 查询员工的信息,要求有编号,姓名,月薪,年薪,奖金,年收入 SQL> select empno,ename,sal,sal*12,sal*12+comm 2 from emp; EMPNO ENAME SAL SAL*12 SAL*12+COMM ---------- -------- ----- ---------- ----------- 7369 SMITH 800 9600 7499 ALLEN 1600 19200 19500 SQL> ed 已写入 file afiedt.buf 1 select empno,ename,sal,sal*12,comm,sal*12+comm 2* from emp
SQL> select empno,ename,sal,sal*12,comm,sal*12+comm 2 from emp; EMPNO ENAME SAL SAL*12 COMM SAL*12+COMM --------- -------- ----- ---------- ---------- ----------- 7499 ALLEN 1600 19200 300 19500 SQL> ed 已写入 file afiedt.buf 1 select empno as "编号",ename "姓名",sal 月薪,sal*12 年薪,comm,sal*12+nvl(comm,0) 年收入 2* from emp SQL> / 编号 姓名 月薪 年薪 COMM 年收入 7369 SMITH 800 9600 9600 SQL> --问题:有无双引号的区别?双引号中可以有特殊字符 SQL> ed 已写入 file afiedt.buf 1 select empno as "编号",ename "姓名",sal 月 薪,sal*12 年薪,comm,sal*12+nvl(comm,0) 年收入 2* from emp SQL> / select empno as "编号",ename "姓名",sal 月 薪,sal*12 年薪,comm,sal*12+nvl(comm,0) 年收入 * 第 1 行出现错误: ORA-00923: 未找到要求的 FROM 关键字 SQL> host cls SQL> --查询员工的部门号 SQL> select deptno from emp; SQL> --distinct去掉重复行 SQL> select distinct deptno from emp; SQL> --问题:如果distinct后面有多列,会是什么结果? SQL> select disticnt deptno,job from emp; select disticnt deptno,job from emp SQL> --distinct作用于多列:只有这些列均相同,才认为是重复行 SQL> --oracle中的连接符: || SQL> --类似concat SQL> -- 显示Hello World SQL> select concat('Hello',' World') from dual; CONCAT('HEL ----------------- Hello World SQL> --dual表:Oracle的一个伪表,方便测试 SQL> select 3+2 from dual; SQL> --查询员工的信息:****的薪水是**** SQL> select ename||'的薪水是'||sal from emp; ENAME||'的薪水是'||SAL ---------------------------------------------------------- SMITH的薪水是800