mysql电商类查询_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);

879b33cfe3b87f42054105b543000bbe.png

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

一,inner join 内查询

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

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

a6d022c7ba0b7f666cb4872b0b874549.png

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

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

8b390403169530c2637b6ee10bba6863.png

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

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

b62f9dca86c9070937a33225db4a3629.png

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

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

7853baea9a155dedd8eab4deb459607d.png

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

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

dd9fa9e443cac14a14b5b1833c2ab9a5.png

四,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;

781c05c4efcab68f8936d168564b052b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值