如何连接 sql 中的三个数据库表
How to join three database tables in sql
我有这三个数据库tables
CREATE TABLE IF NOT EXISTS `bus_info` (
`bus_id` int(11) NOT NULL,
`bus_no` varchar(20) NOT NULL
)
INSERT INTO `bus_info` (`bus_id`, `bus_no`) VALUES
(1, 'Mh10 BD 5209');
CREATE TABLE IF NOT EXISTS `route_info` (
`route_id` int(11) NOT NULL,
`route_name` varchar(100) NOT NULL,
`latitude` varchar(200) NOT NULL,
`longitude` varchar(200) NOT NULL
)
INSERT INTO `route_info` (`route_id`, `route_name`, `latitude`, `longitude`) VALUES
(1, 'Sangli Stand', '16.852903', '74.562999'),
(2, 'Maruti Chowk', '16.858100', '74.562460'),
(3, 'Ganpati Mandir', '16.862211', '74.559501'),
(4, 'College Corner ', '16.862854', '74.576579'),
(5, 'Ram Mandir ', '16.856413', '74.574738'),
(6, 'D mart', '16.845782', '74.576866'),
(7, 'Vishrambag sangli', '16.846022', '74.602854'),
(8, 'Bharat Mill', '16.865029', '74.607000'),
(9, 'Bharti hospital', '16.840008', '74.618400'),
(10, 'SBGI', '16.835329', '74.624400');
CREATE TABLE IF NOT EXISTS `route_detail` (
`rd_id` int(11) NOT NULL,
`bus_id` int(11) NOT NULL,
`route_id` int(11) NOT NULL
)
INSERT INTO `route_detail` (`rd_id`, `bus_id`, `route_id`)
VALUES (1, 1, 1),
(2, 1, 2);
我正在为单辆公共汽车分配特定路线,单辆公共汽车可能有多条路线,那么我需要查询为所选公共汽车选择路线
例如:
从 route_detail table 中的数据库中,为同一辆公共汽车分配了两条路线,那么我需要来自以上三个 table 的列是
bus_id,bus_no,route_id,纬度,经度
确切的语法取决于您使用的数据库。要在 Oracle 中执行此操作,我希望编写这样的查询;
select a.bus_id, a.bus_no, c.route_id, c.latitude, c.longitude
from
bus_info a join
route_detail b on a.bus_id = b.bus_id
route_info c on b.route_id = c.route_id
where {alias.column_name} {operator} {operand};
每个 table 您希望加入的人都需要一份加入声明。
每个连接都通过在要连接的两个 table 上找到匹配的键来工作。
使用 table 个别名(a、b、c 等)来保持查询简洁。
所有连接的结果是一个大 table,您可以通过正常方式从中查询。
我无法从您的问题中准确判断出您想了解每辆公共汽车的哪些信息,因此内连接或外连接可能更适合您。默认情况下完成内部连接,这意味着只包含匹配所有查询条件的行。从广义上讲,外部连接会带回更多东西。
我做到了......
SELECT
bus_info.bus_no, route_detail.route_id, route_info.latitude,
route_info.longitude
FROM
(bus_info
INNER JOIN
route_detail ON bus_info.bus_id = route_detail.bus_id)
INNER JOIN
route_info ON route_detail.route_id = route_info.route_id
我有这三个数据库tables
CREATE TABLE IF NOT EXISTS `bus_info` (
`bus_id` int(11) NOT NULL,
`bus_no` varchar(20) NOT NULL
)
INSERT INTO `bus_info` (`bus_id`, `bus_no`) VALUES
(1, 'Mh10 BD 5209');
CREATE TABLE IF NOT EXISTS `route_info` (
`route_id` int(11) NOT NULL,
`route_name` varchar(100) NOT NULL,
`latitude` varchar(200) NOT NULL,
`longitude` varchar(200) NOT NULL
)
INSERT INTO `route_info` (`route_id`, `route_name`, `latitude`, `longitude`) VALUES
(1, 'Sangli Stand', '16.852903', '74.562999'),
(2, 'Maruti Chowk', '16.858100', '74.562460'),
(3, 'Ganpati Mandir', '16.862211', '74.559501'),
(4, 'College Corner ', '16.862854', '74.576579'),
(5, 'Ram Mandir ', '16.856413', '74.574738'),
(6, 'D mart', '16.845782', '74.576866'),
(7, 'Vishrambag sangli', '16.846022', '74.602854'),
(8, 'Bharat Mill', '16.865029', '74.607000'),
(9, 'Bharti hospital', '16.840008', '74.618400'),
(10, 'SBGI', '16.835329', '74.624400');
CREATE TABLE IF NOT EXISTS `route_detail` (
`rd_id` int(11) NOT NULL,
`bus_id` int(11) NOT NULL,
`route_id` int(11) NOT NULL
)
INSERT INTO `route_detail` (`rd_id`, `bus_id`, `route_id`)
VALUES (1, 1, 1),
(2, 1, 2);
我正在为单辆公共汽车分配特定路线,单辆公共汽车可能有多条路线,那么我需要查询为所选公共汽车选择路线
例如:
从 route_detail table 中的数据库中,为同一辆公共汽车分配了两条路线,那么我需要来自以上三个 table 的列是
bus_id,bus_no,route_id,纬度,经度
确切的语法取决于您使用的数据库。要在 Oracle 中执行此操作,我希望编写这样的查询;
select a.bus_id, a.bus_no, c.route_id, c.latitude, c.longitude
from
bus_info a join
route_detail b on a.bus_id = b.bus_id
route_info c on b.route_id = c.route_id
where {alias.column_name} {operator} {operand};
每个 table 您希望加入的人都需要一份加入声明。 每个连接都通过在要连接的两个 table 上找到匹配的键来工作。 使用 table 个别名(a、b、c 等)来保持查询简洁。 所有连接的结果是一个大 table,您可以通过正常方式从中查询。 我无法从您的问题中准确判断出您想了解每辆公共汽车的哪些信息,因此内连接或外连接可能更适合您。默认情况下完成内部连接,这意味着只包含匹配所有查询条件的行。从广义上讲,外部连接会带回更多东西。
我做到了......
SELECT
bus_info.bus_no, route_detail.route_id, route_info.latitude,
route_info.longitude
FROM
(bus_info
INNER JOIN
route_detail ON bus_info.bus_id = route_detail.bus_id)
INNER JOIN
route_info ON route_detail.route_id = route_info.route_id