SELECT…FROM… 是查询语句,基本的用法如下:
SELECT COL1,COL2...,COLN FROM TB1; SELECT * FROM TB1 ORDER BY COL1 DESC LIMIT 5;
第一句是从数据表TB1中查询COL1~N列数据,第二个SQL语句稍微复杂是查询所 有记录并且按照COL1降序排列,只查询5条。有两个需要注意的地方:
JOIN是表连接操作,用来在查询多张数据表的时候进行数据的连接,JOIN分为内 连接和外连接
SELECT * FROM PRODUCT A LEFT JOIN PRODUCT_DETAIL D ON A.ID=D.ID AND D.ID=2;
那么执行结果可能如下:
ID | AMOUNT | ID | WIGHT | EXIST |
---|---|---|---|---|
1 | 200 | NULL | NULL | NULL |
2 | 100 | 2 | 22 | 33 |
3 | 50 | NULL | NULL | NULL |
但是如果用WHERE:
SELECT * FROM PRODUCT A LEFT JOIN PRODUCT_DETAIL D WHERE A.ID=D.ID AND D.ID=2;
那么结果可能会是这样的:
ID | AMOUNT | ID | WIGHT | EXIST |
---|---|---|---|---|
2 | 100 | 2 | 22 | 33 |
• SIMPLE:简单查询
• PRIMARY:最外层的select
• SUBQUERY:子查询内层查询的第一个select,结
果不依赖于外部查询结果集
• DEPENDENT SUBQUERY:子查询内层的第一个
select,依赖于外部查询的结果集
• DERIVED:子查询派生表的select
• index: 全索引扫描
• const: 通过主键访问
• all: 全表扫描
• range: 索引范围扫描
• ref: 索引扫描,结果可能有多个匹配值
• eq_ref: 索引扫描,唯一索引匹配值(唯一)
• 访问效率:const > eq_ref > ref > range > index > ALL
• Impossible WHERE noticed after reading const
tables:Mysql 优化器通过分析发现不可能存在结果
• Using index:所需要的数据只需要在Index 即可全
部获得而不需要再到表中取数据
• Using index for group-by:数据访问和Using index
一样,所需数据只需要读取索引即可,而当Query
中使用了GROUP BY 或者DISTINCT 子句的时候,
如果分组字段也在索引中,Extra 中就会出现该信息