本文主要展示如何使用mysql的多列组合查询
多列组合查询平常比较少见,初次看还觉得挺神奇的.
mysql-filtering-by-multiple-columns[1]
[1] mysql-filtering-by-multiple-columns
假如你有一个表,
SELECT * FROM test_tab WHERE name = 一个外部输入的数据
刚开始,数据不多的时候,执行效果还不错.
随着数据量的增加,这个查询,执行起来,越来越慢了.
然后在 name 上面 建立了索引
这样, 可以加快前面那个查询的速度.
但是,某天,你执行了下面这个SQL, 发现速度又慢了
为啥呢? 因为 age 字段上面,没有索引
索引只在 name 上面有
换句话说, 也就是 WHERE 里面的条件, 会自动判断,有没有 可用的索引,如果有, 该不该用.
例如:CREATE INDEX idx_test_name_age ON test_tab (name, age);那么SELECT * FROM test_tabWHEREname LIKE '张%'
这样的查询,将能够使用上面的索引.
多列索引,还有一个可用的情况就是, 某些情况下,可能查询,只访问索引就足够了, 不需要再访问表了.例如:SELECTAVG( avg ) AS 平均年龄FROMtest_tabWHEREname LIKE '张%'
这个时候, name 与 age 都包含在索引里面. 查询不需要去检索表中的数据.
多表查询是指基于两个和两个以上的表或是视图的查询.在实际应用中,查询单个表可能不能满足你的需求,(如显示sales部门位置和其员工的姓名),这种情况下需要使用到(dept表和emp表)
自连接是指在同一张表的连接查询
select * from emp where empno=(select mgr from emp where ename='ford');
子查询是指嵌入在其它sql查询语句中的select语句,也叫嵌套查询
单行子查询是 指只返回一行数据的子查询语句
select * from emp where deptno=(select deptno from emp where ename='smith');
多行子查询指返回多行数据的子查询 使用关键字 in
如果我们的一个子查询,返回的 结果是多列,就叫做列子查询
合并多个select语句的结果,可以使用集合操作符 union,union all