找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
多张表存在的时候要注意:
如果你想得到多表中的数据那么就必须要把对应的表实现关联
aa表中有:id号,name姓名
                  1001   张三
                  1002   李四                  
cc表中有:id号,分数
          1001    100
关联表的要素就是:两个表中必须要有相同的字段
aa表和cc表中相同的字段是:id
那么要把两个表进行关联可以通过id来实现关联
多表连接的方法:
1、内连接:inner join on
基本格式:select 字段列表 from 表1 inner join 表2 on 表1.字段=表2.字段
select * from aa inner join cc on aa.id=cc.s_id;
通过aa表中的id和cc表中id实现关联使用的是内连接的方法
内连接的方法取两个表中存在的相同的字段,一个表有一个表没有就不取
查找张三这个人他的 分数是多少
select * from aa inner join cc on aa.id=cc.s_id;
select * from aa inner join cc on aa.id=cc.s_id where name='zhangsan';
select score from aa inner join cc on aa.id=cc.s_id where name='zhangsan';
select cc.score from aa inner join cc on aa.id=cc.s_id where name='zhangsan';

2、左连接 left join on
(左边表中数据显示全部)
select 字段列表 from 表1 left join 表2 on 表1.字段=表2.字段
select * from aa left join cc on aa.id=cc.s_id;
以左边的表为基准,左边表有多少就显示多少,如果右表数据是小于左表
表那么自动补齐为null
select * from cc left join aa on aa.id=cc.s_id;
以左边的表为基准,左边表有多少就显示多少,如果左表数据是小于右表
数据,那么左表有多少数据就显示多少数据,右表不相同的数据不显示

查找张三这个人他的 分数是多少
select * from aa left join on aa.id=cc.s_id;
select * from aa left join on aa.id=cc.s_id where name='zhangsan';
select scroe from aa left join on aa.id=cc.s_id where name='zhangsan';

3、右连接方法询(右边表中数据显示全部)
right join on
select 字段列表 from 表1 right join 表2 on 表1.字段=表2.字段
select * from aa right join cc on aa.id=cc.s_id;
以右边的表为基准,右边表有多少就显示多少,如果右表数据是小于左表
数据,那么右表有多少数据就显示多少数据,左表不相同的数据不显示
select * from cc right join aa on aa.id=cc.s_id;
以右边的表为基准,右边表有多少就显示多少,如果左表数据是小于右表
表那么自动补齐为null
查找张三这个人他的 分数是多少
select * from cc right join aa on aa.id=cc.s_id;
select * from cc right join aa on aa.id=cc.s_id where name='zhangsan';
select score from cc right join aa on aa.id=cc.s_id where name='zhangsan';

4、union连接,把张相同数目的表进行连接形成一张表
select * from aa union select * from cc;
//union连接(前提条件,多 个关系表的表字段数        目必须相同)
5、基本连接
select * from aa,cc where aa.id=cc.s_id;
select * from cc,aa where aa.id=cc.s_id;
基本连接方法取两个表中相同对应的字段,非相同对应字段不截取

1、查找当前表中张三的成绩信息
临时
select * from aa;姓名表
select * from cc;成绩表
select * from aa,cc where aa.id=cc.s_id; 先拼接成为一张表
select * from aa,cc where aa.id=cc.s_id and name='zhangsan'; 然后在表中找到张三
select * from (select * from aa,cc where aa.id=cc.s_id and name='zhangsan')c;创建一个临时表表名称是c
select score from (select * from aa,cc where aa.id=cc.s_id and name='zhangsan')c;

基本
select * from aa;姓名表
select * from cc;成绩表
select * from aa,cc where aa.id=cc.s_id; 先拼接成为一张表
select * from aa,cc where aa.id=cc.s_id and name='zhangsan'; 然后在表中找到张三
select score from aa,cc where aa.id=cc.s_id and name='zhangsan'; 然后在表中找到张三的成绩

嵌套
select * from aa;姓名表
select * from cc;成绩表
select * from aa where name='zhangsan'; 找出张三的信息
select id from aa where name='zhangsan'; 找出张三的信息,然后取张三的id
select * from cc where s_id=(select id from aa where name='zhangsan');
select score from cc where s_id=(select id from aa where name='zhangsan');

select * from aa;姓名表
select * from cc;成绩表
select * from aa where name='zhangsan'; 找出张三的信息
select id from aa where name='zhangsan'; 找出张三的信息,然后取张三的id
select * from cc where s_id in(select id from aa where name='zhangsan');
select score from cc where s_id in(select id from aa where name='zhangsan');

求出谁没参加考试?
通过not in不包含方法
select * from aa; 姓名表
select * from cc; 成绩表
select * from aa,cc where aa.id=cc.s_id; 基本连接
select id from aa,cc where aa.id=cc.s_id; 取到已有成绩的张三的信息
select * from aa where id not in(select id from aa,cc where aa.id=cc.s_id); Not in 方法不包含某个值
select name from aa where id not in(select id from aa,cc where aa.id=cc.s_id);显示结果

通过is null 为空
select * from aa; 姓名表
select * from cc; 成绩表
select * from aa left join cc on aa.id=cc.s_id; 把两个表进行左连接拼接
select * from aa left join cc on aa.id=cc.s_id where score is null;
select name from aa left join cc on aa.id=cc.s_id where score is null;

临时表方法
select * from aa; 姓名表
select * from cc; 成绩表
select * from aa left join cc on aa.id=cc.s_id; 把两个表进行左连接拼接
select * from(select * from aa left join cc on aa.id=cc.s_id)y;  创建一个临时表
select * from(select * from aa left join cc on aa.id=cc.s_id)y where y.score is null;  通过临时表去找出为空的数据
select name from(select * from aa left join cc on aa.id=cc.s_id)y where y.score is null;  通过临时表去找出为空的数据

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册