Oracle学习(二)

<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行。


 

你可能感兴趣的:(oracle,数据库,by,where,order)