Mysql表连接小结

0.首先Mysql 不支持oracle的(+) 
1.内连接: 只连接匹配的行
2.左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
3.右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
4.全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
5.交叉连接  生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个
行都一一匹配
6.举例说明:
表A
id   name 
1    张
2    李
3    王
表B
id   address   A_id
1    北京      1
2    上海      3
3    南京      10
包容性:A表包容B表,左连接左表是全的.(left join 或 left outer join )
SQL语句如下:
SELECT A.name, B.address
FROM A
LEFT JOIN B ON A.id = B.A_id
查询结果为:
name     address
张     北京
李     NULL
王     上海
包容性:B表包容A表,右连接右表是全的.(right join 或 right outer join )
SQL语句如下:
SELECT A.name, B.address
FROM A
RIGHT JOIN B ON A.id = B.A_id
查询结果为:
name     address
张     北京
王     上海
NULL     南京
排他性:A,B表中至少有1个匹配时,才返回行。两表的交集
SQL语句如下:
select A.name,B.address from A
inner join B
on A.id = B.A_id
查询结果为:
name     address
张     北京
王     上海
inner join  内连接等价于下面的sql:
SELECT A.name, B.address
FROM A, B
WHERE A.id = B.A_id
注释:全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于
对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集
。(full join 或 full outer join )
SQL语句如下:
select * from A
full join B
查询结果为:
id     name     id     address A_id
1     张     1     北京     1
2     李     1     北京     1
3     王     1     北京     1
1     张     2     上海     3
2     李     2     上海     3
3     王     2     上海     3
1     张     3     南京     10
2     李     3     南京     10
3     王     3     南京     10
注释:返回3*3=9条记录,即笛卡尔积
SQL语句如下:
SELECT * FROM A
CROSS JOIN B
查询结果为:
id     name     id     address A_id
1     张     1     北京     1
2     李     1     北京     1
3     王     1     北京     1
1     张     2     上海     3
2     李     2     上海     3
3     王     2     上海     3
1     张     3     南京     10
2     李     3     南京     10
3     王     3     南京     10
CROSS JOIN等价于:
select * from A,B
注意:
1. on A.id = B.id 等同于 using(id)//这里字段名要相同
2. 当 MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。  
如果 EXPLAIN 显示 MySQL 使用了可能的索引列表中错误的索引,这个特性将是很有用的。  
通过指定 USE INDEX (key_list),你可以告诉 MySQL 使用可能的索引中最合适的一个索引在表中查找记录行。  
可选的二选一句法 IGNORE INDEX (key_list) 可被用于告诉 MySQL 不使用特定的索引。    
效率问题:
1.inner join比left join快
注:inner join  内连接等价于下面的sql: SELECT A.name, B.address FROM A, B WHERE A.id = B.A_id
所以一般要用一般的连接就可以了.
2.连接字段建索引
多表外连接
select   A.*,B.f1,B.f2,B.fn,C.f1,C.f2,C.fn   from   A    
  left   join   B   on   A.id=B.id    
  left   join   C   on   C.id=A.id  
  where .......
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的问题,这里是一个简单的 Python+MySQL 实训小结: 1. 安装 MySQL 和 Python 的 MySQL Connector 首先,需要安装 MySQL 数据库和 Python 的 MySQL Connector。你可以在 MySQL 官网下载和安装 MySQL Community Server,然后在命令行中使用 pip 安装 MySQL Connector。 2. 连接 MySQL 数据库 使用 MySQL Connector 可以轻松地连接MySQL 数据库。你需要使用以下代码: ``` import mysql.connector mydb = mysql.connector.connect( host="localhost", user="username", password="password", database="databasename" ) print(mydb) ``` 在这里,你需要将 `username`、`password` 和 `databasename` 替换为你的 MySQL 用户名、密码和数据库名称。 3. 创建 在 Python 中,你可以使用 MySQL Connector 创建 MySQL 数据库中的。以下是一个例子: ``` import mysql.connector mydb = mysql.connector.connect( host="localhost", user="username", password="password", database="databasename" ) mycursor = mydb.cursor() mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))") ``` 在这里,我们创建了一个名为 `customers` 的,并添加了两个列:`name` 和 `address`。 4. 插入数据 使用 MySQL Connector,你可以将数据插入 MySQL 数据库中的。以下是一个例子: ``` import mysql.connector mydb = mysql.connector.connect( host="localhost", user="username", password="password", database="databasename" ) mycursor = mydb.cursor() sql = "INSERT INTO customers (name, address) VALUES (%s, %s)" val = ("John", "Highway 21") mycursor.execute(sql, val) mydb.commit() print(mycursor.rowcount, "record inserted.") ``` 在这里,我们向 `customers` 中插入了一条记录,该记录包含 `name` 和 `address` 列的值。 5. 查询数据 最后,你可以使用 MySQL Connector 查询 MySQL 数据库中的数据。以下是一个例子: ``` import mysql.connector mydb = mysql.connector.connect( host="localhost", user="username", password="password", database="databasename" ) mycursor = mydb.cursor() mycursor.execute("SELECT * FROM customers") myresult = mycursor.fetchall() for x in myresult: print(x) ``` 在这里,我们查询了 `customers` 中的所有数据,并将其打印到控制台上。 这就是一个简单的 Python+MySQL 实训小结。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值