慕移动8199377
只有left join和right join时候,表的顺序不同,对结果有影响,
跟表中的字段没有关系,跟where条件也没有关系。
如果是inner join 表的顺序也不影响结果。
weixin_慕数据2156586
a表、b表就是一个打个比方,假如在数据库中建立了两张表格,一个叫A表、另一个就是B表。就跟讲故事,不知道那两个人名字,但知道他们做了事情,为了方便描述,一般我们会假定这两个人为“张三”、“李四”;不知道我说明白了没;
在本课程中所指A、B表;
A表如下
id user_name
1 孙悟空
2 唐僧
3 猪八戒
4 沙和尚
B表如下
id user_name
1 孙悟空
2 牛魔王
3 蛟魔王
Andylance
关联的表在2到3个还可以,如果更多的话会很慢了,可以借助建立索引来优化查询效率,但是一般建议表的关联查询不超过3个。
MACROA0
(left outer join 左外连接) 等同于 (left join 左连接)。
慕仔_1001
关键是不止4个人啊,另外一张表也有孙悟空。。。
日就月将
那最后查个孙悟空,那结果岂不是说四人组中孙悟空不是孙悟空的结拜兄弟,感觉这个举例不太恰当呀
哈哈哈小宇
末尾(在分号前面)输入\G,
连宏伟HW
现提供建库建表脚本如下:
-- 注意自己是否需要建库
-- create database if not exists mysqldv1;
-- 新建 user1 表
create table if not exists user1 (
id smallint unsigned primary key auto_increment,
user_name varchar(40),
over varchar(40)
);
-- 新建 user2 表
create table if not exists user2 (
id smallint unsigned primary key auto_increment,
user_name varchar(40),
over varchar(40)
);
-- 新建 user_kills 表
create table if not exists user_kills (
id smallint unsigned primary key auto_increment,
user_id smallint unsigned,
timestr timestamp default CURRENT_TIMESTAMP,
kills smallint unsigned
);
-- 插入 user1 表数据
insert into user1(user_name,over) values ('唐僧', '旃檀功德佛');
insert into user1(user_name,over) values ('猪八戒', '净坛使者');
insert into user1(user_name,over) values ('孙悟空', '斗战胜佛');
insert into user1(user_name,over) values ('沙僧', '金身罗汉');
-- 插入 user2 表数据
insert into user2(user_name,over) values ('孙悟空', '成佛');
insert into user2(user_name,over) values ('牛魔王', '被降服');
insert into user2(user_name,over) values ('蛟魔王', '被降服');
insert into user2(user_name,over) values ('鹏魔王', '被降服');
insert into user2(user_name,over) values ('狮驼王', '被降服');
-- 插入 user_kills 表数据
insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-01-10'), 10);
insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-02-01'), 2);
insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-02-05'), 12);
insert into user_kills(user_id, timestr, kills) values (4, timestamp('2013-01-10'), 3);
insert into user_kills(user_id, timestr, kills) values (4, timestamp('2013-02-11'), 5);
insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-02-06'), 1);
insert into user_kills(user_id, timestr, kills) values (3, timestamp('2013-01-11'), 20);
insert into user_kills(user_id, timestr, kills) values (2, timestamp('2013-02-12'), 10);
insert into user_kills(user_id, timestr, kills) values (3, timestamp('2013-02-07'), 17);
染墨年华
你说我叫啥好呢
第一个问题:什么时候用left join?说说我的理解
两个表(left join左边的表称为左表,右边的称为右表)有主外键关联时,这个是前提条件,我们想同时查询两个表中的信息,这个时候可以采用这种left join,当然也可以用right join,简单说一下区别,left join是以左表为主,就是查询出左表的全部数据并查询出右表的主外键关联数据,right join相反。你可以找点文章看看。
第二个问题:连接条件怎么确定?
SELECT * FROM beasp_user u LEFT JOIN beasp_address a ON u.`id`=a.`user_id`
这里u.'id' 中的 id 为左表的主键,a.'user_id'为右表的外键,指向 u 表的主键。就是主外键关联作为条件。
第三个问题:怎么知道用那个表作为左表?
就像第一个问题中所说的,想查询某个表中的所有内容,查询另一个表中的关联内容,那么想查询所有内容的表作为左表。
第四个问题:怎么确定要查询那些字段?
* 代表查询所有字段,如果想查询某个表的字段,可以使用 "表名(如果有别名,就用别名).*",如果想查询部分字段,可以使用“表名(如果有别名,就用别名).字段名”,如果字段有冲突,就为字段重新命名!
慕无忌2056279
这个在课程中有提到的
weibo_设计前沿
on后面的是连接条件,代表两个表建立关系所遵循的规则
where后面的可以看作是筛选条件,是对最终结果集进行过滤所遵循的规则