1 单表查询
查询所有字段
select * from table_name
查询指定记录
and not like desc asc
order by
in 关键字 in (1,2,3,4)
between 关键字 between 1 and 2
like %或者_ 查询模糊匹配的
_ 代表1个
% 代表1个或者多个。
and 的多条件查询 and 优先生效
or 的多条件查询
district 不同
多列排序
select * from city where id<10 order by contry name
分组查询 group by
分组之后过滤使用 having
where 是在分组之前选择数据
having 是在分组之后过滤的语句
求和 rollup 分组后的执行
多字段分组
类似于 多字段排序。
限制查询结果行数量
linit start, pagesize
2 使用集合函数查询
count(*)函数 count 不统计空的数值
* 整张表,行最多的那个
col_name 代表统计对应列的非空数据
sum() 求和函数 会进行全表扫描。
avg() 统计平均数
max() 求最大值 全表扫描 reset query cache; 先清楚掉缓存
min() 最小值
正则表达式查询
^ 开始
$ 结尾
. 任意单个字符 出现位置很重要。
* 匹配零个或多个
+ 匹配1次或多次
[abc] [^abc] 匹配中括号中的任意一个
{start,end} 开始次数
例子:select uid from onethink_member where uid regexp ‘^1‘ ;
mysql> select uid from onethink_member where uid regexp ‘1$‘ ;
总计: 尽量不用 select *
group by 和 order by 语句会大大增加执行查询消耗
数据量大的时候,慎用集合函数
如果一条查询语句经常被执行,where 里面的语句最好有索引
3 子查询
any some 子查询 any 任何
表示满足其中任一条件
例子:select uid from onethink_member where uid > any (select uid from onethink_ucenter_member );
exists 和 not exists 子查询
子查询数据存在在查询,没有在不查询;
例子:select uid from onethink_member where uid = exists (select uid from onethink_ucenter_member );
mysql> select uid from onethink_member where uid != exists (select uid from onethink_ucenter_member );
in 子查询
例子:
mysql> select uid from onethink_member where uid in (select id from onethink_ucenter_member where id > 900 );
union 子查询
用于合并查询结果 union all 就不去掉重复了。
列必须相同 all 关键字 把两种表做拼接
create table table_name2 like table_name1;//复制表结构
mysql> select uid as id from onethink_member union select username as uname from onethink_ucenter_member;
mysql> select uid as id, nickname from onethink_member union all select username as uname,id from onethink_ucenter_member;
总结:
多表查询注意名称的唯一性
内链接比外链接效率高
注意笛卡尔积问题
查询最好有索引