首先介绍一下用户模式:
scott模式: 其密码为tiger 查询数据字典视图 USER_TABLES可以获知该模式所包含的表。
HR模式: 类似与scott模式,hr中有七个表:雇员,部门,地点,国家,地区,工作,工作历
其他模式:订单目录(OE)模式,产品媒体(PM)模式,信息交换(IX)模式和销售记录(SH)模式。
SQL> select *
2 from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
SQL> select dname,loc
2 from dept
3 where deptno='10';
DNAME LOC
-------------- -------------
ACCOUNTING NEW YORK
在select语句里:
字符串和日期型数值都要用单引号 包起来
所以字符型数值是区分大小写的,日期的表达形式也是有区分的。
默认的日期形式是 DD-MON-YY
SQL> select ename,job,deptno
2 from emp
3 where ename='JAMES';
ENAME JOB DEPTNO
---------- --------- ----------
JAMES CLERK 30
SQL>
comm:奖金
SQL> select ename,sal,comm
2 from emp
3 where sal<=comm;
ENAME SAL COMM
---------- ---------- ----------
MARTIN 1250 1400
between ...and...
SQL> select ename,sal
2 from emp
3 where sal between 1000 and 1500;
ENAME SAL
---------- ----------
WARD 1250
MARTIN 1250
TURNER 1500
ADAMS 1100
MILLER 1300
in:
SQL> select empno,ename,sal,mgr
2 from emp
3 where mgr in (7902,7566,7788);
EMPNO ENAME SAL MGR
---------- ---------- ---------- ----------
7369 SMITH 800 7902
7788 SCOTT 3000 7566
7876 ADAMS 1100 7788
7902 FORD 3000 7566
是的大小写很重要。
SQL> select ename
2 from emp
3 where ename LIKE 's%';
未选定行
SQL> select ename
2 from emp
3 where ename LIKE 'S%';
ENAME
----------
SMITH
SCOTT
SQL> select sal from emp where ename='S%';
未选定行
SQL> select sal,ename from emp where ename='S%';
未选定行
SQL> select ename
2 from emp
3 where ename LIKE '_A%';
ENAME
----------
WARD
MARTIN
JAMES
所以_ % 要配合 LIKE使用的。
IS NULL用来判断值是否为空,空值意味着这个值是不可用的,未分配的,未知,不可用的
所以不能使用=号来判断是否为空值。
SQL> select ename,mgr
2 from emp
3 where mgr is NULL;
ENAME MGR
---------- ----------
KING
SQL>
镜像问题:不为空
SQL> edit
已写入 file afiedt.buf
1 select ename,mgr
2 from emp
3* where mgr is not NULL
SQL> l
1 select ename,mgr
2 from emp
3* where mgr is not NULL
SQL> /
ENAME MGR
---------- ----------
SMITH 7902
ALLEN 7698
WARD 7698
JONES 7839
MARTIN 7698
BLAKE 7839
CLARK 7839
SCOTT 7566
TURNER 7698
ADAMS 7788
JAMES 7698
ENAME MGR
---------- ----------
FORD 7566
MILLER 7782
已选择13行。
SQL>
有必要声明一下AND 的优先级比 OR高 所以请注意()的使用。
SQL> select empno,ename,job,sal
2 from emp
3 where sal>=1100 and job='CLERK';
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7876 ADAMS CLERK 1100
7934 MILLER CLERK 1300
SQL>
NOT 运算符也就是非了 !
SQL> select ename,job
2 from emp
3 where job not in ('CLERK','MANAGER','ANALYST');
ENAME JOB
---------- ---------
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN
KING PRESIDENT
TURNER SALESMAN
group by子句:将查询结果按 group by 后面的列进行分组,列值相等的为一组。
目的:为了细化集函数的作用对象。
所以,如果未对查询结果分组,集函数将作用与整个查询结果。
分组后集函数将作用于每一个组,即每个组都有一个函数值。
当你分完组后还要再筛选时,就用having子句
去掉不满足条件的组。