十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
以oracle使用rownum伪列实现分页为例:
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、网站建设、酒泉网络推广、微信小程序开发、酒泉网络营销、酒泉企业策划、酒泉品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供酒泉建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
三表连接分页示例代码如下:
select * from (select rownum r,k.kch,k.kcm,cj.cj,x.xh,x.xm from KCB k,CJB cj,XSB x where k.kch = cj.kch and cj.xh = x.xh and rownum=10) where r0
特别注意这样外层查询时由于内层查询的字段有重复列名,所以内层查询最后不要用*。取完每一个表字段,这样很容易报错(“无效字段”)
查询,首先你得清楚你需要什么数据,以及你所需要的数据,存在于哪些表中,或者说与哪些表有关联。
SQL 语句基本查询语法: 不加条件查询,select * from 表名 ; 加条件查询:select * from 表名 where 满足的条件;
多表查询 :select a.* ,b.* from 表1 a,表2 b where a.字段=b.字段;
我对你的表进行了整理下,没有使用中文,都是英文编写,严格按照企业的要求,这也是比较好的习惯。
以下是建表语句:
create table T_USER_INFO
(USERID number(5) primary key,
USERNAME varchar2(10),
CREDENTIALS varchar2(20));
create table T_CHARGING
(CHARGINGID number(5) primary key,
USERID number(5),
MONEY number(5),
CHARGINGDATE date);
insert into T_USER_INFO values(1, '张三', '222222');
insert into T_USER_INFO values(2, '李四', '333333');
insert into T_CHARGING values(1, 1, 300, to_date('2008-9-1', 'yyyy-mm-dd'));
insert into T_CHARGING values(2, 1, 300, to_date('2009-9-1', 'yyyy-mm-dd'));
insert into T_CHARGING values(3, 1, 300, to_date('2010-9-1', 'yyyy-mm-dd'));
insert into T_CHARGING values(4, 2, 400, to_date('2014-9-1', 'yyyy-mm-dd'));
用户信息表:
计费表:
接下来是查询语句,分了几步,注意理解。
1、查询每个人的最后缴费时间
select USERID, max(CHARGINGDATE) LASTDATE
from T_CHARGING
group by USERID
执行 结果:
2、将第一步得到的结果与用户信息关联查询
select u.USERID, u.USERNAME, u.CREDENTIALS, t.LASTDATE
from T_USER_INFO u, (select USERID, max(CHARGINGDATE) LASTDATE
from T_CHARGING group by USERID) t
where t.USERID = u.USERID
执行结果:
3、将第二步得到的结果与计费表进行关联查询。
select t0.USERID, t0.USERNAME, t0.CREDENTIALS, t0.LASTDATE, tc.MONEY
from (select u.USERID, u.USERNAME, u.CREDENTIALS, t.LASTDATE
from T_USER_INFO u, (select USERID, max(CHARGINGDATE) LASTDATE
from T_CHARGING
group by USERID) t
where t.USERID = u.USERID) t0, T_CHARGING tc
where tc.USERID = t0.USERID and t0.LASTDATE = tc.CHARGINGDATE;
执行结果: