mysql联合查询

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

 

1,首先创建2个表,一个是student表,一个grades表。

 

生成student表sql:

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `name` varchar(30) NOT NULL,
  `sex` enum('boy','girl') DEFAULT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `student` VALUES (1, 'aaa', 'boy', 10);
INSERT INTO `student` VALUES (2, 'bbb', 'girl', 10);
INSERT INTO `student` VALUES (3, 'ccc', 'boy', 10);
INSERT INTO `student` VALUES (4, 'ddd', 'boy', 10);
INSERT INTO `student` VALUES (5, 'eee', 'boy', 20);
INSERT INTO `student` VALUES (6, 'fff', 'boy', 18);

 

生成grades表sql:

DROP TABLE IF EXISTS `grades`;
CREATE TABLE `grades` (
  `id` int(11) NOT NULL,
  `math` int(11) NOT NULL,
  `chinese` int(11) NOT NULL,
  `english` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `grades` VALUES (1, 90, 94, 95);
INSERT INTO `grades` VALUES (2, 100, 30, 88);
INSERT INTO `grades` VALUES (3, 120, 86, 40);
INSERT INTO `grades` VALUES (4, 100, 22, 88);
INSERT INTO `grades` VALUES (7, 94, 90, 90);
INSERT INTO `grades` VALUES (8, 98, 33, 96);

  

 

创建表完成,如上述图片。 

 一,inner join 内查询

1,查询student和grades id相等用户

select student.name,grades.* from student,grades where student.id=grades.id;

 当然使用联合查询中的内连查询 inner join  类似交集

select student.name,grades.* from student inner join grades on student.id=grades.id;

 

2,查询指定用户的所有成绩。

select student.name,grades.* from student,grades where student.id=grades.id and student.name='aaa';

  

 

二,left join 左查询,从左表返回所有的行,如果右表中没有匹配则以NULL补全.

 

select student.name,grades.math from student left join grades  on student.id=grades.id;

 

三,right join (右查询) 从右表返回所有的行,如果左表中没有匹配则以NULL补全

select student.name,grades.math from student right join  grades on student.id=grades.id;     

  

 

四,full join (mysql不存在,orcale支持),但是可以使用union来支持。有点像集合中的并集。

select student.name,grades.math from student right join  grades on student.id=grades.id union select student.name,grades.math from student left join grades on student.id=grades.id;

  

 

转载于:https://www.cnblogs.com/lin1/p/9013651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值