mysql多表查询

本文深入探讨了数据库中的一对一、一对多、多对多关系实现方式,以及如何通过内连接、外连接和自连接进行有效查询。此外,还介绍了联合查询和子查询的应用,包括不同类型的子查询及其在SQL语句中的位置。对于数据处理和分析人员来说,掌握这些技术是至关重要的。
摘要由CSDN通过智能技术生成

多表关系分类

一对一:任意一方添加外键,关联另外一方的主键,并且设置外键唯一unique

一对多(多对一) :在多的一方建立外键,指向一的一方的主键

多对多:将两张表的主键提取出来建立一张中间表

        直接查询:会产生无效的笛卡尔积

select * from table1,table2;

        加入where条件解决无效笛卡尔积问题

select * from table1,table2 where table1.id=table2.id;

连接查询

内连接:两张表交集部分数据

隐式内连接
select 字段列表 from table1,table2 where 条件;

显式内连接
select 字段列表 from table1 inner join table2 on 连接条件; 

左外连接:左表全部数据,两张表交集部分数据

select 字段列表 from table1 left join table2 on table1.id=table2.id; 

右外连接:右表全部数据,两张表交集部分数据

select 字段列表 from table1 right join table2 on table1.id=table2.id; 

自连接:与表自身连接,必须使用别名

select * from table 别名1 join table 别名2 on 别名1.id=别名2.id;

联合查询

将多次查询的结果合并起来,形成一个新的结果集。

多张

select 字段列表 from t1 where column=(select column from t2);

表的列数必须保保持一致。

union:将所有数据合并,去除重复

union al: 将所有数据直接合并,不去除重复

select 字段列表 from table1
union (all)
select 字段列表 from table2;

子查询(嵌套查询)

sql语句中嵌套select语句,成为子查询(嵌套查询)

select * from t1 where column=(select column from t2);

子查询出现的位置:

                        where之后

                        from之后

                        select之后

根据查询结果分为:

        标量子查询:子查询结果为单个值

常用操作符:= ,<= ,>= , > ,< ,<>

        列子查询:子查询结果为一列

常用的操作符: IN NOT IN ANY SOME ALL
     

      

select * from emp where dept_id in 
(select id from dept where name = '销售部' or name = '市场部');

         行子查询:子查询结果为一行

常用的操作符: = <> IN NOT IN
select * from emp where (salary,managerid) = 
(select salary, managerid from emp where name = '张无忌');

        表子查询:子查询结果为多行多列

常用的操作符: IN
select * from emp where (job,salary) in 
( select job, salary from emp where name = '鹿杖客' or name = '宋远桥' );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值