oralce第二天:简单查询
查询
简单查询
查询全部
mysql:
SELECT e.* From emp e
oracle:
SELECT e.* From emp e;
查询特定列
mysql:
SELECT e.empno,e.ename,e.job from emp e
oracle:
SELECT e.empno,e.ename,e.job from emp e
别名使用
mysql:
select e.empno '员工编号',e.ename '员工姓名',e.job '员工职位',e.mgr '上级领导',
e.hiredate '入职时间',e.sal '薪水',e.comm '奖金',e.deptno '所在部门'
from emp e
oracle:
select e.empno '员工编号',e.ename '员工姓名',e.job '员工职位',e.mgr '上级领导',
e.hiredate '入职时间',e.sal '薪水',e.comm '奖金',e.deptno '所在部门'
from emp e
去重(使用关键字distinct)
只有当查询出来的所有列全部相同的时候才会合并
mysql:
select distinct job from emp;
oracle
select distinct job from emp;
字符串连接查询
mysql:
select concat('员工编号是:',empno,'姓名是:',ename,'的工作是:',job)
'员工姓名是:姓名是:的工作' from emp;
oracle:
select '员工编号是'|| empno||'姓名是:'||ename||'的工作是:'||job from emp;
查询中的四则运算
乘法(剩余的一样)
mysql:
select ename,sal*12 from emp
select concat('姓名是:',ename,'年薪是:',sal*12) as '姓名是: 年薪是: ' from emp;
oracle:
select ename,sal*12 from emp
select concat('姓名是:',ename,'年薪是:',sal*12) as '姓名是: 年薪是: ' from emp;
限定查询
查询工资大于1500的所有雇员
mysql:
select ename '姓名',e.sal '薪水' from emp e where e.sal>1500
oracle:
select ename '姓名',e.sal '薪水' from emp e where e.sal>1500
非空和空的限制
is not 和 is null 如果是not则是取非
SELECT *from emp WHERE comm is not null;
SELECT *from emp WHERE not(comm is null);
mysql:
select *from emp where comm is not null
oracle:
select *from emp where comm is not null
多条件查询
使用 and 进行连接
mysql:
select *from emp where sal>1500 and comm is not null;
oracle:
select *from emp where sal>1500 and comm is not null;
使用or进行连接
select *from emp where sal>1500 orcomm is not null;
oracle:
select *from emp where sal>1500 or comm is not null;
between and 的用法
下面的两句sql在查询结果上一模一样
mysql:
SELECT *from emp WHERE sal>=1500 AND sal<=3000;
SELECT *from emp WHERE sal BETWEEN 1500 and 3000;
oracle:
SELECT *from emp WHERE sal>=1500 AND sal<=3000;
SELECT *from emp WHERE sal BETWEEN 1500 and 3000;
IN的用法
范例:查询雇员编号是7369,7499,7521的雇员编号的具体信息
下面的两条sql在查询结果完全相同
此外还可以使用 not in
mysql:
select *from emp where empno='7369' or empno='7499' or empno='7521';
select *from emp where empno in('7369','7499','7521');
select *from emp where empno not in('7369','7499','7521');
oracle:
select *from emp where empno='7369' or empno='7499' or empno='7521';
select *from emp where empno in('7369','7499','7521');
select *from emp where empno not in('7369','7499','7521');
通配符
在常用的站点中经常会有模糊查询,即:输入一个关键字,把符合的内容全部的查询出来,在sql中使用LIKE语句完成。
在LIKE中主要使用以下两种通配符
“%”:可以匹配任意长度的内容
“_”:可以匹配一个长度的内容
范例:查询出所有雇员姓名中第二个字符包含“M”的雇员
mysql:
select *from emp where ename like '_M%';
oracle:
select *from emp where ename like '_M%';
在LIKE中如果没有关键字表示查询全部
对结果集排序
在sql中可以使用ORDER BY对查询结果进行排序
语法:SELECT * |列名 FROM 表名 {WEHRE 查询条件} ORDER BY 列名1 ASC|DESC,列名2…ASC|DESC
范例:查询雇员的工资从低到高
分析:ORDER BY 列名 默认的排序规则是升序排列,可以不指定ASC,如果按着降序排列必须指定DESC
mysql:
# 升序
select *from emp order by sal asc;
# 降序
select *from emp order by sal desc;
oracle:
# 升序
select *from emp order by sal asc;
# 降序
select *from emp order by sal desc;
如果存在多个排序字段可以用逗号分隔
select *from emp order by sal asc,hiredate desc ;
注意ORDER BY语句要放在sql的最后执行。