Oracle:简单分析火车票余票查询和座位剩余
2017-11-09 16:21
806 查看
引用CSDN论坛上的一个问题,http://bbs.csdn.net/topics/392284590 ,开始思路错误,给了一个错误的答案,然后仔细分析了一下
题目如下:
假设有一个车次1经过5个站,站点1,站点2,站点3,站点4,站点5(另外有一个车次2,经过站点3,站点4,站点6)
有3个座位,座位1,座位2,座位3
有乘客,买了车次1 站点1到站点3的座位1,站点4到站点5的座位1,
站点2到站点4的座位2,站点1到站点2的座位3,站点3到站点5的座位3,
自己确定数据库表的结构
问:怎么查到站点3到站点4的车次信息,它的余票,哪个座位有余票
思路:创建三张表,分别如下
插入数据:
题目如下:
假设有一个车次1经过5个站,站点1,站点2,站点3,站点4,站点5(另外有一个车次2,经过站点3,站点4,站点6)
有3个座位,座位1,座位2,座位3
有乘客,买了车次1 站点1到站点3的座位1,站点4到站点5的座位1,
站点2到站点4的座位2,站点1到站点2的座位3,站点3到站点5的座位3,
自己确定数据库表的结构
问:怎么查到站点3到站点4的车次信息,它的余票,哪个座位有余票
思路:创建三张表,分别如下
--座位信息表 drop table train_seat; create table train_seat( num varchar(6), --车次 seat_num varchar(10),--座位号 primary key(num,seat_num) ); --站点信息表 drop table train_site; create table train_site( num varchar(6), --车次 site varchar(10),--站点 primary key(num,site) ); ----创建序列 create sequence train_order_seq increment by 1 start with 1 maxvalue 10000 nominvalue nocache --订票信息表 drop table train_order; create table train_order( id int, num varchar(6), --车次 site_start varchar(10),--起始站点 site_end varchar(10),--截止站点 isOrder int,--是否预定:0-否,1-是 seat_num varchar(10),--座位号 order_people varchar(10),--预定人 primary key(id) );
插入数据:
INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '1', '3', 1, '1', 'A'); INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '4', '5', 1, '1', 'B'); INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '2', '4', 1, '2', 'C'); INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '1', '2', 1, '3', 'D'); INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '3', '5', 1, '3', 'E'); INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '1'); INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '2'); INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '3'); INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '4'); INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '5'); INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次2', '3'); INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次2', '4'); INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次2', '6'); INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次1', '1'); INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次1', '2'); INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次1', '3'); INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次2', '1'); INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次2', '2'); INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次2', '3');查询余票及剩余座位信息:
--查询哪个座位有余票 select A.num,A.seat_num from( select s1.num,s1.seat_num,o1.id from train_seat s1 left join train_order o1 on s1.num = o1.num and s1.seat_num = o1.seat_num and o1.site_start <=3 and o1.site_end >=4) A where A.id is null order by A.num --查询余票数 select A.num,count(*) 余票 from( select s1.num,s1.seat_num,o1.id from train_seat s1 left join train_order o1 on s1.num = o1.num and s1.seat_num = o1.seat_num and o1.site_start <=3 and o1.site_end >=4) A where A.id is null group by A.num
相关文章推荐
- Oracle中scott表结构与简单查询实例分析
- ORACLE中EXISTS和IN进行子查询的区别(工作原理分析)
- oracle 10046简单分析
- Oracle编写简单的查询语句,以及限制数据和对数据的排序
- oracle 简单查询,限定查询及排序
- 再次推荐SQLPrompt3 -简单破解无限期的使用这款很不错的SQL查询分析工具
- Oracle:ORA-01789: 查询块具有不正确的结果列数 分析原因和解决办法
- Oracle学习之路——简单查询
- ORACLE ASM中查询表空间使用情况、数据文件路径、裸设备磁盘总大小剩余大小
- oracle 查询不走索引的范例分析
- Oracle基本操作五:简单查询与简单函数,组函数,分组
- oracle进行简单树查询(递归查询)
- oracle学习 第一章 简单的查询语句 ——02
- Oracle查询错误分析:ORA-01791:不是SELECTed表达式
- PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询四:分析重写成querytree
- 使用Oracle外部表来查询分析警告日志
- Oracle笔记(四) 简单查询、限定查询、数据的排序
- oracle 使用explain plan分析查询语句
- oracle简单统计查询
- Oracle知识点总结—scott表结构与简单查询