查看数字n1是否在n2和n3中间
select n1 between n2 and n3
数据比较:
= > < != <>
null比较:
12 is null ----> 0
32 is not null ----> 1
23 = null ----> null
null = null ----> null
null <=> null ----> 1
null is null ----> 1
模糊比较:
select 'helloworld' like 'hello%';
select 'goodhelloworld' like '%hello%';
%代表任意字符出现任意次数
_代表任意字符出现一次
要根据你要查找的内容位置来配置
逻辑运算符:
and or not
sql注释:
单行注释:-- 注释
多行注释:/* 注释 */
MySQL独有的单行注释: # 注释
where条件判断:只返回验证结果为True的数据
having条件判断:与where类似
条件判断的字段 | 使用having | 使用where |
---|---|---|
字段未在select时选择 | × | √ |
字段在select时选择 | √ | √ |
条件判断用别名 | √ | × |
条件判断用原名 | √ | √ |
聚合函数 | √ | × |
筛选时给字段起别名
select 字段 as 别名
char_length(字段名):获取该字段内数据的长度
根据正则表达式来查找内容
regexp '正则表达式'
取对应字段的前n个字符
left(字段,n)
按组筛选
group by
按字段排序:默认升序asc desc表示降序排序
order by 字段 desc
限制取出数量:limit
select * from table limit n 查看n行
select * from table limit m,n 跳过前m行,查看n行
offset n 跳过n行,从n+1行开始查看
select * from table limit n offset m 跳过前m行,查看n行
聚合函数
select city as 城市,group_concat(name) as 姓名,count(name) as 人数,sum(money) as 总金额,avg(money) as 平均金额 from students group by city
查询结果:
合并: | group_concat(): |
计数: | count(),count(distinct) |
求和: | sum() |
平均值: | avg() |
虚拟表,不存在的表 用来满足语法结构: | dual |
取绝对值: | abs() |
去除小数位取整: | float() |
进一法取整: | ceil() |
取1以内的随机数: | rand() |
将数字m四舍五入保留小数点后的第n位 | round(m,n) |
当前时间: | now() |
计算date1和date2之间相差的天数 | datediff(date1,date2) |
计算当前是当前年份的第几周,每周日开始为新的一周 1月1号一般为第0周 | week() |
计算是当天的第几个小时/分/秒 | hour(time),minute(time),second(time) |
月份英文名字 | monthname() |
转换字母大小写 | lower() upper() |
取字符串s里的从左往右n位字符 | left(s,n) |
取字符串s里的从右往左n位字符 | right(s,n) |
取字符串s的加密版本,加密方式mysql5:在mysql8.0版本以后此函数被移除 | password(s) |
联合查询:
union 联合查询要求:
1.两个table的字段数量必须一样
2.两个table的字段可以有不同的数据类型
3.字段名取第一个table的字段
select * from table1 union select * from table2;
inner join :
select 字段时,若两张表里有重名的字段,需要用‘表名.字段’来表示要获取的字段具体时间哪一个表的字段,结果只显示符合组合条件的数据,不符合的数据不显示
select 字段1,字段2,字段3,... from tables inner join table2 on 组合条件;
select id,name,city,math,english from students inner join score on students.id=score.id;
left join :
组合时除了符合组合条件的数据之外,还会列出table1的其余所有数据
select 字段1,字段2,字段3,... from table1 left join table2 on 组合条件;
right join :
组合时除了符合组合条件的数据之外,还会列出table2的其余所有数据
select 字段1,字段2,字段3,... from table1 right join table2 on 组合条件;
子查询语句:查询语句套查询语句
视图表:
视图是数据的特定子集,是从其他表里提取出来数据而形成的虚拟表,或者说临时表
创建视图表依赖一个查询
视图是永远不会消失的除非你主动删除它
视图有时会对提高效率有帮助,临时表不会对性能有帮助,是资源消耗者
视图一般随该数据库存放在一起,临时表永远都是在tempdb里的
视图适合于多表连接浏览时使用;不适合增删改,这样可以提高执行效率
一般视图表的名称以v_为前缀,用来与正常表进行区分
对原表的修改会影响到视图表中的数据
视图表是否可修改取决于建表时的算法值ALGORITHM有三个可选值:
UNDIFINED、MERGE、TEMTABLE
默认值是undefined,效果是允许修改
merge和defined效果一致
temptable是不允许修改
创建视图表语句格式:
create view 视图表名 as 查询语句
外键
表之间建立关系可以使用外键建立
外键是一种约束,可以保证数据的一致,但是不会对性能带来任何的好处:
alter table 从表名 add constraint fk_uid foreign key(从表字段) references 主表(主表字段);
建表时的语句:
constraint 外键名 foreign key(从表字段) references 主表(主表字段);
删除外键:
alter table tablename drop forieign key 外键名