MySQL联合查询和多表操作:
Select *
FROM `bidding`
Where `uid`
IN (
Select uid
FROM `tender`
Where `checker` = ‘baidu’
)
LIMIT 0 , 30
————–
2.INNER JOIN 内联
Select bidding . * , tender.checker
FROM `bidding`
INNER JOIN tender ON bidding.uid = tender.uid
AND tender.checker = ‘baidu’
Where user.uid IS NOT NULL
LIMIT 0 , 30
表user 通过uid 和 表tender 关联
Where user.uid IS NOT NULL 这个条件可以不要
三个以上表的结合是先结合两个表,然后将结果当作一个表再与另一个表结合。
例子:将foo , bar , more 三表结合
SELECT * FROM ( foo INNER JOIN bar ON foo.a = bar.a ) INNER JOIN more ON foo.a = more.a
——————–
3.left join 外左联
Select * from `bidding`
LEFT JOIN `tender`
ON bidding.uid = tender.uid
AND tender.checker = ‘baidu’
保留所有 左表 中联结字段的记录,若无与其相对应的右表中的字段记录则留空
这明显不符合我的要求
———————-
4.right join 外右联
Select * from `bidding`
RIGHT JOIN `tender`
ON bidding.uid = tender.uid
AND tender.checker = ‘baidu’
保留所有 右表 中联结字段的记录,若无与其相对应的左表中的字段记录则留空
也不符合要求
————–
5.多表操作, 隐式的内联结
Select bidding . * , tender.checker
FROM (`bidding` , `tender`)
Where bidding.uid = tender.uid
AND tender.checker = ‘baidu’
LIMIT 0 , 30
就是 笛卡尔积(交叉连接)
其返回的结果为被连接的两个数据表的乘积,因此当有Where, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。
Mysql联合多表更新和删除:
多表更新
在 MySQL 3.23 中,你可以使用 LIMIT # 来确保只有给定的记录行数目被更改。
如果一个 orDER BY 子句被使用(从 MySQL 4.0.0 开始支持),记录行将以指定的次序被更新。这实际上只有连同 LIMIT 一起才有用。
从 MySQL 4.0.4 开始,你也可以执行一个包含多个表的 Update 的操作:
Update items,month SET items.price=month.price
Where items.id=month.id;
注意:多表 Update 不可以使用 orDER BY 或 LIMIT。
多表删除
第一个多表删除格式从 MySQL 4.0.0 开始被支持。第二个多表删除格式从 MySQL 4.0.2 开始被支持。
仅仅在 FROM 或 USING 子句 之前 列出的表中的匹配记录行被删除。效果就是,你要以从多个表中同时删除记录行,并且同样可以有其它的表用于检索。
在表名后的 .* 仅仅是为了兼容 Access:
Delete t1,t2 FROM t1,t2,t3 Where t1.id=t2.id AND t2.id=t3.id
or
Delete FROM t1,t2 USING t1,t2,t3 Where t1.id=t2.id AND t2.id=t3.id
在上面的情况下,我们仅仅从 t1 和 t2 表中删除匹配的记录行。
如果一个 orDER BY 子句被使用(从 MySQL 4.0.0 开始支持), 记录行将以指定的次序删除。这实际上只有连同 LIMIT 一起才有用。示例如下:
Delete FROM somelog
Where user = 'jcole'
orDER BY timestamp
LIMIT 1
这将删除匹配 Where 子句的,并且最早被插入(通过 timestamp 来确定)的记录行。
Delete 语句的LIMIT rows 选项是 MySQL 特有的,它告诉服务器在控制权被返回到客户端之前可被删除的最大记录行数目。这可以用来确保一个特定的 Delete 命令不会占用太长的时间。你可以简单地重复使用 Delete 命令,直到被影响的记录行数目小于 LIMIT 值。
从 MySQL 4.0 开始,在 Delete 语句中可以指定多个表,用以从一个表中删除依赖于多表中的特殊情况的记录行。然而,在一个多表删除中,不能使用 orDER BY 或 LIMIT。
Select *
FROM `bidding`
Where `uid`
IN (
Select uid
FROM `tender`
Where `checker` = ‘baidu’
)
LIMIT 0 , 30
————–
2.INNER JOIN 内联
Select bidding . * , tender.checker
FROM `bidding`
INNER JOIN tender ON bidding.uid = tender.uid
AND tender.checker = ‘baidu’
Where user.uid IS NOT NULL
LIMIT 0 , 30
表user 通过uid 和 表tender 关联
Where user.uid IS NOT NULL 这个条件可以不要
三个以上表的结合是先结合两个表,然后将结果当作一个表再与另一个表结合。
例子:将foo , bar , more 三表结合
SELECT * FROM ( foo INNER JOIN bar ON foo.a = bar.a ) INNER JOIN more ON foo.a = more.a
——————–
3.left join 外左联
Select * from `bidding`
LEFT JOIN `tender`
ON bidding.uid = tender.uid
AND tender.checker = ‘baidu’
保留所有 左表 中联结字段的记录,若无与其相对应的右表中的字段记录则留空
这明显不符合我的要求
———————-
4.right join 外右联
Select * from `bidding`
RIGHT JOIN `tender`
ON bidding.uid = tender.uid
AND tender.checker = ‘baidu’
保留所有 右表 中联结字段的记录,若无与其相对应的左表中的字段记录则留空
也不符合要求
————–
5.多表操作, 隐式的内联结
Select bidding . * , tender.checker
FROM (`bidding` , `tender`)
Where bidding.uid = tender.uid
AND tender.checker = ‘baidu’
LIMIT 0 , 30
就是 笛卡尔积(交叉连接)
其返回的结果为被连接的两个数据表的乘积,因此当有Where, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。
Mysql联合多表更新和删除:
多表更新
在 MySQL 3.23 中,你可以使用 LIMIT # 来确保只有给定的记录行数目被更改。
如果一个 orDER BY 子句被使用(从 MySQL 4.0.0 开始支持),记录行将以指定的次序被更新。这实际上只有连同 LIMIT 一起才有用。
从 MySQL 4.0.4 开始,你也可以执行一个包含多个表的 Update 的操作:
Update items,month SET items.price=month.price
Where items.id=month.id;
注意:多表 Update 不可以使用 orDER BY 或 LIMIT。
多表删除
第一个多表删除格式从 MySQL 4.0.0 开始被支持。第二个多表删除格式从 MySQL 4.0.2 开始被支持。
仅仅在 FROM 或 USING 子句 之前 列出的表中的匹配记录行被删除。效果就是,你要以从多个表中同时删除记录行,并且同样可以有其它的表用于检索。
在表名后的 .* 仅仅是为了兼容 Access:
Delete t1,t2 FROM t1,t2,t3 Where t1.id=t2.id AND t2.id=t3.id
or
Delete FROM t1,t2 USING t1,t2,t3 Where t1.id=t2.id AND t2.id=t3.id
在上面的情况下,我们仅仅从 t1 和 t2 表中删除匹配的记录行。
如果一个 orDER BY 子句被使用(从 MySQL 4.0.0 开始支持), 记录行将以指定的次序删除。这实际上只有连同 LIMIT 一起才有用。示例如下:
Delete FROM somelog
Where user = 'jcole'
orDER BY timestamp
LIMIT 1
这将删除匹配 Where 子句的,并且最早被插入(通过 timestamp 来确定)的记录行。
Delete 语句的LIMIT rows 选项是 MySQL 特有的,它告诉服务器在控制权被返回到客户端之前可被删除的最大记录行数目。这可以用来确保一个特定的 Delete 命令不会占用太长的时间。你可以简单地重复使用 Delete 命令,直到被影响的记录行数目小于 LIMIT 值。
从 MySQL 4.0 开始,在 Delete 语句中可以指定多个表,用以从一个表中删除依赖于多表中的特殊情况的记录行。然而,在一个多表删除中,不能使用 orDER BY 或 LIMIT。
关键字词:
相关文章
- mysql slave不能同步Last_SQL_Error Error Duplicate entry
- MySQL 提示Incorrect key file for table 'xx'; try to 出错无法打开
- MySQL Got error 28 from storage engine 解决办法
- 高可用的Mysql双机热备(Mysql_HA)
- mysql 对数据表的结构和数据进行复制
- mysql数据库表的错误 got error 28 from storage engine
- MySQL存储过程中使用动态行转列
- 查看运行MySQL中的语句(查询正在执行的sql)
- mysql安装图解 mysql图文安装教程(详细说明)
- Can't connect to MySQL server on localhost (10061)解决方法