一、 MySQL的概述
MySQL是一个关系型的数据库,建立在关系模型的基础上,由多张相互连接的二维表组成的数据库,它里面可以存储多个信息,类似我们平常所使用的Excel表格,比如一行可以存储一个人的姓名、年龄、居住地址等等…类似如下图
MySql中的SQL语句(重点)
SQL类型 | 作用 |
---|---|
DDL | 数据定义语言,用来定义数据库对象(数据库、表、字段) |
DML(重点) | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL(重点) | 数据查询语言,用来查询数据库中表的记录 |
DCL | 数据控制语言,用来创建数据库用户、控制数据库的访问权 |
SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾,如果结尾没有加分号,书写下一行时就会没有提示
- SQL语句可以使用空格或缩进来增加语句的可读性
- MySQL数据库的SQL语句不区分大小写,但为了可读性,建议还是统一使用字体大小
- 注释
- 单行注释:-- 注释内容或 # 注释内容(MySQL特有)
- 多行注释: /* 注释内容 */
二、 DDL
- 定义数据库
-- 展示本机上MySQL中所有的数据库
show databases ;
-- 查询当前数据库
select database();
-- 使用数据库
use db2;
-- 创建数据库
create database if not exists temp;
-- 删除数据库
drop database if exists temp;
使用数据库
use 数据库名
创建数据库
create database if not exists 数据库名
删除数据
drop database if exists 数据库名
- 定义表
定义表时常见的约束
约束条件 | 作用 |
---|---|
Not null | 此字段不能为空 |
primary key | 主键约束 |
auto_increment | 字段自增,通常和主键约束一起使用,并且要是数字类型 |
default | 默认约束,后面加默认的值,当此字段为空时把默认的值赋值给字段 |
unique | 字段不能重复约束 |
unsigned | 当字段类型为tinyint时表示字段的值要大于等于0并且小于本身的范围 |
create table student (
id int primary key auto_increment,
username varchar(40) unique not null ,
password varchar(40) default '123456',
name varchar(20),
age tinyint unsigned
);
三、 DML
- 添加数据
insert into 表名(字段1,字段2...) values/value(字段1,字段2...)
这是添加指定字段,如果使用values
就可以一次性添加多条数据,多条数据之间用逗号隔开,value
只能添加一条
insert into 表名 values/value(字段1,字段2...)
这里没有指定添加的字段,就要添加所有的字段
insert into emp(username,name,gender,create_time,update_time)
values ('凯撒','草加',1,now(),now()),
('Fiza','乾巧',1,now(),now()),
('德尔塔','沙耶',2,now(),now());
- 删除数据
delete from 表名 [ where 条件 ];
删除数据的时候建议加上条件,不然会导致整个表中
delete
from emp
where id = 1;
- 修改数据
update 表名 set 字段1 = 值1,字段2 = 值2....[where 条件]
修改表中数据的时候,也建议加上条件,否则修改的就是整个表的字段
update emp
set name = '草加',
username = '凯撒'
where id = 5;
四、 DQL
4.1 聚合函数
- 将一列数据作为一个整体,进行纵向计算,以下函数均不统计值为null的数据,除了count(*)
函数 | 作用 |
---|---|
count(字段) | 统计指定列的数量,但不统计null值 |
max(字段) | 取这一列中的最大值 |
min(字段) | 取这一列中的最小值 |
avg(字段) | 求这一列的平均值 |
sum(字段) | 求这一列的和 |
-- 统计指定列有多少个数据
select count(*) from emp;
-- 统计指定列的最大值数据
select max(id) from emp;
-- 统计指定列的最小值数据
select min(entrydate) from emp;
-- 统计指定列的平均值
select avg(id) from emp;
-- 统计指定列各项数据之和
select sum(id) from emp;
4.2 基本查询
作用 | 格式 |
---|---|
查询多个字段 | select 字段1,字段2…from 表名 |
查询所有字段(通配符) | select * from 表名 |
设置别名 | select 字段1 as 别名, 字段2 as 别名 from 表名 |
去除重复记录 | select distinct 字段列表 from 表明 |
-- 查询多个字段
select id,name,gender from emp;
-- 查询所有字段
select * from emp;
-- 设置别名
select name as 名字,gender as 性别 from emp;
-- 去除重复记录
select distinct name from emp;
4.3 条件查询
符号 | 作用 |
---|---|
is (not) null | 字段为空(字段不为空) |
!=(<>) | 表示两个字段不相等 |
字段 between 范围1 and 范围2 | 表示字段在这个范围区间内,包前又包后 |
in | 字段的值是括号内的任意一个值 |
like | %匹配任意数量的字符,_下划线匹配单个字符 |
-- is(not) null
select * from emp where job is not null; -- 匹配job字段不为空的人
select * from emp where name is null ; -- 匹配name字段为空的人
-- != <>
select * from emp where job != 1;
select * from emp where job <> 1;
-- between...and...
select * from emp where entrydate between '2001-1-1' and '2023-1-1';
-- in
select * from emp where id in (1,2,3);
-- like
select * from emp where name like '张%'; -- 匹配名字个数不限,但姓为张的人
select * from emp where name like '张_'; -- 匹配姓张但名字个数为两个的人
4.4 分组查询
格式:
select 指定字段 from 表名 group by 指定字段
分组查询就是按照某个字段分组后进行查询的操作
- 注意事项
分组之后只能查询分组字段和聚合函数,因为分组就是把数据变成一列,只能对这一列进行操作
where不能判断聚合函数,要想对分组后的字段追加条件,可以在group by后面加上having+条件
4.5 排序查询
格式:
select 字段名 from 表名 order by 字段 decs(asc)
排序查询就是当执行完where条件的数据按照字段升序或者降序排序
- 注意事项
ASC表示升序,是默认的;DESC是降序
order by 可以指定多个排序,当第一个排序字段数据相同时,才会使用第二个排序,以此类推
4.6 分页查询
分页查询数据MySQL的方言,也就是说不同的数据库分页查询的语法都不一样,其作用是可以按照限制返回指定条数的数据,多用于前端页面的列表查询
- 关键词
limit 起始索引,每次查询的数量
- 注意事项
起始索引从0开始,起始索引 = (查询页码 - 1) * 每次的查询数量
分页查询是数据库的方言,不同的数据库有不同的实现,Mysql是limit
如果查询的是第一页的数据,起始索引可以省略,直接写每次查询的数量即可
4.7 额外函数
用于分组查询时给字段去赋值,但限制就是只能针对两个字段
if(判断条件, 为true显示的结果, 为false显示的结果)
case是判断的字段,when 值为指定值时,then当条件成立时给字段赋值,else是所有的条件都不成立时才给字段赋值,end代表结束;此种赋值方式适合给多个分组之后的字段赋值
case...when...then...else...end