MySQL--多表查询

多表查询的分类:

面对问题:select * from student ,school; 这条语句查询出来的结果是个数是”笛卡尔积“。

笛卡尔积:
1,有两个集合A,B。取这两个集合的所有组成情况
2,要完成多表查询,需要消除无用的数据

1,内连接查询:

  • 1,隐式内连接:使用where条件消除无用数据

      例子:若有student和school两表(存在外键关联),
      语法:select * from student,school where select.id=school.id;
      (一般查询几行列表,所以:select student.name,school.name FROM student,school WHERE select.id=school.id;)
    
  • 2,显示内连接:

      语法:select 字段列表 FROM 表名1 [INNER] JOIN 表名2 ON 条件;([]表示可写可不写)
    

    内连接查询:
    1,从哪些表中查询数据
    2,条件是什么
    3,查询哪些字段


2,外连接查询:

---1,左外连接:
	语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
	查询:查询的是左表所有数据以及交集部分
	
---1,右外连接:
	语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
	查询:查询的是右表所有数据以及交集部分
	
注意:学一个就可以了,因为把表1和表2的位置调换之后也就变成另一个方向外连接。

3,子查询:
概念:查询中嵌套查询,称嵌套查询为子查询
事例:查询表中的最高成绩:
select max(math) from student; – 假设最高数学成绩为90
select * from student where math=90;
(需要两个步骤完成)

语法:select * from student where math=(select max(math) from student);

子查询不同的情况:
	1,子查询的结果是单行单列的:
		子查询可以作为条件,使用运算符去判断。
	
	2,子查询的结果是多行单列的
		子查询可以作为条件,使用运算符in去判断
		
	3,子查询的结果是多行多列的
		子查询可以作为一张虚拟表。
		例子:select school,(select * from student where>60) t1 where school.id=t1.id;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值