Oacle基本数据查询

1.       基本查询:

第一条查询语句:

 1.1 查询公司中全部的员工信息;

     SQLselect * from emp;

     注解:SELECTFROM是关键字,“*”代表要查询emp表中所有的列,emp表为要查询数据的目标表,它由关键字FROM所指定,SQL引擎在执行该条代码的时候,首先执行FROM语句,将目标数据加载到内存中,再使用SELECT语句对数据进行投影操作。

     上面的代码还可以按如下方法改写为:

SQLselect empno,ename,job,mgr,hiredate,sal,comm.,deptno from emp;

在执行以上代码的时候,效率高于前面的代码。原因是语句解析的时候不需要将“*”解析为各个列名,可以直接进行查询。

1.2    查询emp表中所有员工的姓名、入职时间以及现在的薪水值

SQLselect ename,hiredate,sal from emp;

注解:SELECT关键字用来进行数据投影操作的,FROM语句是用来确定查询的数据来源,需要到那张表查询数据就将该表的表名写到FROM中。

1.3    SQL语句中使用算术表达式

SQL常用的算术运行运算符是+-*/

1.3.1 查询公司中每名员工在工资上调400元后的工资

         SQL>SELECT ename,sal,sal+400 FROM emp;

             注意:代码只是利用SELECT语句的数学表达式来改变结果集的值,而真正的表总的数据并没有改变。

         1.3.2查询员工调整工资后的年薪

         SQL>SELECT ename,(sal+400)*12 FROM emp;

1.4    空值(NULL)的应用

1.4.1 空值的介绍

示例:查询公司中所有员工的姓名、工资和奖金

SQL>SELECT ename,sal.comm FROM emp;

注解:在comm列中有很多的空白,只有4名员工有奖金值,而其他的员工并没有被分配这个值,在这种情况下,Oracle把这个字段分配为空值。简单的说,没有值就是空值,但是空值不等同于零或空格。

1.4.2 NULL值在算术表达式中的使用

示例:查询每个员工的月收入

SQL>SELECT ename,sal+comm FROM emp;

结果出乎意料,在最终的结果中,很多人没有了收入,这种结果是空值造成的,在算术表达式中,任意一个值是NULL,则表达式结果就是NULL,在上面的查询中,只有4名员工有奖金其他员工奖金的记录全部是NULL,所以必然就是NULL,解决办法是使用NVL函数。在以后的课程中会介绍。

1.5    列别名的使用

1.5.1 使用列别名的方法:

(1)       直接在字段的后面跟别名

(2)       在要取字段名的后面加上AS 跟别名

示例:查询中使用别名:

SQL> SELECT ename 员工姓名,sal as 工资 FROM emp;

1.6    DISTINCT关键字的使用

DISTINCT关键字的作用是消除结果集中的重复数据。

查看EMP表中的员工来自那几个部门,由于emp表中的“部门编号”字段存在大量重复的值,这时候就是用DISTINCT来剔除结果集中的重复数据。

示例:查询不重复的部门编号:

SQL> SELECT DISTINCT deptno FROM emp;

注意:SQL语句中出现了DISTINCT关键字时,Oracle会强制规定,查询结果中不允许出重复的数据。

    

示例:查询emp表中员工名和部门号不重复的记录。

SQL>SELECT DISTINCT deptno,ename FROM emp;

注意:使用DISTINCT并不是要提出结果集中卖一个字段的重复数据,而是保证在最终的结果集中不会出现重复的行。

1.7    在查询中使用连接运算符

|| ’是Oracle中的连接运算符号,可以将SQL中的任意两个基本数据类型数据连接转换为字符串。

示例:使用连接运算符

SELECT ename||’的工作是:’||job||’ 他的工资是:’|| sal FROM emp;

注解:该查询将表中的三个字段连接为一个列,通常,连接字符使用在多列数据和格式化方面。

总结:学习查询语句中使用所有的关键字,这些是为大家以后学习复杂的查询语句的基础。

 

2 、查询语句中的条件

  2.1 在查询中使用WHERE 语句

      定义:WHERE关键字,在查询语句中的作用是实现数据选择操作的,简单来讲,可以通过WHERE关键字来确定,最终出现的结果集中的是那些行的数据,

      示例:查询工资中超过2000元的员工

      SQL>SELECT * FROM emp WHERE sal>2000;

      注解:查看结果集可以发现sal字段都是超过2000元的,这就是WHERE条件语句带来的效果,

  2.2 Oracle中的关系表达式

      定义:所谓关系表达式是指使用Oracle关系运算符连接的句式,在Oracle是使用的关系运算符有很多,大体上可以划分为两种:一、传统的关系运算符 二、增强关系运算符。

  2.3 Oracle中关系运算符

     1传统关系运算符

          传统关系运算符主要包括以下几种:><>=<=<>=

     2增强的关系运算符

          除了传统的运算符,Oracle还提供了很多特殊的运算符,这些运算符都是在传统的运算符上扩展而来的,所以称之为增强的关系运算符,Oracle中增强运算符包括:between andinlikeis NULL

  2.4  WHERE语句中使用关系运算符表达式

      示例:查询SCOTT员工的相关信息

          SQL>SELECT * FROM emp WHERE ename=’scott’;

          原因:Oracle数据库在做字符数据比较的时候是大小写敏感的。

          SQL>SELECT * FROM emp WHERE ename=’SCOTT’;

        2.4.1 日期类型格式敏感问题

          示例:查询所有在1981123号入职的员工。

          SQL>SELECT * FROM emp WHERE hiredate=’81/12/3’;

          注意:Oracle中默认的时间格式为dd-mon-rr

          更改为SQL>SELECT * FROM emp WHERE hiredate=’03-12-81’;

   2.5 特殊关系运算符的使用

          Oracle中特殊的逻辑运算符主要包括以下几种:BETWEEN  ANDINLIKE、和IS NULL

       2.5.1  BETWEEN  AND运算符的使用

          说明:该运算符主要实现对相应区间的选择,通常使用在以某一个范围为查询依据时。

          示例:查询公司中工资在1500~10000元之间的员工

          SQL>SELECT ename,sal FROM emp sal BETWEEN 1500 AND 10000;

          说明:该运算符实际是运算“sal>=1500 and sal<=3000 。在使用BETWEEN  AND

时需要注意的是:表示区间的时候必须是小值在前大值在后,如果顺序颠倒,则无法查询数据,另外使用BETWEEN  AND还可以判断时间类型数据的区间和字符型类型的区间。

       2.5.2 IN运算符的使用

          定义:IN运算符号主要是对几个特定的值的匹配。在使用IN运算符时,必须为该运算符提供一个匹配列表。

          示例:查询工资是110013003000元的员工信息。

          SQL> SELECT * FROM emp WHERE sal IN (1100,1300,3000);

          注释:最终的结果中,sal字段中的值只能是110013003000之一,该操作实际上等同于“”sal=1100 OR sal 1300 OR 3000“。

       2.5.2 LIKE运算符的使用

          定义:LIKE运算符主要实现字符串的模糊匹配功能。注意:LIKE运算符号实现模糊查询主要还是依靠通配符。在LIKE运算中,通配符的作用是用来代表未知数据的存在模式。

     示例:查询员工姓名以‘S’开头的员工信息

          SQL>SELECT * FROM emp WHERE ename=’S%’;

          说明:“S“代表该字符串的开头字符为S,而后面的%代表任意个任意字符

         

           通配符‘_’的使用方式

          查询员工姓名第二个字符是L的员工信息

          SQL> SELECT * FROM emp WHERE ename LIKE ‘_L%’;

       2.5.3 IS NULL运算符的使用

           说明:对NULL的判断一直是数据库使用过程中很重要的组成部分。

           示例:查询没有奖金的员工

           SQL> SELECT * FROM emp WHERE comm =NULL;

           原因:书写上有问题,虽然该语句能执行成功,说明“comm=null 从语法的角度并没有什么错误,但要注意,用任意一个数据和NULL运算,结果是NULL,没有数据返回。

           SQL>SELECT * FROM emp WHERE comm IS NULL;

           说明:对于NULL值的判断,应该使用IS NULL运算。

 

 

3、在WHERE条件中使用逻辑运算符

   Oracle中主要有3个逻辑运算符:ANDORNOT。其中,ANDOR是双目运算符,而NOT是单目运算符。对于一个逻辑表达式,返回的值有3中,TRUEFALSENULL

3.1 WHERE条件中使用AND(并且)运算符

    AND运算符在WHERE条件中出现,通常用来连接两个关系运算表达式。

  示例:查询10号部门工资大于2000元的员工

    SQL>SELECT * FROM emp WHERE deptno=10 AND sal>2000;

    注解:两个条件必须同时成立,所以使用AND运算符连接这两个关系表达式。

3.2 WHERE条件中使用OR(或者)运算符

    OR运算符在WHERE条件出现的作用于AND一样,也是为了连接两个关系运算表达式,不过,该运算符判断的依据跟AND不太一样,使用AND时,只有连个关系运算的结果全是TRUE时,目标数据才是所需的,而使用OR运算符时,左右两个关系只是有一个的结果是TRUE,该记录就是所需的。

    示例:查询7369号员工或7698号员工的职员的信息

    SQL>SELECT * FROM emp WHERE mgr=7698 OR mgr=7369;

3.3 WHERE 条件中使用NOT运算符

    NOT运算符是取反的意思,是单目运算符,它只能与增强关系运算符号使用,不能与传统关系运算符配合使用,NOT INIS NOT NULLNOT BEWTEEN 。。AND,是NOT运算符使用的集中固定使用方式,分别代表:不在某个列表中、不为空、不在某个范围内。

    示例:查询不归7698号员工和7839号员工领导的职员信息

    SQL>SELECT * FROM emp WHERE mgr NOT IN(7698,7839);

4、结果集排序

4.1 ORDER BY的基本使用

    ORDER BY主要是使得结果集按照升序或者降序的方式来排列,ORDER BY语句是SQL语句所有字句中最后被执行的一条。ORDER BY 字句后面指定列的列名或者直接使用列名作为结果集排序的依据。

    示例:按入职时间查询员工信息

    SQL>SELECT * FROM emp ORDER BY hiredate;

    注解:默认是升序

4.2 ORDER BY语句中使用别名

    示例:查询公司所有的员工收入,按照年薪排序

    SQL>SELECT ename,sal*12 salary FROM emp ORDER BY salary;

    注解:查询了员工的姓名与年薪,同时将运算年薪的表达式另起了别名“salary

4.3 ORDER BY语句中使用降序排列

    示例:查询10号部门员工信息,按工资降序排序

    SQL>SELECT * FROM emp WHERE deptno=10 ORDER BY sal DESC;

4.4 ORDER BY语句中使用两个排序列

    示例:查询员工信息,按部门和工薪排序

    SQL>SELECT * FROM emp ORDER BY deptno,sal;

    注解:指定两个列进行排序 ,数据库在执行该条语句时,首先按照deptno排序,在deptno相同的情况下再按照sal排序。

4.5 多个排序字段中使用不同的排序规则

    示例:将emp表中的deptno列按照降序排列,sal列按照升序排列

    SQL>SELECT * FROM emp ORDER BY deptno DESC,sal ASC;

    注释:该查询中依然使用了两个排序字段,只不过deptno是按照降序来排列的,而在deptno相同的情况下,sal字段是按照升序来排列的

你可能感兴趣的:(sql)