MYSql数据篇-----基础知识点超详细整理---图形化界面----保姆级教程
Posted 大忽悠爱忽悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSql数据篇-----基础知识点超详细整理---图形化界面----保姆级教程相关的知识,希望对你有一定的参考价值。
基础语法整理
基础查询部分知识点
语法
select 查询列表 from 表名 //显示查询到的结果,类似c++中的cout语句
查询列表可以是: 表中的字段,常量值,表达式,函数
查询的结果是一个虚拟的表格
查询表中的单个字段
select name from stu;
查询表中的多个字段
select name,age from stu;
查询表中的所有字段
select *from stu; //查询顺序与表中字段顺序完全一致
查询常量值
select 100;
select '大忽悠';
查询表达式
select 100/2;
查询函数
select version();
起别名
方法1:使用AS
SELECT 100/2 AS 结果;
select last_name AS 姓 first_name AS 名;
别名作用: 便于理解; 如果查询的字段有重名情况,使用别名可以区分开来;
方法2: 使用空格
SELECT 100/2 结果;
select last_name 姓 first_name 名;
注意:如果别名与关键字冲突,需要用双引号或者单引号引起来,作为区分
SELECT age AS OUT put FROM stu;
OUT是关键字,改为下面写法:
select age as "out put" from stu;
去重
在字段名前面加上DISTINCT ,这里对于重复的字段,就只会显示最先出现的那个,后面重复的不会显示
SELECT DISTINCT age FROM stu;
+号的作用
mysql中的+号只有一个功能,运算符
select 100+90;//两个操作符都为数值型,做加法运算
select '20'+10;//其中一方为字符型数值,则试图把字符型数值转化为数值型,转化成功,继续加法运算
select '大忽悠'+10;//转化失败,则将字符型数值转化为0
select null+10;//只要其中一方为null,结果必定为null
concat函数—拼接字符串
CONCAT(last_name,first_name) AS 姓名;
ifnull函数–判断是否为空
用来处理null与数值型相加得到null,与字符型拼接得到null的问题
CONCAT(last_name,'年龄: ',IFNULL(age,0)) AS 姓名;
条件查询部分知识点整理
语法
select
查询列表
from
表名
where
筛选条件;
根据筛选条件不同进行分类
1.按条件表达式筛选
条件运算符: < , > , <= , >= ,<>(不等于,建议使用这种), = , !=
select * from stu where age > 10;
2.按照逻辑表达式筛选
逻辑运算符: && , || , ! , and , or , not
and和&&等价,||和or等价,!和not等价
select * from stu where age>10 and age <18;
select * from stu where not(age<18 and age>10) or money>10000000;
3.模糊查询
like , between and (某个区间范围查找), in , is null
like的使用
like可以进行模糊查询,在like字句中可以使用_或者%作为占位符号,_只能代表一个字符,%代表任意个字符。
select *from stu where name like "%悠";
select *from stu where name like "大_悠";
若模糊查询里面包含通配符,可以使用escape进行转义:
web系统中一般都会在前端对特殊字符进行过滤处理,防止数据查询导致的页面和数据问题。但是也有一些特殊的情况,比如说业务字段里会包含某些特殊字符,比如"%"、"["、"]"等,这时候如果想象查询出数据就需要使用到escape关键字对特殊字符进行转义。
escape指定的字符后面紧挨着的第一个字符被看作是普通字符而非通配符,如果转义符后面的字符不是通配符,则将放弃转义符并将该转义符后面的字符作为该模式中的常规字符处理。
1. 查询username字段中包含%的数据
select * from user u where u.username like ‘%%%’; --查询出所有数据
select * from user u where u.username like ‘%%%’ escape ‘’; --查询出id=1、2
2. 查询username字段中包含’['的数据
select * from user u where u.username like ‘%#[%’ escape ‘#’; --查询出id=3、4、5
select * from user u where u.username like ‘%#[校%’ escape ‘#’;–查询出id=5
in的使用
判断某字段是否属于in列表中的某一项
in列表的值类型必须统一或者兼容: ‘123’–>123
//选择年龄为10,18,19,20的学生
select *from stu where age in(10,18,19,20);
is null和is not null的使用
注意:=和<>不能用来判断null值,要用is null
select *from stu where age is null;
不为空
select *from stu where age is not null;
安全等于 <=>
select *from stu where age <=> 18;
安全等于和is null 的区别:
- is null仅仅用来判断null值,可读性高
- <=>既可以判断null值,又可以判断普通数值,可读性低
排序查询
语法
select 查询列表
from 表
[where 筛选条件]-->可写可不写
order by 排序列表[asc--》升序/desc---》降序]---》如果不写,默认升序;
添加筛选条件:
SELECT* FROM stu WHERE sex='男' ORDER BY sid ASC;
按表达式排序:
SELECT*,IFNULL(score,0)+scid 分数 FROM stu_course ORDER BY IFNULL(score,0)+scid;
按别名排序:
SELECT*,IFNULL(score,0)+scid 分数 FROM stu_course ORDER BY 分数;
按函数排序:
SELECT*,LENGTH(sname) 姓名 FROM stu ORDER BY LENGTH(sname);
或者
SELECT*,LENGTH(sname) 姓名 FROM stu ORDER BY 姓名;
按多个字段排序:
先按照dno降序排列,当dno相同时,再按照eid升序排列
SELECT dno,ename,eid FROM employee ORDER BY dno DESC ,eid;
总结
order by语句一般放在查询语句最后面,limit子句除外
常见函数
调用
select 函数名(实参列表) [from 表]-->如果实参列表调用了表中的字段,才需要写
分类
单行函数
例如: concat,length,ifnull等
字符函数
1.length获取参数值的字节个数
utf8字符集下,一个汉字占三个字节,gbk下一个汉字占两个字节
SELECT LENGTH("大忽悠abc");
2.concat 拼接字符串
SELECT CONCAT(eid,'_',ename,'_',sex) 姓名 FROM employee;
3.upper----变大写
SELECT UPPER('tom') 姓名;
4.lower-----变小写
SELECT LOWER('TOM') 姓名;
5.嵌套函数
SELECT CONCAT(UPPER('dhy'),LOWER('nb')) 姓名;
6.substr(缩写) 或者 substring
注意:sql中索引从1开始
1.截取从指定索引处后面所有字符
SELECT SUBSTR('大忽悠哈哈哈哈',4) 字符串;
2.截取从指定索引处指定字符长度的字符
SELECT SUBSTR('大忽悠哈哈哈哈',1,3) 姓名;
7.返回子串在主串中第一次出现的起始位置,找不到返回0
注意:sql中索引从1开始
SELECT INSTR('哈哈哈大忽悠哈哈哈','大忽悠') 姓名位置;
8.trim: 移除字符串的首尾信息。最常见的用法为移除字符首尾空格。
去除空格字符:
SELECT LENGTH(TRIM(" 大忽悠 ")) AS 长度;
移除指定字符:
SELECT TRIM('a' FROM "aaaaa大a忽a悠aaaaa") 长度;
9.lpad—用指定的字符实现左填充指定长度
注意这里是填充字符,一个中文算一个字符
SELECT LPAD("大忽悠",6,'小朋友') 姓名 ;
如果指定长度比原来字符串长度还要短,会进行截断操作—从右边截断
SELECT LPAD("大忽悠小朋友",3,'小朋友') 姓名 ;
10.rpad—用指定的字符实现右填充指定长度
SELECT RPAD("大忽悠和",7,'小朋友') 姓名 ;
如果指定长度比原来字符串长度还要短,会进行截断操作—从右边截断
11. replace— 替换
SELECT REPLACE('大忽悠和大朋友吃饭,大忽悠和大朋友一起玩','大朋友','小朋友') 句子;
数学函数
1.四舍五入–round
默认取整
SELECT ROUND(1.25);
保留小数位
SELECT ROUND(1.25,1);
2.ceil 向上取整,返回大于等于该参数的最小整数
SELECT CEIL(1.25);
3. floor 向下取整,返回小于等于该参数的最大整数
SELECT FLOOR(1.25);
4.truncate 截断----->只保留小数点后几位,不进行四舍五入操作
SELECT TRUNCATE(1.234567,1);
5.mod 取余
mod(a,b)----->a-a/b*b
取余符合只和被除数有关
SELECT MOD(10,3);
日期函数
1.now—返回当前系统时期+时间
SELECT NOW();
2. curdate----返回当前系统日期,不包含时间
SELECT CURDATE();
3.curtime-----返回当前时间—不包含日期
SELECT CURTIME();
4.获取指定部分–年,月,日,小时,分钟,秒
1.获取年
SELECT YEAR(NOW()) 年;
SELECT YEAR('2021-5-20') 年;
2.获取月
SELECT MONTH(NOW()) 月;
让月份以英文的方式显示:
SELECT MONTHNAME(NOW()) 月;
3.获取日
SELECT DAY(NOW());
4.获取小时
SELECT HOUR(NOW());
5.获取分钟
SELECT MINUTE(NOW());
6.获取秒
SELECT SECOND(NOW());
5.str_to_date 将日期格式的字符变成指定格式的日期类型
格式控制符
演示:
//格式控制符是用来匹配所给定的日期的格式
SELECT STR_TO_DATE('2021-5-20','%Y-%c-%d') 日期;
主要作用是将日期格式不规范的转化为可以解析的规范格式,方便查找
//显然无法解析
SELECT birthday FROM dtu WHERE birthday='5-20 2021';
//指定解析格式,让编译器知道如何解析
SELECT birthday FROM dtu WHERE birthday=STR_TO_DATE('5-20 2021','%c-%d %Y');
6.data_format: 将日期转化为字符
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS 日期;
7.DATEDIFF:计算两个日期相隔的天数
SELECT DATEDIFF(NOW(),'2002-1-2');
其他函数
1.查看版本号
SELECT VERSION();
2. 查看当正在使用的数据库
SELECT DATABASE();
3.查看当前用户
SELECT USER();
流程控制函数
1.if函数----if else 的效果
SELECT IF(10>11,'猜对了','呜呜呜');
2. case函数使用一: switch case 的效果
语法:
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1; ---->只有语句需要加分号,值不需要
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
注意:只有语句需要加分号,值不能加分号,不然直接就结束了
SELECT sname 姓名,sid 编号,
CASE sname
WHEN '张三' THEN '女'
WHEN '李四' THEN '女'
ELSE '男'
END AS 性别
FROM stu;
3. case函数使用二 : 多重if-else
语法:
case
when 常量1 then 要显示的值1或语句1; ---->只有语句需要加分号,值不需要
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
实例:
SELECT sname 姓名,sid 编号,
CASE
WHEN sname='张三' THEN '女'
WHEN sname='李四' THEN '女'
ELSE '男'
END AS 性别
FROM stu;
这里语句建议选择使用()包裹起来
分组函数—忽略null值
功能: 做统计使用,又称统计函数,聚合函数,组函数。
1.sum求和函数
SELECT SUM(cnum) FROM classes;
2.avg求平均值函数
SELECT AVG(cnum) FROM classes;
3.max求最大值函数
SELECT MAX(cnum) FROM classes;
4.min求最小值函数
SELECT MIN(cnum) FROM classes;
5.count计算个数函数的详细介绍
SELECT COUNT(cnum) FROM classes;
统计行数
SELECT COUNT(*) 总行数 FROM classes;
可以在count函数的实参传入一个常量值来计算总行数,相当于在表中新添加了一列,值都为那个常量值,然后计算那个常量值总共的行数
SELECT COUNT(1) 总行数 FROM classes;
6.混和使用
SELECT SUM(cnum) 总和,ROUND(AVG(cnum),2) 平均值,COUNT(cnum) 个数 FROM classes;
7.分组函数都可以和distinct搭配使用—用来去重
SELECT SUM(cnum) 总和,SUM(DISTINCT cnum) 去重后总和 FROM classes;
8.和分组函数一同查询的字段要求是group by后的字段
分组查询
Group by 子句
语法:
select 分组函数,列(要求出现在group by后面)
from 表
[where 筛选条件]---可选项
group by 分组的列表
[Order by 子句]---可选项
注意:查询列表比较特殊,要求是分组函数和group by后面出现的字段
例子
查询语文大于70的同学
SELECT SUM(chinese+english+math) 总分,以上是关于MYSql数据篇-----基础知识点超详细整理---图形化界面----保姆级教程的主要内容,如果未能解决你的问题,请参考以下文章