left join、inner join、right join详解

很多应用场景,为了降低数据冗余,往往把数据拆解成多个表存储,表与表之间通过外键建立关联。基于这场景我们会用到链表查询获取数据。

链表方式:

  • left join:左链,先获取左表满足筛选条件的数据,再获取左表与右表等值的右表数据,即使左表中存在不与右表匹配的数据也被获取。
  • inner join:内链,俗称等值查询。左表与右表存在匹配的数据将被筛选出来。即两表的交集。
  • right join:右链,与左链相反。先获取右表满足筛选条件的数据,再获取右表与左表等值的左表数据,即使右表中存在不与左表匹配的数据也被获取。

 

场景:有演员(演员名字、演员描述)、电影(电影名字、电影类型、电影描述)等信息,需要获取xxx演员参与的电影详细信息。演员可以饰演多部电影,电影可由多名演员饰演。

表设计

电影表:

CREATE TABLE `movie` (
  `m_id` int(10) unsigned NOT NULL COMMENT '电影id',
  `m_name` varchar(20) NOT NULL DEFAULT '' COMMENT '电影名称',
  `m_type` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '电影类型',
  `m_desc` varchar(10) NOT NULL DEFAULT '' COMMENT '电影描述',
  PRIMARY KEY (`m_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='电影表'

 演员表:

CREATE TABLE `user` (
  `u_id` int(10) unsigned NOT NULL COMMENT '演员id',
  `u_name` varchar(20) NOT NULL DEFAULT '' COMMENT '演员名称',
  `m_desc` varchar(10) NOT NULL DEFAULT '' COMMENT '演员描述',
  PRIMARY KEY (`u_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='演员表'

演员参演电影信息:

CREATE TABLE `user_movie` (
  `um_id` int(10) unsigned NOT NULL COMMENT '参演id',
  `u_id` int(10) unsigned NOT NULL COMMENT '演员id',
  `m_id` int(10) unsigned NOT NULL COMMENT '电影id',
  PRIMARY KEY (`um_id`),
  INDEX um_id(`u_id`,`m_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='演员参演的电影表'

 

Sql 实现:

select * from user u left join user_movie um on u.u_id=um.u_id left join movie m on um.m_id=m.m_id where u.u_name='xxx';

 

转载于:https://my.oschina.net/miyae/blog/914959

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值