Oracle基础查询

来源:互联网 发布:如何用matlab预测数据 编辑:程序博客网 时间:2024/05/22 15:20

sql基础查询

--------------------------1.1 from 字句------------------------------

     select后面跟着是字段(列)  from指的来自哪张表

     查询所有的字段可以用* 号来代替,但是不建议使用,效率会低一些。

 

--------------------------1.2使用别名--------------------------------

AS可以省略,建议学习时还是写的比较好

中间也是字母,中文,还可以多个单词,但是注意中文和多个单词用双引号引起来

SELECT EMPNO AS ID,ENAME "名字",sal*12 as "total sal" FROM EMP;

--------------------------1.3where子句-------------------------------

使用where条件查询

查询部门10下面的员工有哪些

SELECT EMPNO ID,ENAME NAME, MGR,HIREDATE,DEPTNO FROM EMP WHERE deptno=10;

查询smith的月薪是多少

SELECT EMPNO ED,ENAME NAME,SAL FROM EMP WHERE ENAME='SMITH';

查询15年以后入职的员工姓名

SELECT EMPNO ID,ENAME NAME,hiredate FROM EMP WHERE HIREDATE>'01-1月-15';

--------------------------1.4SELECT子句------------------------------

    SELECT子句后面跟的是字段名,可以做一些计算都是可以的

一条基本SQL包括:SELECT子句+FROM子句  

    其中WHERE子句可以选择

--------------------------1.5查询条件 -------------------------------

  使用>, <, >=, <=, !=, <>, =判断,一般跟在WHERE子句中

 

--------------------------1.5 AND 和 OR 逻辑连接符--------------------

     AND指多个条件必须满足

 OR指多个条件满足其一就可以了

--------------------------1.6模糊查询---------------------------------

使用LIKE来代替等号:必须借助于两个符号,_ :单个字符  %  0-多个字符

前后都写%,就可以实现对字段值所有字符进行匹配

SELECT EMPNO ID,ENAME NAME ,JOB, HIREDATE ,SAL FROM EMP WHERE ENAME LIKE'%M%';

----------------1.7 in和not in(可以使用条件判断符号代替)-----------

查询表中职位为manager和clerk的职位

SELECT EMPNO ID,ENAME NAME, JOB, MGR,SAL FROM EMP WHERE JOB IN('MANAGER','CLERK');

查询表中部门编号不为10,20号部门的员工。

SELECT EMPNO ID,ENAME NAME,JOB,MGR,SAL,DEPTNO FROM EMP WHERE DEPTNO NOT IN(10,20);  

 

-------------------------1.8 IS NULL和is not null -------------------

    对null进行判断的时候不能使用“=”;  

 

-------------------------1.9ALL和ANY---------------------------------

  在比较运算符中,可以出现ALL和ANY,表示“全部”和“任一”,

  但是ALL和ANY不能单独使用,需要配合单行比较操作符>、>=、

  <、<=一起使用。其中:

> ANY : 大于最小

< ANY:小于最大

> ALL:大于最大

< ALL:小于最小

   

-----------------1.10WHERE子句中可以使用函数和表达式的--------------- 

查询年薪大于10w的员工信息。

SELECT EMPNO ID,ENAME NAME ,JOB,SAL FROM EMP WHERE SAL*12>100000;

查询时,where条件使用函数

SELECT EMPNO ID,ENAME ,JOB FROM EMP WHERE ENAME=UPPER('tang');

 

----------------1.11distinct关键字可以将重复字段进行去重-------------

SELECT distinct DEPTNO FROM EMP;

跟其他字段联合查询   注意:这里是指deptno和job交叉起来不重复。

SELECT DISTINCT DEPTNO,JOB FROM EMP;

---------------1.12order by子句(对查询出来的数据进行排序)----------

  注意:oder by必须出现SELECT语句的最后面。

  原理:order by排序是对查询出来的结果进行排序的。

 

  排序默认的话是升序排列(ASC),如果要降序排列,要去指定DESC

NULL升序的话作为最大的,排在最后面

SELECT EMPNO,ENAME,MGR FROM EMP WHERE DEPTNO=10 ORDER BY MGR;

降序:对工资从高到低进行排列

SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP WHERE DEPTNO=20 ORDER BY SAL DESC;

 

  多列联合排序

首先按指定的第一列排。那如果第一列同时出现多个相同的时候,在按第二列排,

依次类推,但注意必须指定每列都必须指定升序或降序

SELECT deptno,EMPNO,SAL FROM EMP ORDER BY deptno DESC,SAL ASC, empno ASC;

 

------------------1.13聚合函数(用来做统计的)---------------------------

   min/max:找出最大值和最小值

   查询emp表中的最高和最低工资

SELECT MAX(SAL) AS MAX_SAL,MIN(SAL) AS MIN_SAL FROM EMP;

查询最高工资的员工

Select Empno,Ename,Job ,Sal From Emp Where Sal=(Select Max(Sal) As Max_Sal From Emp);

查询最早入职和最晚入职的日期

SELECT MAX(HIREDATE)AS MAX_DATE,MIN(HIREDATE) AS MIN_DATE FROM EMP;

 

AVG/SUM

求平均值及总和   忽略空值

SELECT AVG(SAL) AS AVG_SAL,SUM(SAL) SUM_SAL FROM EMP WHERE DEPTNO=10;

    

COUNT():查询表中的记录条数(行)

SELECT COUNT(*)AS total_count from emp;

查询有职位的员工记录条数  忽略空值  

SELECT COUNT(JOB)AS JOB_COUNT FROM EMP;

查询10号部门的员工数

SELECT COUNT(*) FROM EMP WHERE DEPTNO=10;

 

比较,聚合对null值的处理。

结果:聚合函数会直接将null值记录省略掉,是不会参与计算的

SELECT AVG(SAL) as avg_sal from emp;

SELECT AVG(NVL(SAL,0))AS AVG_SAL FROM EMP;

 

-1.14分组查询(求平均工资,工资总和,工资高和低,都可以使用分组的形式)-

SELECT DEPTNO, MIN(SAL) FROM EMP GROUP BY DEPTNO;

having子句必须跟在分组子句的后面,意为对分组做进一步的限制

SELECT DEPTNO,MIN(SAL) AS MIN_SAL FROM EMP GROUP BY DEPTNO HAVING MIN(SAL)<1000;

 

-----------------1.15查询语句的执行顺序(面试)----------------------

当一条查询语句中包含所有的子句,执行顺序依下列子句次序:

1. FROM 子句:执行顺序为从后往前、从右到左。数据量较少的表尽量放在后面。

2. WHERE子句:执行顺序为自下而上、从右到左。将能过滤掉最大数量记录的条件写在WHERE 子句的最右。

3. GROUP BY:执行顺序从左往右分组,最好在GROUP BY前使用WHERE将不需要的记录在GROUP BY之前过滤掉。

4. HAVING 子句:消耗资源。尽量避免使用,HAVING 会在检索出所有记录之后才对结果集进行过滤,需要排序等操作。

5. SELECT子句:少用*号,尽量取字段名称。ORACLE 在解析的过程中, 通过查询数据字典将*号依次转换成所有的列名, 消耗时间。

6. ORDER BY子句:执行顺序为从左到右排序,消耗资源。

原创粉丝点击