MySQL的查询,子查询,联结查询,联合查询
MySQL的查询,子查询,联结查询,联合查询
一.mysql查询的五种子句
where(条件查询)、having(筛选)、group by(分组)、order by(排序)、limit(限制结果数)
二.子查询
1.where 子查询
SELECT * FROM tb1 WHERE cat_id IN (SELECT max(id) FROM tb2 GROUP BY cat_id);
2.from 子查询
SELECT t2_id FROM (SELECT t2_id FROM tb2 ORDER BY t2_id DESC);
3.exists子查询(把外层查询结果拿到内层,看内层的查询是否成立,成立就返回外层查询的数据)
SELECT * FROM test5 WHERE EXISTS (SELECT id FROM test2 where test2.id=test5.id);
查询test5中的第一行id=1, 然后执行SELECT id FROM test2 where test5.id=1;如果存在,就返回这行数据,不存在,就不返回
三.UNION用法,联合查询(纵向/行联结)
(把两次或多次的查询结果合并起来,要求查询的列数一致,推荐查询的对应的列类型一致,可以查询多张表,多次查询语句时如果列名不一样,则取第一次的列名!如果不同的语句中取出的行的每个列的值都一样,那么结果将自动会去重复,如果不想去重复则要加all来声明,即union all)
SELECT * from test2 UNION SELECT * FROM test5;
对test2结果集和test5结果集行联合起来(去重)
SELECT * from test2 UNION ALL SELECT * FROM test5;
对test2结果集和test5结果集的行联合起来(不去重)
四.联结查询(横向/列联结)
1.内联结(INNER JOIN,INNER可以省略,以下三种写法等效)
SELECT * FROM test2,test5 WHERE test2.id=test5.id;
SELECT * FROM test2 JOIN test5 ON test2.id=test5.id;
SELECT * FROM test2 JOIN test5 USING(id);//如果两个表的列名相同,可以用USING代替ON
将test2和test5的结果集的列按条件联结起来,是并集
2.左联结
SELECT * FROM test2 LEFT JOIN test5 ON test2.id=test5.id;
以左表test2为准,和test5联结,test2中的数据会被全部取出.
3.右联结
SELECT * FROM test2 RIGHT JOIN test5 ON test2.id=test5.id;
以右表test5为准,和test2联结,test5中的数据会被全部取出.
日常使用固定一种,用左联结代替右联结.
内联结和左联结的区别:
内联结取出了两个表都有的记录,如果一个表有.另一个表没有,则不取出
左联结取出了左表中所有的记录,不管有表有没有该对应记录
参考:
http://www.cnblogs.com/rollenholt/archive/2012/05/15/2502551.html
MySQL的查询,子查询,联结查询,联合查询的更多相关文章
- MySQL (六)--外键、联合查询、子查询
1 外键 外键:foreign key,外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称为外键. 1.1 增加外键 外键可以在创建表的时候或创建表之后增 ...
- MySQL(16):Select-union(联合查询)
1. Select-union(联合查询) union用于把来自许多SELECT语句的结果组合到一个结果集合中. 用法: SELECT ...UNION [ALL | DISTINCT]SELECT ...
- MySQL 查询语句--------------进阶9:联合查询
#进阶9:联合查询 /* union 联合 合并:将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union..... 应用场景:要查询的结果来自于多个表,且多个表没有 ...
- Spring DATA MongoDB @DBref查询,or和and联合查询
@DBref文档关联,在按该类型查询的时候,在字段名后加上关联表的字段名即可,如: Criteria.where("bloggroup.$id"), $id代表关联表的oid字段. ...
- MySQL(17):Select-union(联合查询)使用注意事项
1. 需求: 获得0115班所有的代课教师代课天数,结果按照升序排序:同时获得0228班,结果按照降序排序. (1)首先查询原来的0115班和0228班所有代课天数,如下: (2)使用un ...
- Mysql的查询语句(联合查询、连接查询、子查询等)
Mysql的各个查询语句(联合查询.连接查询.子查询等) 一.联合查询 关键字:union 语法形式 select语句1 union[union选项] select 语句2 union[union选项 ...
- mysql联合查询sql优化
我们在使用mysql数据库时,经常会使用到mysql的联合查询,联合查询分为内连接和外连接,内连接查询结果是联合的表都存在匹配才会有结果,外连接则根据驱动表是否存在匹配来生成结果集. 这里使用mysq ...
- php+mysql数据库联合查询 left join 右侧数据重复问题
情况:多表联合查询(三表及以上联合查询) 分析: A left join B left join C left join D 假如: 表B.C.D都与表A关联查询 A left join B 4条数据 ...
- 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引
一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...
- thinkphp两表,多表联合查询及分页的连贯操作写法
ThinkPHP中关联查询(即多表联合查询)可以使用 table() 方法或和join方法,具体使用如下例所示: 1.原生查询示例: 代码如下: $Model = new Model(); $sql ...
随机推荐
- hdu 1465 不容易系列之一(错排模板)
不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- mysql 游标的嵌套使用示例
BEGIN DECLARE trainee_no_value BIGINT (20); -- 学员编号 DECLARE pay_no_value BIGINT (20); -- 交费序号 DECLAR ...
- [LA_3938]最大连续动态和
Sample Input 3 1 1 2 3 1 1 Sample Output Case 1: 1 1 线段树 L,R表示该区间的左右端点,sum表示该区间值的总和 l,r表示该区间连续的最大和的左 ...
- win7兼容visual studio 2005 的方法
http://blog.sina.com.cn/s/blog_74d572890100xv7p.html 今天花了4个小时,结合网上的介绍,本人终于找到了一个可以在win7环境下运行visual st ...
- 如何配置openjdk的 java home
https://blog.csdn.net/redmoon729/article/details/51671354
- selenium IE自动化问题汇总
驱动下载:http://selenium-release.storage.googleapis.com/index.html 没有修改IE的保护模式设置导致,通常看到报错信息如下: selenium. ...
- (1)C# 创建ef sqlserver
连接sql 如果报错不能连接的错误 把这三个IP地址的端口号设置上,并启用.第一个18.6是本机ip,之后就可以测试了 最后重启服务器
- ESXI和vSphere的安装配置-实现一台电脑硬件虚拟化为两台
本篇文章包含以下几个部分: 1EXSI软件和vSphere软件的安装 2在vSphere上安装虚拟系统 3对虚拟系统通过配置实现硬件虚拟化,实现硬件直通 1.EXSI安装 通过网上下载EXSI ISO ...
- 洛谷 P1803 凌乱的yyy【经典贪心/选择不相交区间】
题目背景 快noip了,yyy很紧张! 题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加 ...
- HDU 2553 N皇后问题(回溯 + 剪枝)
本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398797 题意: 在N*N(N <= 10)的方格棋盘放置了N个皇后,使得它们不相互攻击(即 ...