MySQL学习记录
sql分类,主要分为DDL,DML,DQL, DCL
DDL:定义数据库对象(数据库,表,字段)
DML:对数据库表中的数据增删改
DQL:数据查询语言,查询表中的记录
DCL:用来创建数据库用户,控制数据库的访问权限
DDL:
1.查看数据库:
show databases;
2.查看当前数据库:
select database();
3.创建数据库:
create database 数据库名;
create database if not exists 数据库名;
create database default charset utf8mb4;
4.删除数据库:
drop database if exists 数据库名;
5.切换数据库;
use 数据库名;
表操作:
1.查看当前数据库所有表
show tables;
2.查看表结构:
desc 表名;
3.查看建表语句;
show create table 表名;
4.创建表结构
create table 表名(
字段1 字段类型
)
create table user(
id int comment '主键ID',
name varchar(50) comment '姓名',
age int comment '年龄'
)comment '用户表';
表操作-修改
1.添加字段
alter table 表名 add 字段名 类型(长度);
2.修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
3.修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) ;
4.删除字段
alter table 表名 drop 字段名;
5.修改表名
alter table 表名 rename to 新表名;
6.删除表
drop table if exists 表名;
7.删除指定表,并重新创建表
truncate table 表名;
DML:
1.添加数据
insert into 表名 (字段1,字段2,...)values(值1,值2,...);
2.给全部字段添加数据
insert into 表名 values (值1 ,值2 ,...);
3.批量添加数据
insert into 表名 (字段1,字段2,...)values (值1,值2,...),(值1,值2,...),(值1,值2,...);
insert into 表名 values (值1 ,值2 ,...),(值1 ,值2 ,...),(值1 ,值2 ,...);
4.修改数据
update 表名 set 字段名1 = 值1 ,字段名2 = 值2[where 条件];
5.删除数据
delete from 表名 【where 条件】;
DQL;
select
字段列表
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件列表
order by
排序字段列表
limit 分页参数;
基础查询(不带任何条件)
条件查询(where)
聚合函数(count,max,min, avg, sum)
分组查询(group by)
排序查询(order by)
分页查询(limit)
去重复
select distinct * from 表名;
比较运算符
>,>=,<,<=,=,<>或!=,between .. and ..,in(...),like 占位符,is null.
逻辑运算符
and 或&&,or或||,not 或!
select * from emp where age =88;
select * from emp where age <20;
select * from emp where age <=20;
select * from emp where age <> 88;
select * from emp where age !=88;
select * from emp where age between 15 and 20;
select * from emp where age >=15 and age <=20;
select * from emp where age >=15 && age <=20;
select * from emp where gender ='女' and age <25;
select * from emp where age =18 or age =20 or age =40;
select * from emp where age in(18,20,40);
select * from emp where name like '__';
select * from emp where idcard like '%x';
select count(*) from emp; -- 统计的是总记录数
select count(idcard) from emp; -- 统计的是idcard字段不为null的记录数
select avg(age) from emp;
select max(age) from emp;
统计该企业员工的最小年龄
select min(age) from emp;
统计西安地区员工的年龄之和
select sum(age) from emp where address ='西安';
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组 之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
select gender count(*) from emp group by gender;
select gender,avg(age) from emp group by gender;
select workaddress count(*) address_count from emp where age < 45 group by workaddress having address_count>=3;
select workaddress,gender,count(*) 数量 from emp group by gender, workaddress;
select * from emp order by age;
select * from emp order by entrydate desc;
select * from emp order by age ,entrydate desc;
select * from emp limit 0,10;
select * from emp limit 10;
select * from emp limit 10,10;
select * from emp where age in (20,21,22,23);
select * from emp where gender='男' and (age between 20 and 40) and name like '___';
select gender,count(*) 人数 from emp where age<60 group by gender;
select name,age from emp where age <= 35 order by age,entrydate desc;
DQL语句的执行顺序为: from ... where ... group by ... having ... select ... order by ... limit ...
函数
分为以下四类: 字符串函数、数值函数、日期函数、流程函数。
1.concat : 字符串拼接
select concat('hello','world');
2.lower : 全部转小写
select lower('Hello');
3.upper : 全部转大写
select upper('hello');
4.lpad : 左填充
select lpad('1',5,'0');-- 向左填充0,直到为5位数。
5.rpad:右填充
select rpad('1', 5, '-');
6.trim : 去除空格
select trim('hello world my name is zbc');
7.substring : 截取子字符串
select substring('qwerty',1,3);
数值函数
ceil :向上取整
select ceil(1.1);
floor:向下取整
select floor(1.9);
mod:取模
select mod(7,4);
rand:获取随机数
select rand();
round:四舍五入
select round(2.344,2);
日期函数
curdate:当前日期
select curdate();
curtime:当前时间
select curtime();
now:当前日期和时间
select now();
年
select year(now());
月
select month(now());
日
select day(now());
date_add:增加指定的时间间隔
select date_add(now(), INTERVAL 70 YEAR );
datediff:获取两个日期相差的天数
select datediff('2021-10-01', '2021-12-01');
查询所有员工的入职天数,并根据入职天数倒序排序。
流程函数


浙公网安备 33010602011771号