查询表结构
desc 表名;
查询所有记录
select * from 表名;
查询指定记录
select name,age,birthday from 表名;
查询某些字段不同记录(去重)
select distinct name,birthday from 表名;
字段运算查询
select sal*12,age from 表名;
使用列的别名
select sal*12 as "年工资" , age 年龄,name username from 表名;
注意:as可以省略
如何处理null值
select sal*12 nvl(jiang,0) as "年工资",age from 表名;
nvl函数:如果jiang为空时取0
模糊查询like
select * from 表名 where name like '李%';
select * from 表名 where name like '李_';
%代表多个任意字符,_代表一个任意字符
排序
1.升序排序,不加asc默认为添加asc
select * from 表名 where 条件 order by 排序字段 [asc];
2.降序排序
select * from 表名 where 条件 order by 排序字段 desc;
3.多重排序,先按照字段1降序排序,如果字段1有重复,则重复部分按字段2升序排序
select * from 表名 where 条件 order by 排序字段1 desc,排序字段2;
分组查询
select 国家名,sum(人口),sum(面积) from 表名 group by 国家名;
当使用group by 国家名时,属于同一个国家的一组数据将只能返回一行值,也就是说,表中所有除相同国家外的字段,只能通过sum,count等聚合函数运算后返回一个值。
select 国家名,sum(人口),sum(面积) from 表名 group by 国家名 having sum(面积)>100000;
这里的having其实就是之前使用的where,功能是筛选成组后的各组数据
注意事项
1)group by语句可以单独使用
2)having语句只能配合group by语句使用
3)如果在select语句中同时包含group by,having,order by那么它们的顺序是group by,having,order by
等值多表查询
按照等值的条件查询多个数据表中关联的数据,要求关联的多个数据表的某些字段具有相同的属性,即具有相同的数据类型、宽度和取值范围
select a.uname,a.age,b.uanme,b.age ,b.sal from a,b where a.age=b.age and b.sal>1000;
等值连接(内连接)
select * from aa inner join bb on aa.aid=bb.bid;
只返回两个表中联结字段相等的行
等价于select * from aa,bb where aa.aid=bb.bid;
左连接(左外连接)
select * from aa left join bb on aa.aid=bb.bid;
是以aa表的记录为基础的,aa可以看成左表,bb可以看成右表,left join是以左表为准的,也就是说左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录
等价于select * from aa,bb where aa.aid=bb.bid( );
右连接(右外连接)
select * from aa right join bb on aa.aid=bb.bid;
和left join正好相反,等价于select * from aa,bb where aa.aid( )=bb.bid;
完全连接(全外连接)
select * from aa full join bb on aa.aid=bb.bid;
只返回两个表中的所有行
等价于
select * from aa left join bb on aa.aid=bb.bid
union
select * from aa right join bb on aa.aid=bb.bid
嵌套查询
in可以代替‘=’
1.简单嵌套实现
select bumen from a where employid=(select employid from b where name='张三');
1)(select employid from b where name='张三'
查询出姓名是张三的员工编号
2)select bumen from a where employid=员工编号
查询出员工编号为10的员工所在部门
2.嵌套修改字段数据
update student set sal=(select sal 300 from 表名 where empno=7559) where empno=7599;
3.并操作的嵌套查询(a与b的元素总和)
select sal from a union select sal from b
4.交操作的嵌套查询(属于a且属于b)
select sal from a intersect select sal from b
5.差操作的嵌套查询(属于a且不属于b)
select sal from a minus select sal from b
取表中的数据(前几条,几条到几条)
select * from a where rownum<=2 (从数据表中取前两条记录)
select * from (select * from scott.emp order by sal desc)a where rownum<6;(把数据表中的记录排序,取排序后的前5条记录)
分页查询
select * from (select rownum rn,tb.* from ( select * from meetingroom order by roomid ) tb )a where rn>= 1 and rn < 3
1)首先把meetingroom 表中的数据全部正序排列 2)再查询出行号 3)根据行号来进行分页,如(要查出行为1到2的,二行记录)