在开始本教程之前,需要准备两张表 ,这个在oracle中是有的 大家都知道的emp 和dept表
emp (empno,ename,job,mgr,hirdate,sal,comm,depetno)
dept(deptno,dname,loc)
sql语句大部分适合myql
1从表中检索数据
select * from emp (*代表所有的列都要返回)
2从表检索出部分列
select empno,ename from emp(指定列的名字,逗号相隔就可以了)
3查找满足条件的列
select * from emp where empmo= 12300(可以在where后面加限制的条件)
select * from emp where empno = 67777 and depto=10 (满足多个条件用and联接就可以了 是且的意思)
select * from emp where empno =898989 or deptno = 11(满足员工号为898989 或者部门为10的员工的结果)
3为列取别名
select sal as salary ,comm as commission from emp ( as 加别名 as 可以省略)
4在where中使用别名
select sal as salary from emp where salary >10000 是错的
sql执行的顺序是先进行from 然后进行where进行过滤 ,最后执行select 所以在执行where 的时候还没有执行select 也就不知道别名到底是哪列了
解决的方法有就是使用内联视图
select * from (
select sal as salary from emp
) x
where x.salary>10000
可见这样的效率极低啊
5在select中使用逻辑条件语句
有这么一个需求 ,查询一个员工表 ,如果工资大于1000就显示high,小于500就显示lower,如果在两者之间就显示ok
select ename , sal,
case when sal<500 then 'lower'##case when then就是相当于java中的if else
when sal >1000 then 'high'
else 'ok'
end as status#给列取别名
from emp
6分页
select * from emp limit 0,5#返回前五条
select *from emp limit 2,5#从第二条开始获取他后面的五条记录
7对空值的限制
select * from emp where com =null #错误
select * from emp where comm is null#正确 取反的用 is not null
8查询到空值的时候将其转换为实际想要的值
例如你在查询奖金的时候要是查询到null,你想到得到是0,那么怎么办呢?
select coalesce(comm,0) from emp #意思是说如果comm为null 就返回0 不为null 就返回其本身
还可以用逻辑判断
select case
when comm is null then 0
else comm
end as commission
from emp
9 in语句
如果你要查询部门为10 和20的员工信息
select * from emp where deptno in(10,20) # 取反 就是not in
这样语句在数据最后会转换为
select * from emp were deptno = 10 or dept= 20
如果数据量很大,这种查询效率很低的,应该exits 和not exits
10模糊查询
查询员工名字已M开头的信息
select * from emp where ename like 'M%'
sql中还提供了下划线 _ 来匹配单个字符 ,这里就不举例子了