<pre name="code" class="plain">1 打开数据库; 资源管理器--管理工具--服务--OracleServiceORCL(启动时间会比较慢)--OracleOraDb11g_home1TNSListener(启动时间可能比较慢); 测试昨天的项目; 完成! 2 查询系统当前的时间,但是格式和我们的不一样; SQL> select sysdate from dual; SYSDATE -------------- 25 - 3月 - 16 SQL > 3 格式显示; SQL> select * from v$nls_parameters; PARAMETER VALUE ---------------------------------------------------------------- ---------------------------------------------------------- - NLS_LANGUAGE SIMPLIFIED CHINESE NLS_TERRITORY CHINA NLS_CURRENCY ¥ NLS_ISO_CURRENCY CHINA NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD - MON - RR NLS_DATE_LANGUAGE SIMPLIFIED CHINESE NLS_CHARACTERSET ZHS16GBK NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD - MON - RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD - MON - RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY ¥ NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE 已选择19行。 4 修改显示日期的格式; SQL> alter session set NLS_DATE_FORMAT = 'RR-MON-DD'; 会话已更改。 SQL> select sysdate from dual; SYSDATE -------------- 16 - 3月 - 25 5 修改回去; SQL> alter session set NLS_DATE_FORMAT = 'DD-MON-RR'; 会话已更改。 SQL> select sysdate from dual; SYSDATE -------------- 25 - 3月 - 16 注意: 字符和日期都要包含在单引号中; 字符大小写敏感,日期格式敏感; 默认的日期格式是DD - MON - RR; 6 where使用初探; 查询表中比81年1月1日入职晚的员工信息; SQL> select * from emp where hiredate > '01-1月 -81'; //注意日期格式要完全和表中的格式一致,字符串要写在单引号里边 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20 - 2月 - 81 1600 300 30 7521 WARD SALESMAN 7698 22 - 2月 - 81 1250 500 30 7566 JONES MANAGER 7839 02 - 4月 - 81 2975 20 7654 MARTIN SALESMAN 7698 28 - 9月 - 81 1250 1400 30 7698 BLAKE MANAGER 7839 01 - 5月 - 81 2850 30 7782 CLARK MANAGER 7839 09 - 6月 - 81 2450 10 7788 SCOTT ANALYST 7566 19 - 4月 - 87 3000 20 7839 KING PRESIDENT 17 - 11月 - 81 5000 10 7844 TURNER SALESMAN 7698 08 - 9月 - 81 1500 0 30 7876 ADAMS CLERK 7788 23 - 5月 - 87 1100 20 7900 JAMES CLERK 7698 03 - 12月 - 81 950 30 7902 FORD ANALYST 7566 03 - 12月 - 81 3000 20 7934 MILLER CLERK 7782 23 - 1月 - 82 1300 10 已选择13行。 注意: oracle 支持隐式类型转换; 日期转化的函数; 7 where语句使用语法格式; select ...... from .......where col(列名) > number; col(列名) in(); col(列名) between a and b; 注意: a一定要小于b,即[a,b],都是闭区间 col(列名) is null; col(列名)like ...; 比较运算: 操作符 =(等于,不是==) , > , <, >= , <= , <>(不等于, 也可以是 != ); 7.1 查询表中工资在1000元到2000元之间的员工信息表; SQL> select * from emp where sal between 1000 and 2000; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20 - 2月 - 81 1600 300 30 7521 WARD SALESMAN 7698 22 - 2月 - 81 1250 500 30 7654 MARTIN SALESMAN 7698 28 - 9月 - 81 1250 1400 30 7844 TURNER SALESMAN 7698 08 - 9月 - 81 1500 0 30 7876 ADAMS CLERK 7788 23 - 5月 - 87 1100 20 7934 MILLER CLERK 7782 23 - 1月 - 82 1300 10 7.2 查询部门编号是10,20的员工信息; SQL> select * from emp where deptno in(10, 20); 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 7782 CLARK MANAGER 7839 09 - 6月 - 81 2450 10 7788 SCOTT ANALYST 7566 19 - 4月 - 87 3000 20 7839 KING PRESIDENT 17 - 11月 - 81 5000 10 7876 ADAMS CLERK 7788 23 - 5月 - 87 1100 20 7902 FORD ANALYST 7566 03 - 12月 - 81 3000 20 7934 MILLER CLERK 7782 23 - 1月 - 82 1300 10 7.2 查询部门编号不是10,20的员工信息; SQL> select * from emp where deptno not in(10, 20); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20 - 2月 - 81 1600 300 30 7521 WARD SALESMAN 7698 22 - 2月 - 81 1250 500 30 7654 MARTIN SALESMAN 7698 28 - 9月 - 81 1250 1400 30 7698 BLAKE MANAGER 7839 01 - 5月 - 81 2850 30 7844 TURNER SALESMAN 7698 08 - 9月 - 81 1500 0 30 7900 JAMES CLERK 7698 03 - 12月 - 81 950 30 7.3 in中是一个集合,各参数之间用一个逗号隔开,其中的参数也可以是null; SQL > select * from emp where deptno in(10, 20, null); ---- - 能够正确编译,查询结果不受影响 SQL > select * from emp where deptno not in(10, 20, null); ----不能正确编译,无法查询!why ? ? ? 7.4 模糊查询; ----使用like运算选择类似的值 ----选择条件可以包含字符和数字: %代表零个或多个字符(人一个字符); _代表一个字符。; 例1:查询员工姓名是以字母‘S’开头的员工信息; SQL> select * from emp where ename like 'S%';----单引号中的字符串是大小写敏感的! EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17 - 12月 - 80 800 20 7788 SCOTT ANALYST 7566 19 - 4月 - 87 3000 20 例2:查询员工姓名是四个字母的员工信息; SQL> select * from emp where ename like '____'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 7521 WARD SALESMAN 7698 22 - 2月 - 81 1250 500 30 7839 KING PRESIDENT 17 - 11月 - 81 5000 10 7902 FORD ANALYST 7566 03 - 12月 - 81 3000 20 例3:向表中插入一行数据 insert into emp(empno, ename, sal, deptno) values(1, "tom_abc", 8000, 10); 例4:查询带有下划线的员工信息 SQL> select * from emp where ename like '%\_%' escape '\'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 1 tom_abc 8000 10 8 order by子句 8.1 使用order by子句排序 ASC(ascend):升序 DESC(descend):降序 order by语句在select语句的结尾。 8.2 order by默认是按照升序进行排序的 SQL> select * from emp order by sal;-----默认是升序的 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17 - 12月 - 80 800 20 7900 JAMES CLERK 7698 03 - 12月 - 81 950 30 7876 ADAMS CLERK 7788 23 - 5月 - 87 1100 20 7521 WARD SALESMAN 7698 22 - 2月 - 81 1250 500 30 7654 MARTIN SALESMAN 7698 28 - 9月 - 81 1250 1400 30 7934 MILLER CLERK 7782 23 - 1月 - 82 1300 10 7844 TURNER SALESMAN 7698 08 - 9月 - 81 1500 0 30 7499 ALLEN SALESMAN 7698 20 - 2月 - 81 1600 300 30 7782 CLARK MANAGER 7839 09 - 6月 - 81 2450 10 7698 BLAKE MANAGER 7839 01 - 5月 - 81 2850 30 7566 JONES MANAGER 7839 02 - 4月 - 81 2975 20 7902 FORD ANALYST 7566 03 - 12月 - 81 3000 20 7788 SCOTT ANALYST 7566 19 - 4月 - 87 3000 20 7839 KING PRESIDENT 17 - 11月 - 81 5000 10 1 tom_abc 8000 10 SQL> select * from emp order by sal desc;----降序 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 1 tom_abc 8000 10 7839 KING PRESIDENT 17 - 11月 - 81 5000 10 7902 FORD ANALYST 7566 03 - 12月 - 81 3000 20 7788 SCOTT ANALYST 7566 19 - 4月 - 87 3000 20 7566 JONES MANAGER 7839 02 - 4月 - 81 2975 20 7698 BLAKE MANAGER 7839 01 - 5月 - 81 2850 30 7782 CLARK MANAGER 7839 09 - 6月 - 81 2450 10 7499 ALLEN SALESMAN 7698 20 - 2月 - 81 1600 300 30 7844 TURNER SALESMAN 7698 08 - 9月 - 81 1500 0 30 7934 MILLER CLERK 7782 23 - 1月 - 82 1300 10 7521 WARD SALESMAN 7698 22 - 2月 - 81 1250 500 30 7654 MARTIN SALESMAN 7698 28 - 9月 - 81 1250 1400 30 7876 ADAMS CLERK 7788 23 - 5月 - 87 1100 20 7900 JAMES CLERK 7698 03 - 12月 - 81 950 30 7369 SMITH CLERK 7902 17 - 12月 - 80 800 20 8.3 order by后面+列名 表达式 别名 序号 按照年薪进行排序 SQL> select empno, ename, sal, sal * 12 + nvl(comm, 0) 年薪 from emp order by 年薪; EMPNO ENAME SAL 年薪 ---------- ---------- ---------- ---------- 7369 SMITH 800 9600 7900 JAMES 950 11400 7876 ADAMS 1100 13200 7521 WARD 1250 15500 7934 MILLER 1300 15600 7654 MARTIN 1250 16400 7844 TURNER 1500 18000 7499 ALLEN 1600 19500 7782 CLARK 2450 29400 7698 BLAKE 2850 34200 7566 JONES 2975 35700 7902 FORD 3000 36000 7788 SCOTT 3000 36000 7839 KING 5000 60000 1 tom_abc 8000 96000 8.4 排序之后将控制摆在最后 SQL> select * from emp order by comm nulls last; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 7844 TURNER SALESMAN 7698 08 - 9月 - 81 1500 0 30 7499 ALLEN SALESMAN 7698 20 - 2月 - 81 1600 300 30 7521 WARD SALESMAN 7698 22 - 2月 - 81 1250 500 30 7654 MARTIN SALESMAN 7698 28 - 9月 - 81 1250 1400 30 7782 CLARK MANAGER 7839 09 - 6月 - 81 2450 10 7788 SCOTT ANALYST 7566 19 - 4月 - 87 3000 20 7839 KING PRESIDENT 17 - 11月 - 81 5000 10 7876 ADAMS CLERK 7788 23 - 5月 - 87 1100 20 7900 JAMES CLERK 7698 03 - 12月 - 81 950 30 7902 FORD ANALYST 7566 03 - 12月 - 81 3000 20 7698 BLAKE MANAGER 7839 01 - 5月 - 81 2850 30 7566 JONES MANAGER 7839 02 - 4月 - 81 2975 20 7934 MILLER CLERK 7782 23 - 1月 - 82 1300 10 1 tom_abc 8000 10 7369 SMITH CLERK 7902 17 - 12月 - 80 800 20 已选择15行。 8.5 order by后面有多个列,如果多个列中有desc修饰,只作用于最后的那一列,即家里的desc最近的那一个,其他的按照升序进行排序 例:首先按照部门编号降序排序,在部门一样的情况下在按照工资降序排序 SQL> select * from emp order by deptno desc, sal desc; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- -------- - ---------- -------------- ---------- ---------- ---------- 7698 BLAKE MANAGER 7839 01 - 5月 - 81 2850 30 7499 ALLEN SALESMAN 7698 20 - 2月 - 81 1600 300 30 7844 TURNER SALESMAN 7698 08 - 9月 - 81 1500 0 30 7521 WARD SALESMAN 7698 22 - 2月 - 81 1250 500 30 7654 MARTIN SALESMAN 7698 28 - 9月 - 81 1250 1400 30 7900 JAMES CLERK 7698 03 - 12月 - 81 950 30 7902 FORD ANALYST 7566 03 - 12月 - 81 3000 20 7788 SCOTT ANALYST 7566 19 - 4月 - 87 3000 20 7566 JONES MANAGER 7839 02 - 4月 - 81 2975 20 7876 ADAMS CLERK 7788 23 - 5月 - 87 1100 20 7369 SMITH CLERK 7902 17 - 12月 - 80 800 20 1 tom_abc 8000 10 7839 KING PRESIDENT 17 - 11月 - 81 5000 10 7782 CLARK MANAGER 7839 09 - 6月 - 81 2450 10 7934 MILLER CLERK 7782 23 - 1月 - 82 1300 10 已选择15行。