左右连接

全相乘方法(效率很低)

mysql> select * from test10;

+------+-------+

| id   | sname |

+------+-------+

|    1 | 云彩     |

|    2 | 月亮      |

|    3 | 星星      |

+------+-------+

3 rows in set (0.00 sec)

mysql> select * from test11;

+--------+-------+

| cat_id | cname |

+--------+-------+

|     95 | 猴子      |

|     96 | 老虎     |

+--------+-------+

2 rows in set (0.00 sec)

数据库中实现两表*的效果

mysql> select * from test10,test11;

+------+-------+--------+-------+

| id   | sname | cat_id | cname |

+------+-------+--------+-------+

|    1 | 云彩     |     95 | 猴子      |

|    1 | 云彩     |     96 | 老虎     |

|    2 | 月亮      |     95 | 猴子      |

|    2 | 月亮      |     96 | 老虎     |

|    3 | 星星      |     95 | 猴子      |

|    3 | 星星      |     96 | 老虎     |

+------+-------+--------+-------+

6 rows in set (0.03 sec)

分析:

test10看成集合有三个元素

test11看成集合有两个元素

test10*test11得到新集合是有六个元素

行 两个表行数相乘

列 两个表列数相加(可以重复)

多表查询时候列名重复的情况时候,需要明确指出取得是那个表

mysql> select goods_id,minigoods.cat_id,goods_name,category.cat_id,cat_name from minigoods,category limit 3;

+----------+--------+--------------------+--------+----------+

| goods_id | cat_id | goods_name         | cat_id | cat_name |

+----------+--------+--------------------+--------+----------+

|        1 |      4 | KD876              |      1 | 手机类型        |

|        4 |      8 | htcN85原装充电器           |      1 | 手机类型        |

|        3 |      8 | 诺基亚原装5800耳机            |      1 | 手机类型        |

+----------+--------+--------------------+--------+----------+

技巧 :创建一个同样结构的表  create table [新表名] like [旧表名]

create table minigoods like goods;

复制一部分表的内容

mysql> insert into minigoods

-> select * from goods limit 3;

取得有意义的两个表的对应 minigoods.cat_id=category.cat_id

mysql> select goods_id,minigoods.cat_id,goods_name,category.cat_id,cat_name from minigoods,category where minigoods.cat_id=category.cat_id ;

+----------+--------+--------------------+--------+----------+

| goods_id | cat_id | goods_name         | cat_id | cat_name |

+----------+--------+--------------------+--------+----------+

|        1 |      4 | KD876              |      4 | 3G手机      |

|        4 |      8 | htcN85原装充电器           |      8 | 耳机         |

|        3 |      8 | 诺基亚原装5800耳机            |      8 | 耳机         |

+----------+--------+--------------------+--------+----------+

3 rows in set (0.00 sec)

左连接语法

a表在左,不动

b表在右,动

a表和b表通过一个关系(自己设定),来筛选a所需要的b的行

a left join b on [条件]  ----条件为真,取出b的行

a left join b on [条件] 结果集也可以看成表(假设为c表),可以对其再查询

mysql> select goods_id,goods_name,cat_name

-> from

-> (minigoods left join category on minigoods.cat_id=category.cat_id);

+----------+--------------------+----------+

| goods_id | goods_name         | cat_name |

+----------+--------------------+----------+

|        1 | KD876              | 3G手机      |

|        4 | htcN85原装充电器           | 耳机         |

|        3 | 诺基亚原装5800耳机            | 耳机         |

+----------+--------------------+----------+

[minigoods left join category on minigoods.cat_id=category.cat_id 看做c表]

验证:就是后面依然可以使用where 等等过滤条件

mysql> select goods_id,goods_name,cat_name from

(minigoods left join category on minigoods.cat_id=category.cat_id )

where 1 order by goods_id desc limit 2;

+----------+--------------------+----------+

| goods_id | goods_name         | cat_name |

+----------+--------------------+----------+

|        4 | htcN85原装充电器           | 耳机         |

|        3 | 诺基亚原装5800耳机            | 耳机         |

+----------+--------------------+----------+

2 rows in set (0.00 sec)

可以多张表左连接,就是把结果看成表

看做一张表

{{a left join b on [条件]}  left join c on [条件]}

mysql> select goods.goods_id,goods.goods_name,goods.cat_id,cat_name

-> from

-> minigoods left join category on minigoods.cat_id=category.cat_id

-> left join goods on minigoods.cat_id=4 limit 4;

+----------+--------------------+--------+----------+

| goods_id | goods_name         | cat_id | cat_name |

+----------+--------------------+--------+----------+

|        1 | KD876              |      4 | 3G手机      |

|        4 | htcN85原装充电器           |      8 | 3G手机      |

|        3 | 诺基亚原装5800耳机            |      8 | 3G手机      |

|        5 | 索爱原装M2卡读卡器               |     11 | 3G手机      |

+----------+--------------------+--------+----------+

左右连接的区别===================================================================================================

a left join b on 意思是查询的时候以a为基准查询

a right join b on 意思是查询的时候以b为基准查询

a left join b on  等同于 b right join a (都是以a为基准查询)

技巧:处于移植兼容性和理解上来说,最好一律使用左连接实现

create table boy(

bname varchar(20),

other char(1)

)engine myisam charset utf8;

insert into boy

values

('屌丝','A'),

('李四','B'),

('王五','C'),

('高富帅','D'),

('郑七','E');

create table girl(

gname varchar(20),

other char(1)

)engine myisam charset utf8;

insert into girl

values

('空姐','B'),

('大S','C'),

('阿娇','D'),

('张柏芝','D'),

('林黛玉','E'),

('宝钗','F');

取出所有男生的配偶(左连接)

select boy.*,girl.* from

boy left join girl on

boy.other=girl.other;

+--------+-------+--------+-------+

| bname  | other | gname  | other |

+--------+-------+--------+-------+

| 屌丝      | A     | NULL   | NULL  |

| 李四       | B     | 空姐      | B     |

| 王五       | C     | 大S      | C     |

| 高富帅     | D     | 阿娇       | D     |

| 高富帅     | D     | 张柏芝     | D     |

| 郑七      | E     | 林黛玉       | E     |

+--------+-------+--------+-------+

取出所有女生的配偶(左连接)

mysql> select girl.*,boy.* from

-> girl left join boy on

-> boy.other=girl.other;

+--------+-------+--------+-------+

| gname  | other | bname  | other |

+--------+-------+--------+-------+

| 空姐      | B     | 李四       | B     |

| 大S      | C     | 王五       | C     |

| 阿娇       | D     | 高富帅     | D     |

| 张柏芝     | D     | 高富帅     | D     |

| 林黛玉       | E     | 郑七      | E     |

| 宝钗       | F     | NULL   | NULL  |

+--------+-------+--------+-------+

取出所有女生的配偶(右连接,和上面左连接一致)

mysql> select girl.* ,boy.* from

-> boy right join girl on

-> boy.other=girl.other;

+--------+-------+--------+-------+

| gname  | other | bname  | other |

+--------+-------+--------+-------+

| 空姐      | B     | 李四       | B     |

| 大S      | C     | 王五       | C     |

| 阿娇       | D     | 高富帅     | D     |

| 张柏芝     | D     | 高富帅     | D     |

| 林黛玉       | E     | 郑七      | E     |

| 宝钗       | F     | NULL   | NULL  |

+--------+-------+--------+-------+

内连接===================================================================================================

取出有配偶的

select girl.*,boy.* from

boy inner join girl on

boy.other=girl.other;

+--------+-------+--------+-------+

| gname  | other | bname  | other |

+--------+-------+--------+-------+

| 空姐      | B     | 李四       | B     |

| 大S      | C     | 王五       | C     |

| 阿娇       | D     | 高富帅     | D     |

| 张柏芝     | D     | 高富帅     | D     |

| 林黛玉       | E     | 郑七      | E     |

+--------+-------+--------+-------+

内连接是左右连接的交集

(外连接是左右连接的并集,mysql不支持)可以使用用union实现

左连接应用===================================================================================================

create table match_t(

match_id int primary key auto_increment,

host_team_id int,

guest_team_id int,

match_result varchar(20),

match_time date

)engine myisam charset utf8;

insert into match_t

values

(1,1,2,'2:0','2006-05-21'),

(2,2,3,'1:2','2006-06-21'),

(3,3,1,'2:5','2006-07-21'),

(4,1,1,'3:2','2006-08-21');

create table team_t(

team_id int primary key auto_increment,

team_name varchar(20)

)engine myisam charset utf8;

insert into team_t

values

(1,'恒大'),

(2,'国安'),

(3,'申花'),

(4,'大连');

mysql> select * from match_t;

+----------+--------------+---------------+--------------+------------+

| match_id | host_team_id | guest_team_id | match_result | match_time |

+----------+--------------+---------------+--------------+------------+

|        1 |            1 |             2 | 2:0          | 2006-05-21 |

|        2 |            2 |             3 | 1:2          | 2006-06-21 |

|        3 |            3 |             1 | 2:5          | 2006-07-21 |

|        4 |            4 |             1 | 3:2          | 2006-08-21 |

+----------+--------------+---------------+--------------+------------+

mysql> select * from team_t;

+---------+-----------+

| team_id | team_name |

+---------+-----------+

|       1 | 恒大          |

|       2 | 国安          |

|       3 | 申花        |

|       4 | 大连          |

+---------+-----------+

技巧 :善与给表其别名

2006-06-21日期之后 把表中对战换成队名

select host_t.team_name,guest_t.team_name,match_result,match_time from

match_t left join (team_t as host_t) on match_t.host_team_id=host_t.team_id

left join (team_t as guest_t) on match_t.guest_team_id=guest_t.team_id

where match_time>='2006-06-21';

+--------------+-----------+---------------+-----------+--------------+------------+

| host_team_id | team_name | guest_team_id | team_name | match_result | match_time |

+--------------+-----------+---------------+-----------+--------------+------------+

|            1 | 恒大          |             2 | 国安          | 2:0          | 2006-05-21 |

|            2 | 国安          |             3 | 申花        | 1:2          | 2006-06-21 |

|            3 | 申花        |             1 | 恒大          | 2:5          | 2006-07-21 |

|            4 | 大连          |             1 | 恒大          | 3:2          | 2006-08-21 |

+--------------+-----------+---------------+-----------+--------------+------------+

mysql与配偶同性_mysql 左,右,内连接相关推荐

  1. mysql教程左右链接_mysql的左右内连接用法实例

    本文实例讲述了mysql的左右内连接用法.分享给大家供大家参考.具体如下: 用个例子来解析下mysql的左连接, 右连接和内连接 create table user_id ( id decimal(1 ...

  2. 在左表或右表的连接字段上建立索引对左、内连接的查询效率的优化情况分析

    -- 1.建表 drop table if exists dept_tbl;create table dept_tbl (rcrd_id int unsigned primary key auto_i ...

  3. mysql内连接和交叉连接_MySQL中的内连接、外连接、交叉连接

    内连接(INNER JOIN): 分为三种 等值连接.自然连接.不等连接 外连接(OUTER JOIN): 左外连接(LEFT OUTER JOIN或LEFT JOIN) 右外连接(RIGHT OUT ...

  4. full join 和full outer join_28.MySQL中的左(右)外连接 LEFT(RIGHT) [OUTER] JOIN

    1.准备 CREATE DATABASE mahaiwuji;USE mahaiwuji;CREATE TABLE grade( id INT(4) PRIMARY KEY, name VARCHAR ...

  5. mysql自然连接和等值连接_mysql sql99语法 内连接等值连接

    #案例:查询员工名.部门名 SELECT last_name,department_name FROM employees e INNER JOIN departments d ON e.`depar ...

  6. mysql 查询时间之内_MySQL 查询时间段内的数据

    先来建表语句: SET FOREIGN_KEY_CHECKS=0;-- ---------------------------- -- Table structure fort_user-- ---- ...

  7. mysql左联一对多_MySQL左连接多对一行

    为了简化我的问题:假设我有3个表. Rooms People Things -------- -------- -------- id| name id | name | fk_rooms id | ...

  8. mysql按时间段统计_mysql按照时间段内 每天统计

    sql select t.report_time,count(report_time)  from (select  date_format(report_time,'%y-%m-%d')   as  ...

  9. mysql怎么消除笛卡尔积_mysql左链接笛卡尔积如何避免?

    我有一张表如图 id projectName pId cDate amount period contractNum ownerName archives 1  江夏区大桥 1 2017 190000 ...

最新文章

  1. R语言普通最小二乘(OLS)回归说明、以及构建普通最小二乘(OLS)回归需要满足的四个假设(Normality(正态性)、Independence(独立性)、Linearity(线性度)、方差齐性)
  2. C# BeginInvoke与EndInvoke的使用
  3. 2021-11-04Oracle19c 图形化安装,在windoes上)
  4. pr扫光转场插件_2020年最新pr转场特效:300套模板+200集视频教程+插件,送你参考...
  5. oracle复制sequence,oracle sequence语句重置方介绍
  6. 关于产品经理,常见的这六个误区,你中招了几个?
  7. matlab字符串操作总结
  8. 嵌入式gdbserver远程调试【原创】
  9. 矩池云上安装yolov5并测试
  10. ABP框架 配置权限、本地语言文件、左侧菜单项
  11. php 可变变量 $$name
  12. 计算机五笔字型编码方法,《计算机汉字输入五笔字型打字速成》汉字编码-输入.pdf...
  13. Vue.filter过滤器存储单位换算按KB 、M、 G显示字节大小
  14. JAVA程序练习---小车行走距离
  15. 普渡大学计算机科学和计算机工程,老师能讲一下普渡大学西拉法叶分校电气与计算机工程怎么样?...
  16. 8 Flask mega-tutorial 第8章 关注 Followers
  17. 【网络游戏同步技术】游戏中的ping值计算
  18. linux上安装python、igraph源码包_linux ubuntu 安装/卸载/删除python-igraph方法
  19. 用Python实现微信翻译机器人
  20. 台式计算机打印机共享,如何连接共享打印机,教您电脑如何连接共享打印机

热门文章

  1. 利用partial快乐驱动开发
  2. CodeSmith基础(七)
  3. java延迟函数_Java 8:延迟计算
  4. valid floating point value什么意思_每个位置的球员,都在干些什么
  5. python和docker交互_jupyter notebook 连接服务器docker中python环境
  6. down 网卡端口周期性的up_Linux 中如何启用和禁用网卡?
  7. 【STM32】F1 系列驱动全彩显示屏
  8. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第10章-一阶多智能体系统非合作行为检测与隔离
  9. 【数理知识】《数值分析》李庆扬老师-第4章-数值积分与数值微分
  10. 1.8 循环神经网络的梯度消失-深度学习第五课《序列模型》-Stanford吴恩达教授