mysql常用语句

来源:互联网 发布:洛枳学姐的淘宝店 编辑:程序博客网 时间:2024/06/05 15:43

if判断:    select *,if(status=0,"正常","禁用") as t from pre_common_member

判断用户状态,如果是则在 t 字段显示“正常”,否则显示“禁用”

-----------------------------------------------------------------------------------------------------------

Explain命令:可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。

例如:explain select * from news;

参数讲解:

1. id:查询序列号


2. select_type:select类型

SIMPLE:简单SELECT(不使用UNION或子查询等)

PRIMARY:最外面的SELECT

UNION:UNION中的第二个或后面的SELECT语句

DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询

UNION RESULT:UNION的结果。

SUBQUERY:子查询中的第一个SELECT

DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询

DERIVED:导出表的SELECT(FROM子句的子查询)


3. table:显示这一行的数据是关于哪张表的


4. type:这列最重要,显示了连接使用了哪种类别,有无使用索引,是使用Explain命令分析性能瓶颈的关键项之一。

结果值从好到坏依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。

(1)SYSTEM

CONST的特例,当表上只有一条元组匹配

(2)CONST

WHERE条件筛选后表上至多有一条元组匹配时,比如WHERE ID = 2 (ID是主键,值为2的要么有一条要么没有)


(3)EQ_REF

参与连接运算的表是内表(在代码实现的算法中,两表连接时作为循环中的内循环遍历的对象,这样的表称为内表)。

基于索引(连接字段上存在唯一索引或者主键索引,且操作符必须是“=”谓词,索引值不能为NULL)做扫描,使得对外表的一条元组,内表只有唯一一条元组与之对应。


(4)REF

可以用于单表扫描或者连接。参与连接运算的表,是内表。

基于索引(连接字段上的索引是非唯一索引,操作符必须是“=”谓词,连接字段值不可为NULL)做扫描,使得对外表的一条元组,内表可有若干条元组与之对应。


(5)REF_OR_NULL

类似REF,只是搜索条件包括:连接字段的值可以为NULL的情况,比如 where col = 2 or col is null


(6)RANGE

范围扫描,基于索引做范围扫描,为诸如BETWEEN,IN,>=,LIKE类操作提供支持


(7)INDEX_SCAN

索引做扫描,是基于索引在索引的叶子节点上找满足条件的数据(不需要访问数据文件)

(8)ALL

全表扫描或者范围扫描:不使用索引,顺序扫描,直接读取表上的数据(访问数据文件)


(9)UNIQUE_SUBQUERY

在子查询中,基于唯一索引进行扫描,类似于EQ_REF


(10)INDEX_SUBQUERY

在子查询中,基于除唯一索引之外的索引进行扫描


(11)INDEX_MERGE

多重范围扫描。两表连接的每个表的连接字段上均有索引存在且索引有序,结果合并在一起。适用于作集合的并、交操作。

(12)FT

FULL TEXT,全文检索



5. possible_keys:列指出MySQL能使用哪个索引在该表中找到行


6. key:显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL


7. key_len:显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好


8. ref:显示使用哪个列或常数与key一起从表中选择行。


9. rows:显示MySQL认为它执行查询时必须检查的行数。

10. Extra:包含MySQL解决查询的详细信息,也是关键参考项之一。

-------------------------------------------------------------------------------------------

select count(uid) from pre_common_member GROUP BY groupid HAVING COUNT(uid)>1

不同组下的用户数量并且数量大于10的组

"having 条件表达式"  /*该表达式指示被选择的行必须满足的条件*/SQL标准要求HAVING必须引用GROUP BY子句中的列或用于总计函数中的列。不过,MySQL支持对此工作性质的扩展,并允许HAVING因为SELECT清单中的列和外部子查询中的列。HAVING不能用于应被用于WHERE子句的条目。 例如,不能编写如下语句:mysql> SELECT col_name FROM tbl_name HAVING col_name > 0;而应这么编写:mysql> SELECT col_name FROM tbl_name WHERE col_name > 0;

-----------------------------------------------------------------------------------------------------------------------

select c.*,g.* from pre_school_video c left join pre_school_learn g on c.id=g.vid where c.id in(".$xxid_list.") order by g.`time` desc

select出来一串id,然后到另外一个表里面查数据,查出来的数据怎么按照那串id的排序来显示

select a.*,b.* from 第一个表 a left join 第二个表 b on a.id = b.vid where a.id in("1,2,3")  order by b.`time` desc
on 后面是两个表相同字段

-----------------------------------------------------------------------------------------------------------------------

0 0