关系型数据库和非关系型数据库
- 关系型数据库Sql
mysql 通过表和表之间,行和列之间的关系进行数据存储 - 非关系型数据库
redis 以对象的方式存储 NoSql
mysql是关系型数据库的管理系统 5.7是稳定的
- 安装建议
尽量不要使用exe安装,尽可能使用安装包安装
常用命令
操作数据库
操作数据库>操作数据库中的表>操作表中的数据
1、操作数据库
- 创建数据库
- 删除数据库
- 使用数据库
数据库的列类型
1、SHOW CREATE TABLE my
my是表的名字这个操作能把创建数据库的语法列出来直接复制就可以
修改删除表数据表的类型
表的操作(用ALTER)
-
修改表的名字
ALTER TABLE my RENAME AS my1 -
增加字段
ALTER TABLE my1 add age int(11) -
modify 修改字段类型
-
change 给字段重新命名
-
删除字段
注意点
- 所有的创建和删除操作尽量加上判断,以免报错
条件
插入字段
- insert into table
更新字段
- update table
delete与truncate的区别
DISTINCT 去重
SELECT DISTINCT studentname from student
-
重复的只显示一条
-
SELECt DISTINCT studentname from student
-
SELECt VERSION() 查询系统版本
SELECT 100-3 as ‘计算结果’ 用来计算
SELECT 分数+1 FROM grade 成绩加1分查看
where 逻辑运算符
模糊查询 比较运算符
查询姓赵的
select studentname from student where studentname like ‘赵%’
查询名字后面有一个字的
select studentname from student where studentname like ‘赵_’
查询名字后面有俩字的
select studentname from student where studentname like ‘赵__’
查询名字里面有强的
select studentname from student where studentname like ‘%强%’
查询成绩为100和99的学生
select studentresult from result where studentresult in (100,99)
查询考了100分的同学
select studentresult from result where studentresult in (100)
select studentresult from result where studentresult =100
查询成绩为空的学生
select * from result where
studentresult is null
查询成绩不为空的学生
select * from result where
studentresult is NOT null
join联表查询
–联表查询 –
SELECt studentname ,studentresult
from student as s
INNER JOIN result as r
WHERe s.studentno = r.studentno
查询学生某一科目考了多少分
SELECt studentname,subjectname,studentresult
FROM student,subject,result
where student.studentno= result.studentno
and result.subjectno = subject.subjectno
SELECt studentname,studentresult
FROM student,result
where student.studentno= result.studentno
无关联表的查询
SELECt student.studentname,gradename
FROM student,grade
where student.gradeid = grade.gradeid
SELECt student.studentname,studentresult
FROM student,result
WHERe studentresult >= 99 and student.studentno=result.studentno
排序
- 一级排序
SELECt student.studentname,studentresult FROM student,result ORDER BY studentresult DESC
DESC 降序
ASC升序
- 二级排序
SELECt student.studentname,studentresult,student.studentno FROM student,result ORDER BY studentresult DESC,studentno ASC
分页
每页显示2条从第第四个栏位开始 SELECt studentname,studentresult from student , result where student.studentno = result.studentno LIMIT 2 OFFSET 3
内连接和外连接
- 方式1
SELECt studentname,studentresult from student left JOIN result on student.studentno = result.studentno where student.studentno is null union all SELECt studentname,studentresult from student right JOIN result on student.studentno = result.studentno
- 方式2
SELECt studentname,studentresult from student right JOIN result on student.studentno = result.studentno where result.studentno is null union all SELECt studentname,studentresult from student left JOIN result on student.studentno = result.studentno数值函数
常用的函数
SELECt ABS(-156) 绝对值 ,SIGN(-23) -1 ,SIGN(23) 1 ,SIGN(0) 0 ,PI() 3.14 ,CEIL(32.52) 最靠近32.52的最大数 ,CEILING(-41.89) 最靠近-41.89的最大数 ,FLOOR(-25.25) 最靠近-25.25的最小数 ,MOD(12,5) 12除以5的余数 ,ROUND(258.62,-2)小数点前面2位四舍五入 300 ,ROUND(258.62)小数点前面2位四舍五入 258 ,ROUND(258.62,-1)小数点前面1位四舍五入 260 ,ROUND(258.62,2)小数点后面2位四舍五入 258.62 ,POW(2,5) 2的5次方 ,EXP(2) e的2次方 ,LEAST(2,5,8) 里面最小的值 2 ,greatest(2,5,8) 里面最大的值8 ,RAND() 随机数0-1,每次生成不一样 ,RAND(10) 伪随机数,生成的随机数相同0.6570515219653505 ,RAND(10) 还是0.6570515219653505 ,TRUNCATE(123.456,0) 不考虑四舍五入的问题 123 ,TRUNCATE(123.456,1) 123.4 ,TRUNCATE(123.456,-1) 120 ,SQRT(4) 4的平方根2
常用的函数
进制之间的转换
SELECT BIn(10) 10转换成二进制 ,HEx(10) 10转换成16进制 ,OCt(10) 10转换成8进制 ,conv(10,2,8) 2进制的10转换成8进制是多少 ,conv(10,10,8) 10进制的10转换成8进制是多少
字符串函数
- 字符串长度
- 字符串的拼接
SELECT
ASCIi('Abcdsff') 不管多少个字符只看第一个的ascii码
,LENGTH('你好') 字符长度,一个字是三个 6
,CHAR_LENGTH('你好') 只看有几个2
,CONCAt(studentname,' 成绩是: ' ,studentresult)
from student
INNER JOIN result
ON student.studentno=result.studentno
张伟 成绩是: 99
赵强 成绩是: 100
赵强东 成绩是: 25
刘大 成绩是: 60
林小 成绩是: 70
王去 成绩是: 80
在字符串中插入字符
SELECt INSERT('hello',2,3,'world')
结果是 hworldo
-
字符串首字母大写,小写 upper,lower
-
截取(从左截取几个,从右截取几个)( left,2) ( right,2)
-
具体截取
-
LPAD,RPAD 补齐
salary给10个位,不足用空格来补齐,从左边开始补,LAPD实现右对齐
RPAD 实现左对齐
-
去掉字符串空格操作
-
返回字符串重复几次的结果
-
返回n个空格
-
字符串比较大小
(-1代表后面大,1代表前面大,0是一样大) -
某一字符串出现的位置
SELECT INSERT('hello',2,3,'world') hworldo
,REPLACE('hello','world','my') hello
,LOCATE('ll','hello') 3
,ELT(1,'a','c','v','d') a
,FIELD('ff','ww','ee','ff','rr') 3
,REVERSe('abcd') dcba
日期和时间函数
获取时间日期
- 当前日期
SELECT CURDATE() ,CURRENT_TIME()
- 时间戳
UNIX_TIMESTAMP()
当前时间转换成时间戳是1659588023
- 获取日期,时间,星期
- 获取日期 SELECT CURDATE() 结果是:2022-08-04 -获取当前时间 SELECT NOW() 结果是:2022-08-04 13:07:40
日期的操作函数
- 日期的加减,在现有的时间基础上增加减少时间
- 日期的格式化与解析
把时间得形式表现为你想要的格式
- 日期的 SELECT DATE_FORMAT(CURDATE(),'%Y-%M-%D') 结果是:2022-August-4th SELECT DATE_FORMAT(CURDATE(),'%y-%m-%d') 结果是:22-08-04 - 时间的 SELECT TIME_FORMAT(NOW(),'%H:%I:%S') 结果是:13:01:02 SELECT TIME_FORMAT(NOW(),'%h:%i:%s') 结果是:01:05:36
解析时间 格式化的逆过程
SELECT STR_TO_DATE('13:01:47','%H:%I:%S')
结果是:01:00:47
如果你记不住这些格式怎么办
SELECT GET_FORMAT(DATE,'USA') 结果是:%m.%d.%Y
测试
SELECT DATE_FORMAT(CURDATE(),GET_FORMAT(DATE,'USA')) 结果是:08.04.2022流程控制图
- if(条件,true,false)
SELECT studentname,studentresult ,if(studentresult>90,'成绩优秀','成绩差') '评价' from student INNER JOIN result on student.studentno=result.studentno
结果为:
- case when
SELECt studentname,studentresult,CASE WHEN studentresult<60 THEN'笨蛋'
WHEN studentresult<80 THEN'还可以'
WHEN studentresult<90 THEN'好学生'
ELSE '神仙' END 'detail'
from student
INNER JOIN result
on student.studentno=result.studentno
结果是:
SELECt MD5('mysql') 'pwd'
mysql信息函数
其他函数
- 将ip地址转换成整数
SELECT
INET_ATON('192.168.1.110')
结果是:3232235886
INET_NTOA(3232235886)
结果是:192.168.1.110
- 执行效率
执行MD5('mysql') 10000000次用的时间
SELECT
BENCHMARK(10000000,MD5('mysql'))
聚合函数
1.常见的几个聚合函数
1.1 max min 适用于数值、字符串、日期类型的数据
最大数 SELECT MAX(studentresult) from result 最小数 SELECt MIN(studentresult) from result
1.2 count avg sum
在查询结果中出现的次数 前提是字段不是null SELECt COUNT(studentresult) from result 字段出现的次数 如果值为null不算 SELECt COUNT(studentresult) from result 平均值 SELECt avg(studentresult) from result 总和 SELECt sum(studentresult) from result
group by
SELECt avg(studentresult),sex,max(studentresult) from result INNER JOIN student on student.studentno = result.studentno GROUP BY student.sex
结果:
having
作用:过滤数据
如果过滤条件中使用了聚合函数,就必须使用having来替代where
SELECt studentname,studentresult from student INNER JOIN result on student.studentno = result.studentno GROUP BY student.studentno having MIN(studentresult)>50
聚合函数和单函数区别
聚合函数对总数据进行处理
单函数分为基础函数和字符串函数日期函数等都是对字段具体的小的进行处理
过滤条件向前靠近,效率越高



