mysql查询航班

初始化脚本

CREATE DATABASE /*!32312 IF NOT EXISTS*/`test_db` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `test_db`;

DROP TABLE IF EXISTS `cities`;
CREATE TABLE `cities` (
  `mid` int(11) NOT NULL AUTO_INCREMENT,
  `cnty` varchar(20) DEFAULT NULL COMMENT '城市名称',
  PRIMARY KEY (`mid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
insert  into `cities`(`mid`,`cnty`) values (1,'中国'),(2,'日本');

DROP TABLE IF EXISTS `fight`;
CREATE TABLE `fight` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `originating` int(11) DEFAULT NULL COMMENT '始发地',
  `destination` int(11) DEFAULT NULL COMMENT '目的地',
  `start_time` datetime DEFAULT NULL COMMENT '飞行开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '飞行结束时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
insert  into `fight`(`id`,`originating`,`destination`,`start_time`,`end_time`) values (1,1,2,'2018-06-17 22:02:25','2018-06-29 22:02:29'),(2,2,1,'2018-06-24 22:02:25','2018-06-29 22:02:29'),(3,5,4,'2018-06-24 22:02:25','2018-06-29 22:02:29'),(4,1,3,'2018-03-05 22:02:25','2018-06-29 22:02:29');

参考地址:
https://segmentfault.com/q/1010000002479002

查询 中国飞日本的飞机航班,效率低

SELECT * FROM fight,
    (SELECT `MID` FROM cities WHERE cnty='中国') AS tb1,
        (SELECT `MID` FROM cities WHERE cnty='日本') AS tb2
WHERE fight.originating=tb1.mid AND fight.destination=tb2.mid

查询中国

SELECT fight.*,cities.* FROM fight,cities
WHERE fight.originating=cities.mid AND cnty='中国';

查询日本

SELECT fight.*,cities.* FROM fight,cities
WHERE fight.destination=cities.mid AND cnty='日本';

EXISTS 写法

EXPLAIN
    SELECT f1.*,cities.* 
    FROM fight f1,cities
    WHERE f1.originating=cities.mid AND cnty='中国'
AND EXISTS 
(   SELECT f2.*,cities.* FROM fight f2,cities
    WHERE f2.destination=cities.mid AND cnty='日本' AND f1.id=f2.id
)

IN 写法

EXPLAIN
SELECT f1.*,cities.* 
FROM fight f1,cities
WHERE f1.originating=cities.mid AND cnty='中国'
AND f1.id IN 
(   SELECT f2.id FROM fight f2,cities
    WHERE f2.destination=cities.mid AND cnty='日本'
)

猜你喜欢

转载自blog.csdn.net/u010503822/article/details/80795444