mysql多表查询

联表查询

思路

  • 分析需求,分析查询的字段来自拿些表, 连接查询
  • 确定使用哪种连接查询
  • 确定交叉点 (这两个表中哪个是数据相同的)
  • 判断条件: 学生表中的 studentNo = 成绩表 studentNO

join on 连接查询

where 等值查询

-- inner join
SELECT  s.sid,gender,sname,num
FROM student AS s
INNER JOIN score  AS sc
ON  s.sid=sc.sid


-- left join
SELECT  s.sid,gender,sname,num
FROM student AS s
LEFT JOIN score  AS sc
ON  s.sid=sc.sid

-- right join
SELECT  s.sid,gender,sname,num
FROM student AS s
RIGHT JOIN score  AS sc
ON  s.sid=sc.sid
操作描述
inner join如果表中至少有一个匹配,就返回行
left join会从左表中返回所有的值,即使右表中没有匹配
reight join会从右表中返回所有的值,即使左表中没有匹配
-- 三表查询
SELECT  s.sid,gender,sname,num,c.`caption`,s.`class_id`
FROM student AS s
INNER JOIN score  AS sc
ON s.sid=sc.sid
INNER JOIN class AS c
ON s.class_id=c.`caption`

总结:

  • 要查询哪些数据 select…
  • 从哪几个表中查 form 表 xxx join 连接的表 on 交叉条件
  • 假设 存在一种多张表查询,慢慢来 ,先查询两张表然后在慢慢增加

自连接

自己的表和自己的表连接,核心:一张表拆为两张一样的表即可

父类

categoryidcategoryName
2信息技术
3软件开发
5美术设计

子类

pidcategoryidcategoryName
34数据库
28办公信息
36web开发
57美术设计

操作:查询父类对应的子类关系

父类子类
信息技术办公信息
软件开发数据库
软件开发web开发
美术设计ps技术

案例:

CREATE TABLE `category`
( `categoryid` INT(3) NOT NULL COMMENT 'id',
 `pid` INT(3) NOT NULL COMMENT '父id 没有父则为1',
 `categoryname` VARCHAR(10) NOT NULL COMMENT '种类名字',
 PRIMARY KEY (`categoryid`) 
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci; 

INSERT INTO `school`.`category` (`categoryid`, `pid`, `categoryname`) VALUES ('2', '1', '信息技术');
INSERT INTO `school`.`CATEGOrY` (`categoryid`, `pid`, `categoryname`) VALUES ('3', '1', '软件开发');
INSERT INTO `school`.`category` (`categoryid`, `PId`, `categoryname`) VALUES ('5', '1', '美术设计');
INSERT INTO `School`.`category` (`categoryid`, `pid`, `categorynamE`) VALUES ('4', '3', '数据库'); 
INSERT INTO `school`.`category` (`CATEgoryid`, `pid`, `categoryname`) VALUES ('8', '2', '办公信息');
INSERT INTO `school`.`category` (`categoryid`, `pid`, `CAtegoryname`) VALUES ('6', '3', 'web开发'); 
INSERT INTO `SCHool`.`category` (`categoryid`, `pid`, `categoryname`) VALUES ('7', '5', 'ps技术');


SELECT * FROM  `category`


-- 查询父子信息 :把一张表看成两个一摸一样的表
SELECT a.`categoryname` AS '父栏目', b.`categoryname` AS '子栏目'
FROM `category` AS a ,`category` AS b
WHERE a.`categoryid`=b.`pid`

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值