文章目录
- 1.常用SQL语句
- 1.0.对数据库和表的操作
- 1.1.插入数据
- 1.2.删除数据
- 1.3.修改数据
- 1.4.查询数据
- 2.联表查询
- 3.Group By 、 Having、Rollup
- 3.1.Group By
- 3.2.Having
- 3.3.Rollup
- 4.MySQL常用函数
- 4.1.数学函数
- 4.2.字符串函数
- 4.3.日期时间函数
- 4.4.聚合函数
- 4.5.MD5加密
1.常用SQL语句
1.0.对数据库和表的操作
# 连接数据库
mysql -u root -p [密码]
# 修改用户密码
update mysql.user set authentication_string=password('12345') where user = 'root' and Host = 'LocalHost';
# 刷新权限
flush privileges;
# 退出连接
exit;
# 查看所有数据库
show databases;
# 选择数据库
use 数据库名;
# 查看当前数据库中所有表
show tables;
# 显示数据库中所有表的信息
describe 数据库名;
# 创建数据库
create database [if not exists] 数据库名;
# 删除数据库
drop database [if exists] 数据库名;
# 创建表
create table [if not exists] 表名(
`字段名` 类型 [属性] [索引] [注释],
`字段名` 类型 [属性] [索引] [注释],
...
`字段名` 类型 [属性] [索引] [注释]
)[表类型] [字符集] [注释];
--案例:
create table [if not exists] 表名(
`id` int(4) not null auto_increment comment'学号',
`name` varchar(30) not null default '匿名' comment '姓名',
`pwd` varchar(20) not null default '123456' comment '密码',
`sex` varchar(2) not null default '男' comment '性别',
`birthday` datetime default null comment '出生日期',
`address` varchar(100) default null comment '地址',
`email` varchar(50) default null comment '邮箱',
primary key('id'),
)engine=innodb default charset=utf8
# 显示表结构
desc 表名;
# 修改表
alter table 表名 rename as 新名字;# 修改表名
alter table 表名 add `字段名` int(11); # 添加字段
alter table 表名 modify `字段名` varchar(11); # 修改表字段的约束属性
alter table 表名 change `字段名` 新字段名 int(1) # 字段重命名
alter table 表名 drop 字段名; # 删除字段
# 删除表
drop table [if exists] 表名;
1.1.插入数据
insert into `表名` (`字段1`,`字段2`,`字段3`,...) values ('值1','值2','值3',...);
# 一次插入多个值
insert into `` (`字段1`,`字段2`,...) values
('值1','值2',...),
('值1','值2',...),
('值1','值2',...);
1.2.删除数据
# 删除数据一般会配合条件语句一起使用,避免造成整张表的数据被删除!
delete from `表名` where `name` = 'xsx';
# 情况表,使用该语句的话主键自增会从头开始
truncate `表名`;
1.3.修改数据
update `表名` set `字段名` = '修改的值' where id = 1;
# 一次修改多个字段
update `表名` set `字段名1`='修改内容1',`字段名2`='修改内容2',`字段名3`='修改内容3' where id = 1;
1.4.查询数据
select 完成查询语法:
- select 查询字段
- from 查询哪张表
- [left join … on] 联表查询
- where 查询条件
- [group by]…[having] 分组查询、分组过滤
- [order by] 排序
--1、查询所有字段
select * from `表名`;
--2、查询自定标指定字段
select `字段名1`,`字段名2`,`字段名3` from `表名`;
--3、给字段取别名,可以给字段取别名,也可以给取别名
select `字段名1` as 别名1,`字段名2` as 别名2,`字段名3` from `表名`;
--4、函数concat(a,b)
select concat('姓名:',studentName) as 别名 from student;
--5、去重复distinct
select distinct * from `表名`;
--6、查询系统版本
select version();
--7、查询用于计算
select 100*3+1 as 计算结果
--所有学生考试成绩+1分
select `studentNo`,`studentcor`+1 as 加分后的分数 from `表名`;
--8、查询自增的步长
select @@auto_increment_increment;
--9、查询姓刘且名字为两个字的同学
select * from student where name like '刘_';
--10、查询姓刘且名字为三个字的同学
select * from student where name like '刘__';
--11、查询名字中间有‘嘉’字的同学
select * from student where name like '%嘉%';
--12、查询1001,1002,1003号学生
select * from student where id in (1001,1002,1003);
--13、查询在北京、重庆、安徽的学生
select * from student where address in ('北京','重庆','安徽');
--14、null,查询地址为空的同学
select * from student where address is null;
--15、分页limit 起始值,显示数量 ,每页显示五条数据
select * from `表名` limit 0,5;
--第n页公式: (n-1)*每页数据数
--总页数: 数据数/每页数据数
--17、排序order by
--升序asc
select * from 表名 order by `根据哪个字段` asc;
--降序desc
select * from 表名 order by `根据哪个字段` desc;
2.联表查询
3.Group By 、 Having、Rollup
3.1.Group By
Group By 是一种 SQL 查询语句,常用于根据一个或多个列对查询结果进行分组。在 Group By 子句中指定的列将成为分组依据,而在 Select 子句中指定的列必须是聚合函数(例如 SUM、AVG、COUNT 等)或分组列。
假设我们有一个存储用户订单信息的表 orders,其中包含了订单号、客户 ID、订单日期和订单金额四个字段。我们现在需要按照客户 ID 对所有订单进行分组,并计算每个客户的订单数和总金额。可以使用 Group By 如下:
SELECT customer_id, COUNT(order_number) AS order_count, SUM(order_amount) AS total_amount FROM orders GROUP BY customer_id;
- 如果在select子句中没有指定聚合函数,则必须将该类也包含在group by子句中。
- 在group by中指定的列可以时表达式或函数,但是在select子句中必须使用别名来引用这些列。
3.2.Having
Having 是一个可选的子句,在 Group By 后面使用,用于过滤分组后的结果。通常用于筛选特定的分组,或者根据聚合函数计算的结果进行过滤。
假设我们有一个存储学生成绩信息的表 scores,其中包含了学生姓名、科目和分数三个字段。我们现在需要查询分数在 60 分以上的每个学生在每个科目上的平均分数。可以使用 Having 如下:
SELECT student_name, subject, AVG(score) AS average_score FROM scores GROUP BY student_name, subject HAVING AVG(score) > 60;
- having子句中的条件时基于聚合函数计算的结果进行过滤的。
- 如果在select子句中没有使用聚合函数,则必须在Group By自己种包含该列。
- 如果条件中只涉及到一个聚合函数,可以使用where子句代替Having子句。
3.3.Rollup
Rollup 是一种可选的子句,在 Group By 子句后面使用,用于生成分组汇总行。通过使用 Rollup,可以将多组数据汇总为单组数据,并生成具有层次结构的报告。
假设我们有一个存储销售订单信息的表 orders,其中包含了订单日期、客户 ID 和订单金额三个字段。我们现在需要对订单日期和客户 ID 进行分组,并按照订单日期、客户 ID 和总金额生成汇总报告。可以使用 Rollup 如下:
SELECT order_date, customer_id, SUM(order_amount) AS total_amount FROM orders GROUP BY order_date, customer_id WITH ROLLUP;
- Rollup子句可以用于生成多级汇总报告
- 对于每个分组列,Rollup将生成一个子总计行
- 如果Group By子句中制定了多个分组列,则Rollup将生成每个分组列的所有可能组合情况的子总计行。
4.MySQL常用函数
4.1.数学函数
--绝对值
select abs(-8)
--向上取整
select ceiling(9.4)
--向下取整
select floor(9.4)
--返回一个0-1之间的随机数
selec rand()
//判断一个数的符合,负数返回-1,整数返回1
select sign()
4.2.字符串函数
//字符串长度
select char_length()
//拼接字符串
select concat('a','b')
//查询替换,从某个位置开始替换某个长度
select insert()
//转大写
select upper()
//转小写
select lower()
//返回索引,返回字符串2再字符串1中的索引
select instr('字符串1','字符串2')
4.3.日期时间函数
//字符串长度
select char_length()
//拼接字符串
select concat('a','b')
//查询替换,从某个位置开始替换某个长度
select insert()
//转大写
select upper()
//转小写
select lower()
//返回索引,返回字符串2再字符串1中的索引
select instr('字符串1','字符串2')
。。。。。。自己插官方文档
4.4.聚合函数
--计数
count()
--求和
sum()
--平均值
avg()
--最大值
max()
--最小值
min()
4.5.MD5加密
update `表名` set `pwd`=MD5(pwd) where id = 1;
--插入时机密
insert into `表名` (id,name,pwd)values (4,'小米'MD5('12345'))