MySQL多表查询Left Join,Right Join学习笔记

本文详细介绍了MySQL中的四种联结类型:内联结、外联结(包括左联结和右联结)、全联结及无联结,并通过具体实例进行说明,帮助读者更好地理解和掌握MySQL的联结查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://my.oschina.net/adamboy/blog

MySQL多表连接查询Left Join,Right Join php开源嘛

         在讲MySQLJoin语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内容有错误或有疑问,国内关于 MySQL联结查询的资料十分少,相信大家在看了本文后会对MySQL联结语法有相当清晰的了解,也不会被Oracle的外联结的(号)弄得糊涂 了。

         SQL标准中规划的(Join)联结大致分为下面四种:

我的数据库中有两张表,分别为users和products如下:

users表:

products 表:

users表:

CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(40) collate utf8_unicode_ci NOT NULL,
  `password` varchar(40) collate utf8_unicode_ci NOT NULL,
  `status` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`id`, `name`, `password`, `status`) VALUES
(1, 'adam', '0000', 1),
(2, 'lht', '0000', 0),
(3, 'lihantuan', '0000', 0),
(4, 'lhq', '0000', 0),
(5, 'admin', '0000', 1);

Pruducts表:

CREATE TABLE `products` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(40) collate utf8_unicode_ci NOT NULL,
  `comefrom` varchar(40) collate utf8_unicode_ci NOT NULL,
  `maketime` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;

--
-- Dumping data for table `products`
--

INSERT INTO `products` (`id`, `name`, `comefrom`, `maketime`) VALUES
(1, 'adam', 'china', '2011-05-16 15:53:03'),
(2, 'lht', 'japan', '2011-05-16 15:53:18'),
(3, 'lihantuan', 'America', '2011-05-16 15:53:37'),
(4, 'lhq', 'China', '2011-05-17 15:16:00'),
(5, 'lhw', 'CN', '2011-05-18 16:33:15');

1 内联结:select users.*,products.comefrom from users,products where users.name = products.name,查询结果是(如果图片不显示,copy该语句到数据库里执行就能看到结果):

2 外联结:分为外左联结和外右联结。 php开源嘛

        左联结AB表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录。

右联结AB表的结果和左联结BA的结果是一样的,也就是说:

Select A.name B.name From A Left Join B On A.id=B.idSelect A.name B.name From B Right Join A on B.id=A.id执行后的结果是一样的。

举例:外左联结(Select A.name B.name From A Left Join B On A.id=B.id

数据库里执行查询:select users.*,products.comefrom from users left join products on users.name = products.name

将显示如下:(如果图片不显示,copy该语句到数据库里执行就能看到结果)

执行:select products.*,users.password from products left join users on products.name = users.name

将显示如下:

举例外右联结:Select A.name B.name From B Right Join A on B.id=A.id

执行语句:select users.*,products.name from users right join products on users.name = products.name,将显示如下结果:(如果图片不显示,copy该语句到数据库里执行就能看到结果)

          3.全联结:将两个表中存在联结关系的字段的所有记录取出形成记录集的联结(这个不需要记忆,只要是查询中提到了的表的字段都会取出,无论是否符合联结条件,因此意义不大)。

         4.无联结:不用解释了吧,就是没有使用联结功能呗,也有自联结的说法。

这里我有个比较简便的记忆方法,内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分。外左联结与外右联结的区别在于如果用A左联 BA中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了。其实大家回忆高等教育出版社出版的《数据库系 统概论》书中讲到关系代数那章(就是将笛卡儿积和投影那章)的内容,相信不难理解这些联结功能的内涵。

转载于:https://my.oschina.net/adamboy/blog/17616

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值