mysql连接查询

在使用之前 先创两张表如下↓↓

concrete_class表 :是具体的某一类

DROP TABLE IF EXISTS `concrete_class`;
CREATE TABLE `concrete_class` (
  `o_id` int(11) NOT NULL AUTO_INCREMENT,
  `f_id` int(11) DEFAULT NULL,
  `o_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`o_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of concrete_class
-- ----------------------------
INSERT INTO `concrete_class` VALUES ('1', '1', '广橘');
INSERT INTO `concrete_class` VALUES ('2', '1', '葡萄');
INSERT INTO `concrete_class` VALUES ('3', '2', '牛肉');
INSERT INTO `concrete_class` VALUES ('4', '2', '猪肉');
INSERT INTO `concrete_class` VALUES ('5', '3', '黄瓜');
INSERT INTO `concrete_class` VALUES ('6', '4', '白鹭');
INSERT INTO `concrete_class` VALUES ('7', '4', '麻雀');
INSERT INTO `concrete_class` VALUES ('8', '4', '乌鸦');
INSERT INTO `concrete_class` VALUES ('9', '1', '香蕉');

what_class表:这一物属于的那个种类

DROP TABLE IF EXISTS `what_class`;
CREATE TABLE `what_class` (
  `f_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '水果id',
  `f_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `f_state` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '状态',
  PRIMARY KEY (`f_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of what_class
-- ----------------------------
INSERT INTO `what_class` VALUES ('1', '水果类', '新鲜');
INSERT INTO `what_class` VALUES ('2', '肉类', '不动的');
INSERT INTO `what_class` VALUES ('3', '蔬菜类', '刚摘的');
INSERT INTO `what_class` VALUES ('4', '鸟类', '会飞的');

1.内连接查询:

1.1第一种不使用inner join on:

SELECT f.f_name,o.o_name from what_class f,concrete_class o where f.f_id=o.f_id

1.2第二种使用 inner join on:

SELECT f.f_name,o.o_name from what_class f INNER JOIN concrete_class o on f.f_id=o.f_id

注:inner join 语法是ANSI SQL的标准规范,使用inner join连接语法能够确保不会忘记连接条件,使用where在某些时候回影响查询性能

自连接查询
如果在一个连接查询中,涉及的两张表都是同一个表,这种查询称为自连接查询 是一种特殊的内连接

select c1.f_id,c1.o_name from concrete_class as c1,concrete_class as c2 where c1.o_id = c2.o_id and c2.f_id=1

2.外连接查询
查询前添加几个空数据

INSERT INTO `concrete_class` VALUES ('10', null, '野马');
INSERT INTO `concrete_class` VALUES ('11', null, '鸡蛋');
INSERT INTO `what_class` VALUES ('5', '鱼类', null);
INSERT INTO `what_class` VALUES ('6', null, null);
	2.0 外连接查询将查询多个表中相关联的行,内连接时,返回查询结果集合中的只是符合查询条件和连接条件的行,但有时候需要包含没有关联的行的数据,即返回查询结果集合中的不仅包含符合连接条件的行,而且还包括左表或右表的所有数据行,外连接分为左外连接和右外连接
	left join(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录
	right join(右连接):返回包括右表中的所有记录和左表中连接字段相等的记录
	LEFT JOIN:
SELECT f.f_name,o.o_name from what_class f LEFT JOIN concrete_class o on f.f_id=o.f_id

RIGHT JOIN:

SELECT f.f_name,o.o_name from what_class f RIGHT JOIN concrete_class o on f.f_id=o.f_id

3.复合条件连接查询 只为查询更加的准确

SELECT f.f_name,o.o_name from what_class f INNER JOIN concrete_class o on f.f_id=o.f_id and o.o_id=o.f_id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值