Oracle数据库的简单查询
本文使用到的数据表如下图:
表名为 EMP 。其中,empno为员工号,empname为员工姓名,job为员工岗位,mgr为该员工上司的员工号,hiredate是入职日期,salary是月薪,comm是月奖金,department是所在部门的编号。
1.表结构查询 desc [表名];
2.查询所有列 select * from [表名];
3.查看指定行 select [列名] from [表名]; (多个列名用逗号隔开)
例如,查看所有员工的工资和入职时间
4.取消重复行 select distinct [列名] from [表名];
5.算数表达式
如何显示每个雇员的年工资?
在我们原始的表中,没有年工资这一栏,可以使用算术表达式来处理此要求。
我们注意到,年工资这一列的列名为“salary*12”,很碍眼。那么我们来给这一列起一个别名,使数据更易读。
别名可以使用中文,也可以使用英文(使用英文时不需要加双引号),但使用中文时会出现如图中错位的现象。
如果我们的年工资要求加上奖金呢?如何写sql语句呢?是不是“select empname,salary*12+comm*12 from emp”呢?我们来试一下。
哦,为什么很多人的年工资都没有了呢?这要是按年薪发工资,这些人不是白干了一年了?怎么会这样?原来是因为有些员工的COMM列为null,所以算术表达式最后的结果也是null。那么如何解决呢?这里需要用到nvl函数。
解释一下nvl函数,第一个参数是你要处理的含有null的列名,第二个参数是若该列为null,则用该值代替null。
6.给查询加上条件
直接举两个例子吧,简单明了
a.显示工资不低于3000的员工
b.显示工资在2000到5000之间的员工(多个条件要使用逻辑运算符连接)
7.like操作符,就是“形如”。。。的条件
% 表示任意0到多个字符 _ 表示单个字符
如何显示首字母为“S”的员工信息?
如何显示名字第三个字母为“O”的员工信息?
8.在where条件中使用in
如何显示员工号为7369和7782的员工的信息?
9.如何处理null值?
如何显示没有上级的员工的信息?
思考:如何查询姓名首字母为“J”,且工资高于500或岗位为“manager”的雇员?您应该得到以下的结果:
10.使用order by排序
按照工资从低到高的顺序显示员工信息
oracle默认的排序顺序是升序(即asc),若想按降序排列,则在order by参数后加 desc
按照部门号升序(主要条件),工资降序(次要条件)的排序方式显示