二、MySQL常用SQL语句

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 完成查询语法:

  1. select 查询字段
  2. from 查询哪张表
  3. [left join … on] 联表查询
  4. where 查询条件
  5. [group by]…[having] 分组查询、分组过滤
  6. [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'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值