Mysql多表查询

笛卡尔积:

在默认情况下,当量表查询时,规则:

1.从第一张表中,取出一行和第二张表的每一行进行组合,返回结果(含有两张表的所有列)

2.一共返回的记录数:第一张表的行数*第二章表的行数

3.这样多表查询默认处理返回的结果称为笛卡尔积

4.解决这个多表的关键就是要写出正确的过滤条件where

相等连接

把两个表中,指定列的值相等的行连接起来

不等连接

自连接

自连接是指在同一张表的连接查询(将同一张表看做两张表)。

需要给表取别名

子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

单行子查询

单行子查询是指只返回一行数据的子查询语句

多行子查询

多行子查询指返回多行数据的子查询,使用关键字 in

在多行子查询中使用all操作符

(大于最大的,小于最小的)

也可以用max()和min()替换

在多行子查询中使用any操作符

(大于最小的,小于最大的)

也可以用max()和min()替换

子查询可以当做临时表使用

SELECT ...

                 FROM (子查询) 别名 , 另一个表名

                                where 条件

多列子查询

where(列1,列2...)= (select 列1,列2 from...)

表复制

自我复制(蠕虫复制)

有时,为了对某个sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据

INSERT INTO 表名

                SELECT * FROM 表名;

表结构复制

 CREATE TABLE 新表 LIKE 旧表;     把旧表的结构复制到新表中

表去重

1.先创建一张临时表 newtable,该表的结构和 table 一样

2.把 table 的记录通过 distinct 关键字处理后,把记录复制到 newtable

3.清除掉 table 的记录

4.把 newtable 表的记录复制到 table

5.drop 掉临时表 newtable

也可以给 newtable 添加记录后将 table 删掉,将 newtable 改名为 table

合并查询

有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,unionall

1.union all

该操作符用于取得两个结果集的并集,不会取消重复行。

2.union 

该操作符与union all 相似,但会自动去掉结果集中重复行

外连接

左外连接

左侧的表完全显示我们就说是左外连接,也就是,左边的表和右边的表没有匹配的记录,也会把左边的记录显示出来

SELECT ... FROM 表1 LEFT JOIN 表2 ON 条件;

表1就是左表,表2就是右表;

右外连接

右侧的表完全显示我们就说是右外连接右边的表和左边的表没有匹配的记录,也会把右边的记录显示出来

SELECT ... FROM 表1 RIGHT JOIN 表2 ON 条件;

表1就是左表,表2就是右表;

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值