基本结构
select 字段 from 表名;
去重
select distinct 列名 from 表名; //列名内容去重
取别名
select 列名 as "别名" , [表名.]列名 别名 from 表名 别名; //取别名,后面的as和""可以省略
模糊查询
select * from subject where subjectName like "高等数学%";//模糊查询
select * from subject where subjectName like "%数学%";//不加%代表以数学开头
select * from subject where subjectName like "_数学%";//一个下划线代表一个字符
取列
select * from subject where gradeId in (1,4);//取值为1和4的列
关联查询join
select stu_name,score from result join student on stuNo=stu_id where stu_name="张三";
纵向拼接union
select stu_name,score,subjectName from result join student on stuNo=stu_id join subject on subNo=subjectNo where stu_name="张三";
select * from 表名 union select * from 表名;//两张表合并去重
自连接
select a.categoryName 父栏目名称,b.categoryName 子栏目名称 from category a join category b on a.categoryid=b.pid;//自连接
关联:
-
内关联:join或inner join会展示两表关联上的所有数据
-
外关联:
- 左连接:left join会展示左表所有数据,右表展示关联上的所有数据,
未关联上的以null填充 - 右连接:right join与左连接相反
- 全连接:mysql5.8之后支持,full join相当于左连接 union all 右连接
union和union all的区别:
两个表的列相同的情况下,使用union all会把数据纵向拼接,使用union会在union all的基础上去重
函数
数学函数:
abs(a)绝对值,
sqrt(a)开方,
power(x,y)x的y次方,
floor(a)向下取整,
ceil(a)向上取整,
round(a)四舍五入,
truncate(a)截取
字符串函数:
trim(a)去空格,
substring(a,1,length)从1开始截取,
insert(a,x,y,b)替换,
concat(a…)拼接
日期函数:
now(),
year(),
month(),
date(),
unix_timestamp()日期转时间戳,
from_unixtime()时间戳转日期,
datediff(),
date_add(),
date_format()
系统信息函数:
version()
统计函数:
count(列名),
max(),
min(),
sum(),
avg()
加编号
select r.*,@num:=@num+1 from test.result r join (select @num:=0) a on 1=1;//加编号
事务:
set autocommit=0;//中间写入对应事务语句
start transaction;
语句
commit;
rollback;
set autocommit
索引失效的原因:
索引查询失效的几个情况:
-
like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。
-
or语句前后没有同时使用索引。当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效
-
组合索引,不是使用第一列索引,索引失效。
-
数据类型出现隐式转化。如varchar不加单引号的话可能会自动转换为int型,使索引无效,产生全表扫描。
-
在索引字段上使用not,<>,!=。不等于操作符是永远不会用到索引的, 因此对它的处理只会产生全表扫描。 优化方法:
key<>0 改为 key>0 or key<0。 -
对索引字段进行计算操作、字段上使用函数