Oracle学习笔记(二):基本SELECT语句

来源:互联网 发布:网络中级工程师报名费 编辑:程序博客网 时间:2024/05/29 11:05
对于SQL 语言来讲,最强大的莫过于SELECT 语言

1,FROM字句(这是最简单的)

SQL> SELECT e.empno "雇员编号", e.ename "雇员名称" , e.hiredate "受雇日期", e.deptno "部门编号"  2  FROM emp e ;  雇员编号 雇员名称   受雇日期         部门编号---------- ---------- -------------- ----------      7369 SMITH      17-12月-80             20      7499 ALLEN      20-2月 -81             30      7521 WARD       22-2月 -81             30      7566 JONES      02-4月 -81             20      7654 MARTIN     28-9月 -81             30      7698 BLAKE      01-5月 -81             30      7782 CLARK      09-6月 -81             10      7788 SCOTT      19-4月 -87             20      7839 KING       17-11月-81             10      7844 TURNER     08-9月 -81             30      7876 ADAMS      23-5月 -87             20      7900 JAMES      03-12月-81             30      7902 FORD       03-12月-81             20      7934 MILLER     23-1月 -82             10已选择14行。
2,WHERE语句
SQL> SELECT e.empno "雇员编号", e.ename "雇员名称", e.hiredate "受雇日期", e.deptno "部门编号"  2  FROM emp e WHERE e.empno>=1900 ;  雇员编号 雇员名称   受雇日期         部门编号---------- ---------- -------------- ----------      7369 SMITH      17-12月-80             20      7499 ALLEN      20-2月 -81             30      7521 WARD       22-2月 -81             30      7566 JONES      02-4月 -81             20      7654 MARTIN     28-9月 -81             30      7698 BLAKE      01-5月 -81             30      7782 CLARK      09-6月 -81             10      7788 SCOTT      19-4月 -87             20      7839 KING       17-11月-81             10      7844 TURNER     08-9月 -81             30      7876 ADAMS      23-5月 -87             20      7900 JAMES      03-12月-81             30      7902 FORD       03-12月-81             20      7934 MILLER     23-1月 -82             10已选择14行。

3,WHERE语句的作用主要是指定检索条件

WHERE条件中可以使用的操作符

=等于<>,!=不等于>=大于等于<=小于等于>大于<小于ANY与列表中的任何值进行比较ALL与列表中的所有值进行比较BETWEEN指定的两个值之间,包括边界值LIKE匹配的字符样式,一般用于模糊查询IN匹配的一个列表值IS NULL匹配空值

ALL ANY 操作符

~注:ALL与ANY的区别:
ANY是指列表中每一个值进行比较,只需要满足列表中的其中一个条件就可以输出
ALL是值列表中的所有的值进比较,必须满足所有条件才可以

SQL> SELECT empno FROM emp  2  WHERE empno > ANY (7788 , 7800 , 7900) ;     EMPNO----------      7839      7844      7876      7900      7902      7934已选择6行。SQL> SELECT empno FROM emp  2  WHERE empno > ALL (7788 , 7800 , 7900) ;     EMPNO----------      7902      7934

IN 操作符
检索列表中的数据,进行匹配。

SQL> SELECT empno FROM emp  2  WHERE empno  IN (7788 , 7800 , 7900) ;     EMPNO----------      7788      7900

In与ANY 与ALL的不同是,IN只是匹配,没有进行比较

BETWEEN操作符:

a BETWEEN b and c 的作用相当于a<=b and a>=c

SQL> SELECT empno FROM emp WHERE empno BETWEEN 7000 AND 7500 ;     EMPNO----------      7369      7499SQL> SELECT empno FROM emp WHERE empno >= 7000 AND empno <= 7500 ;     EMPNO----------      7369      7499

LIKE 操作符
下划线(_):匹配指定位置的一个字符
百分号(%):匹配从指定位置开始的任意个字符      

下面我们尝试在scott.emp查询ename第三个字母为O的人的名字:

     

SQL> SELECT ename FROM emp WHERE ename LIKE '__O%' ;ENAME----------SCOTT


主要用于模糊查询

4,ORDER BY字句

SQL> SELECT ename FROM emp ORDER BY ename DESC ;ENAME----------WARDTURNERSMITHSCOTTMILLERMARTINKINGJONESJAMESFORDCLARKENAME----------BLAKEALLENADAMS已选择14行。

#DESC为降序,由大到小;ASC为升序,由小到大;

5,GROUP BY子句

使用GROUP BY语句,可以根据表中的某一列或某激烈对表中的数据进行分组,多个列之间用逗号隔开。若进行多列分组,Oracle会对第一列进行分组,然后在分出来的组按第二列再进行分组。
 GROUP BY clause must contain only aggregates or grouping columns.    (Oracle文档)
 
 必须含有聚合函数和Group by右面的是前面所选的列,聚合函数根据Group所返回的结果进行计算

这里是只分一组的情况

SQL>  SELECT deptno AS "部门编号" ,COUNT(*) AS "员工人数"  --查询scott用户表中每一个部门的员工号  2  FROM emp GROUP BY deptno ;  部门编号   员工人数---------- ----------        30          6        20          5        10          3

分两组的情况:

SQL> select deptno ,job from emp group by job , deptno ;    DEPTNO JOB---------- ---------        20 MANAGER        10 PRESIDENT        10 CLERK        30 SALESMAN        20 ANALYST        30 MANAGER        10 MANAGER        30 CLERK        20 CLERK已选择9行。


~注:我们可以尝试这样理解GROUP BY字句:当被分组的列只有一列时,被分组的列把相同的数据合并,就像Java里面的List与Set,把List转化为Set的时候,相同的数据去掉。返回的结果就是这个Set的值。

这也可以解释为什么“没有使用聚合函数的列,必须出现在 group by 后面“,否则分组之后,未分组的数据与分组的数据将形成一对多的关系,如上面的关系,deptno=10的数据有很多行,而同时对应的其他列的数据

却有很多行。当被分组的列有多列时,我们把之前分好组的数据当成是一个表,再进行类似的分组方法,最后输出全部的分组结果:

deptno=10是分好的一组,我们把它看成是一个表,再对job分组,就如上面所示,

SQL> SELECT deptno ,job FROM emp WHERE DEPTNO = 10 ;    DEPTNO JOB---------- ---------        10 MANAGER        10 PRESIDENT        10 CLERK

6,HAVING字句

HAVING语句:
HAVING字句经常与GROUP BY 字句一起用,完成统计后,再对分组的结果进行筛选结果

SQL> SELECT deptno AS "部门编号" ,COUNT(*) AS "员工人数"  2  FROM emp GROUP BY deptno  3  HAVING COUNT(*)>3 ;  部门编号   员工人数---------- ----------        30          6        20          5


#综:如果再SELECT语句中同时包含GROUP BY , HAVING , ORDER BY三个字句,那么这些字句在SELECT语句中出现的顺序应为:GROUP BY , HAVING , ORDER BY;


7,DISTINCT关键字

DISTINCT关键字
用来限定在检索结果中显示不重复的数据
对于重复值,只显示一个。如果不指定将默认使用ALL

SQL> select distinct deptno from emp ;    DEPTNO----------        30        20        10SQL> select all deptno from emp ;    DEPTNO----------        20        30        30        20        30        30        10        20        10        30        20        30        20        10已选择14行。

~注:Distinct的用法过程:select查询结果,再把相同的合并,有点类似于集合的唯一性特点。


对Oracle SQL查询的基本知识就总结到这里,可能会有很多问题,希望有读者可以指出。


0 0
原创粉丝点击