mysql 联结 子查询
2016-03-25 00:03
260 查看
在可以指定一个表名的任何地方,都可以一个括号括起来的join子句替换
1. 自然联结
inner join (默认联结)
left (outer) join 左表可以为NULL
right (outer) join 右表可以为NULL
full (outner) join 左表和右表都可以为NULL
2. cross join 笛卡尔积
返回两张表的所有字段, 不去重重复列名
条件用where 比如 select a.*, b.* from a cross join b where
等同于 select * from a, b where ...
子查询
1> from子句中的任何表名替换成一条完整的select语句.当然,必须分配一个相关名称。
例如select p.name, p.id from (select * from students) as p
2>where子句 可以把一个表查询作为一个in、some、any、all、exists谓词的比较值列表的来源。 (即嵌套查询,子查询的结果不输出给主查询)
例如:Select * from students where students.area in (select area.Name from areas)
All some any 之前皆可用 > 、 = 、<、<=、>=、<>来进行筛选
关于效率问题:
join>exist, 通常情况下用join不用子查询
对于小数据都可以, 大数据表绝对不允许join和子查询的
1. 自然联结
inner join (默认联结)
left (outer) join 左表可以为NULL
right (outer) join 右表可以为NULL
full (outner) join 左表和右表都可以为NULL
2. cross join 笛卡尔积
返回两张表的所有字段, 不去重重复列名
条件用where 比如 select a.*, b.* from a cross join b where
等同于 select * from a, b where ...
子查询
1> from子句中的任何表名替换成一条完整的select语句.当然,必须分配一个相关名称。
例如select p.name, p.id from (select * from students) as p
2>where子句 可以把一个表查询作为一个in、some、any、all、exists谓词的比较值列表的来源。 (即嵌套查询,子查询的结果不输出给主查询)
例如:Select * from students where students.area in (select area.Name from areas)
All some any 之前皆可用 > 、 = 、<、<=、>=、<>来进行筛选
关于效率问题:
join>exist, 通常情况下用join不用子查询
对于小数据都可以, 大数据表绝对不允许join和子查询的
相关文章推荐
- mysqladmin命令用法
- mysql 远程访问
- MySQL数据库基本操作
- MySQL的使用
- Mysql建数据表
- mysql 5 mysql 5 技术内幕
- cmake编译安装mysql5.5
- MySQL学习笔记--2数据表约束
- mcrypt pdo_mysql 等同类安装
- mysql 优化笔记 未完
- mysql存储过程 定时任务
- mysql数据库命令
- mysql数据库中date datetime timestamp time的区别
- MYSQL ERROR CODE 错误编号的意义
- MySQL忘记密码 办法
- Mac 下安装MySQL5.7.6版本时,修改安装生成的root临时密码时遇到的一个问题
- MySQL数据库事务隔离级别(Transaction Isolation Level)
- navicat for mysql psc 没有数据或者只有部分数据(即有一部分表没有数据)
- 将excel文件中的数据导入到mysql
- MySQL系列:索引和Explain