在Oracle数据库中,select语句是用来进行数据库数据查询
1.直接查询
语句:select 列名(可以有多个) from 表名;
举例:1)查询emp表中员工名和职位的信息 :select ename ,job from emp;
2)查询emp表中的所有信息 : select empno , ename , job , sal , comm, deptno... from emp; 或者 select * from emp;
注意 :* :表示所有列名的信息
2.查询时as为列名重新起名
语句 : select 列名 as 别名 from 表名;
举例 : 1)查询emp表中员工名和职位信息,同时将ename名改为“姓名” , job名改为“职位” : select ename as "姓名", job as "职位" from emp;
2)举例1中也可以这样表示:(a) select ename as 姓名, job as 职位 from emp; (省略双引号)
(b) select ename 姓名, job 职位 from emp; (省略as也可以)
注意: 1.省略双引号是,语句中的别名称之间不能有空格,否则会出错
2.若别名为sql特有的词语时,别名需要写在双引号之中 , select ename as "姓名", job as "from" from emp;
3.特殊语句where语句的使用,可以指定搜索特定的信息
语句 : select 列名(可以有多个) from 表名 where 列名 = '表格中指定信息';(注意是英文单引号)
举例 : 1)查询emp表中job为CLERK的员工名和编号 : select ename , empno from emp where job = 'CLERK' ;
2)查询emp表中部门编号为20的员工名和职位:select ename , job from emp where deptno = 20;
注意:1.指定信息若是字符或者字符串,要写到英文单引号之中,数值则不用
2.sql语句不区分大小写,但是表格中的指定信息是严格区分大小写的
4.where语法中运算符的使用
操作运算符: + - / * %
例子:1)查询员工姓名和一年的工资(加上年终奖) : select ename, sal*12+comm from emp;
注意:查询结果有很多是没有数据的,原因是员工的年终奖是null值,任何数值与null结算都是得到null值
解决方法:需要对null进行处理:null-->0
1).方式一:nvl :相当于if ,格式:nvl(comm,0)
if(comm == null){
return 0;
}
2). 方式二:nvl2(comm,comm,0)
if(comm == null){
return 0;
}else{
return comm;
}
关系运算符:> >= < <= = !=或<>
例子:1.查询工资高于3000的员工与职位 : select ename, job from emp where sal >=3000;
2.查询部门编号不为7566的员工与职位 : select ename, job from emp where deptno !=7566;
注意:当查询的语句有null值时,不能使用 = 和!=或<>,应该使用is 和 is not
如:select * from emp where comm is not null;
逻辑运算符:or and not
例子:1.查询职位为CLERK并且工资高于1000的员工名,职位和工资信息:select ename, job , sal from emp where job = 'CLERK' and sal > 1000;
2.查询职位为CLERK或者工资高于1000的员工名,职位和工资信息:select ename, job , sal from emp where job = 'CLERK' or sal > 1000;
3.查询工资低于3000的员工和工资信息(用not) : select ename, job, sal from emp where not (sal >=3000);
5.范围查询:beween ... and ...
语法: select 列名 from 表名 where 列名 between 小 and 大;
举例: 查询工资在2000~5000的员工信息, select * from emp where sal between 2000 and 5000;
语法:select 列名 from 表名 where 列名 in (数据, 数据,......)
举例:查询工资3000和5000的员工信息, select * from emp where sal in(3000,5000);
查询工资不是3000和5000的员工信息, select * from emp where sal not in(3000,5000);
注意:not in 里面不能出现null,否则查询的数据为空,语法不允许
6.模糊查询:like...
配合通配符使用: 1) _ :一个字符
2)%:任意个字符
例子:1.查询名字带字母S的员工信息 : select * from emp where ename like '%S%';
2.查询名字第二个为字母C的员工信息 : select * from emp where ename like '_C%';
3.查询名字长度大于4的员工信息: select * from emp where ename like '_____%'; (5个_)
特殊:若查询的信息中包含下划线 ,如:zhang_san , 则select * from emp where ename like '%\_%';(错误)
对于上面的问题,解决方法:select * from emp where ename like '%\_%' escape '\';
7.排序( order by )
语法:select 列名.. from emp order by 列名 desc(降序);
select 列名.. from emp order by 列名 asc(升序); -----若不写则升序降序的标识,语句默认是升序
例子:查询emp表并按工资降序 : select * from emp order by sal desc;
注意:null默认是最大值
特殊:多列查询
例子:查询emp表并按工资升序,若部门编号相同则按部门降序:
select * from emp order by sal asc , deptno desc;
8.distinct:对查询出的结果集去重
例子:select distinct deptno from emp;