如何编写MariaDB四表关联查询获取指定字段?
关联四张酒店表的SQL查询解决方案
嘿,作为数据库新手,要关联这四张表获取你需要的字段其实很简单,我先帮你理清楚表之间的关联关系,再给出对应的SQL语句。
首先先确认下四张表的结构信息:
表结构详情
transaksi表(交易表)
MariaDB [nava_hotel]> desc transaksi; +----------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+-------------+------+-----+---------+-------+ | kode_transaksi | varchar(10) | NO | PRI | NULL | | | kode_pemesanan | varchar(10) | YES | | NULL | | | lama_menginap | int(3) | YES | | NULL | | | total | bigint(20) | YES | | NULL | | +----------------+-------------+------+-----+---------+-------+
pemesanan表(预订表)
MariaDB [nava_hotel]> desc pemesanan; +----------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+-------------+------+-----+---------+-------+ | kode_pemesanan | varchar(10) | NO | PRI | NULL | | | kode_tamu | varchar(10) | YES | | NULL | | | kode_kamar | varchar(10) | YES | | NULL | | | tgl_checkin | datetime | YES | | NULL | | | tgl_checkout | datetime | YES | | NULL | | +----------------+-------------+------+-----+---------+-------+
tamu表(客人表)
MariaDB [nava_hotel]> desc tamu; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | kode_tamu | varchar(10) | NO | PRI | NULL | | | nama | varchar(30) | YES | | NULL | | | alamat | text | YES | | NULL | | | telepon | varchar(15) | YES | | NULL | | | email | varchar(20) | YES | | NULL | | +-----------+-------------+------+-----+---------+-------+
kamar表(房间表)
MariaDB [nava_hotel]> desc kamar; +-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | kode_kamar | varchar(10) | NO | PRI | NULL | | | jenis_kamar | varchar(20) | YES | | NULL | | | fasilitas | text | YES | | NULL | | | harga | bigint(20) | YES | | NULL | | +-------------+-------------+------+-----+---------+-------+
关联查询SQL语句
表之间的关联逻辑是:transaksi通过kode_pemesanan关联pemesanan,pemesanan又分别通过kode_tamu关联tamu、kode_kamar关联kamar。下面给你两种常用的查询方式:
方式1:只返回全关联匹配的记录(INNER JOIN)
这种方式只会保留所有表中都有对应关联数据的记录,适合你只需要完整交易-预订-客人-房间信息的场景:
SELECT t.kode_transaksi, p.kode_pemesanan, p.kode_kamar, k.jenis_kamar, p.kode_tamu, tm.nama FROM transaksi t INNER JOIN pemesanan p ON t.kode_pemesanan = p.kode_pemesanan INNER JOIN kamar k ON p.kode_kamar = k.kode_kamar INNER JOIN tamu tm ON p.kode_tamu = tm.kode_tamu;
方式2:保留所有交易记录(LEFT JOIN)
如果有些交易可能还没有关联的预订信息,或者预订信息缺少客人/房间数据,你想保留这些交易记录的话,可以用LEFT JOIN,缺失的字段会显示为NULL:
SELECT t.kode_transaksi, p.kode_pemesanan, p.kode_kamar, k.jenis_kamar, p.kode_tamu, tm.nama FROM transaksi t LEFT JOIN pemesanan p ON t.kode_pemesanan = p.kode_pemesanan LEFT JOIN kamar k ON p.kode_kamar = k.kode_kamar LEFT JOIN tamu tm ON p.kode_tamu = tm.kode_tamu;
我给每个表都起了短别名(比如t代表transaksi),这样写起来更简洁,也避免了不同表中字段名重复的问题,你可以直接复制这些语句去执行哦~
内容的提问来源于stack exchange,提问作者APSB
相关产品推荐
相关产品推荐

