数据库-mysql

常用对数据库操作的命令写法

show databases; # 查询有多少个数据库

create database db1; # 创建名为db1的数据库

create database if not exists db1;# 如果db1不存在再创建

create database db2; # 创建名为db2的数据库

drop database db2;# 删除名为db2的数据库

drop database if exists db2; #同上

use database db1; # 切换到db1数据库

SQL中的数据类型

大致可分为三类

  • 数值
  • 日期
  • 字符串

Untitled

Untitled

Untitled

创建案例

Untitled

create table student(
    id int,
    name varchar(10),
    gender char(1),
    birthday date,
    score double(5,2),
    email varchar(64),
    tel varchar(15),
    status tinyint
);

show tables ;

desc student;

DDL

## 删除表
show tables;

drop table tb_user;

drop table if exists tb_user;
## 修改表
show tables;
desc student;

alter table student rename to stu; # 修改表名
show tables;
desc stu;

alter table stu add address varchar(50); # 增加列
desc stu;

alter table stu modify address char(50); # 修改列
desc stu;

alter table stu change address addr varchar(30); # 同时修改列名和数据类型
desc stu;

alter table stu drop addr; # 删除列
desc stu;

DML

添加数据

# 查询所有数据
select *
from stu;

# 该指定列添加数据
insert into stu(id, name)
values (1, '张三');

# 给所有列添加数据,列名的列表可以省略
insert into stu(id, name, sex, birthday, score, email, tel, status)
values (2, '李四', '男', '1999-11-11', 88.88, 'lisi@itcast.cn', '13812345678', 1);
select *
from stu;

修改数据

# 修改数据 update 表名 set 列名1=值1,列名2=值2 [where 条件];

# 将张三的性别改为女
update stu set sex = '女' where name = '张三';

# 将张三的生日改为1999-12-12,分数改为99.99
update stu
set birthday = '1999-12-12',score = 99.99
where name = '张三';
# 注:如果update语句没有加where条件,则会将表中的所有数据都改为指定的值

删除数据

# 删除张三记录
delete from stu where name='张三';

delete from stu;

DQL

查询语法

Untitled

预创建数据

# 删除stu表
drop table if exists stu;

# 创建stu表
create table stu(
    id int,  # 编号
    name varchar(20), # 姓名
    age int, # 年龄
    sex varchar(5), # 性别
    address varchar(100), # 地址
    math double(5,2), # 数学成绩
    english double(5,2), # 英语成绩
    hire_date date #入学时间
);

# 添加数据
insert into stu(id,name,age,sex,address,math,english,hire_date)
values
(1,'马运',55,'男','杭州',66,78,'1995-09-01'),
(2,'马花疼',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
(4,'柳白',20,'女','湖南',76,65,'1997-09-05'),
(5,'柳青',20,'男','湖南',86,NULL,'1998-09-01'),
(6,'刘德花',57,'男','香港',99,99,'1998-09-01'),
(7,'张学右',22,'女','香港',99,99,'1998-09-01'),
(8,'德玛西亚',18,'男','南京',56,65,'1994-09-02');

基础查询

# 基础查询
select *
from stu;
# 最好不要使用,影响阅读性

# 查询name age两列
select name, age
from stu;

# 去除重复记录
select distinct address
from stu;

# 查询姓名,数学成绩,英语成绩
select name, math as 数学成绩, english as 英语成绩 # as 别名 as# 不是必须的
from stu;

条件查询

# 条件查询语法
select 字段列表
from 表名
where 条件列表;

Untitled

条件查询示例

# 条件查询
# 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
# 2.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
# 3.查询年龄大于等于20岁并且年龄小于等于30岁的学员信息
select * from stu where age >= 20 and age <= 30;
select * from stu where age between 20 and 30;
# 4.查询入学日期在'1998-09-01·到1999-09-01'之间的学员信息
select * from stu where hire_date between '1998-09-01' and '1999-09-01';
# 5.查询年龄等于18岁的学员信息
select * from stu where age = 18;
# 6.查询年龄不等于18岁的学员信息
select * from stu where age != 18;
# 7.查询年龄等于18岁或者年龄等于20岁或者年龄等于22岁的学员信息
select * from stu where age = 18 or age = 20 or age = 22;
# 8.查询英语成绩为null的学员信息
# 注意:null值不能用=,!=比较,只能用is null或者is not null比较
select * from stu where english is null;

模糊查询

# 模糊查询like
/*
通配符:
(1)_:代表单个任意字符
(2)%号:代表任意个数字符
*/

# 1.查询姓马'的学员信息
select * from stu where name like '马%';
# 2.查询第二个字是'花的学员信息
select * from stu where name like '_花%';
# 3.查询名字中包含·德'的学员信息
select * from stu where name like '%德%';

排序查询

Untitled

# 1. 查询学生信息,按照年龄升序排列
select * from stu order by age;

# 2. 查询学生信息,按照数学成绩降序排列
select * from stu order by math desc;

# 3. 查询学生信息,按照数学成绩降序排列,如果数学成绩相同,再按英语成绩升序排列
select * from stu order by math desc, english;

分组查询

聚合函数

/*
聚合函数
count:统计数量
max:求最大值
min:求最小值
sum:求和
avg:求平均值
*/
# 1.统计班级一共有多少个学生
selectcount(id) from stu;
selectcount(english) from stu;
selectcount(*) from stu;

# 2.查询数学成绩的最高分
selectmax(math) from stu;

# 3.查询数学成绩的最低分
selectmin(math) from stu;

# 4.查询数学成绩的总分
selectsum(math) from stu;

# 5.查询数学成绩的平均分
selectavg(math) from stu;

# 6.查询英语成绩的最低分
selectmin(english) from stu;

分组

Untitled

/*
分组函数
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定]
GROUP BY 分组字段名 [HAVING 分组后条件过滤]...:
*/
select *
from stu;
# 1.查询男同学和女同学各自的数学平均分
select sex,avg(math)
from stu
group by sex;

# 2.查询男同学和女同学各自的数学平均分,以及各自人数
select sex,avg(math),count(*)
from stu
group by sex;

# 3.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex,avg(math),count(*)
from stu
where math > 70
group by sex;

# 4.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2
select sex,avg(math),count(*)
from stu
where math > 70
group by sex
havingcount(*) > 2;

Untitled

分页查询

Untitled

/*
分页查询:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数
        * 起始索引:从0开始
*/
select * from stu;

# 1.从0开始查询,查询3条数据
select * from stu limit 0,3;

# 2.每页显示3条数据,查询第1页数据
select * from stu limit 0,3;

# 3.每页显示3条数据,查询第2页数据
select * from stu limit 3,3;

# 4.每页显示3条数据,查询第3页数据
select * from stu limit 6,3;

约束

概念&分类

Untitled

Untitled

约束案例

Untitled

Untitled

非空约束

Untitled

唯一约束

Untitled

主键约束

Untitled

默认约束

Untitled

外键约束

Untitled

Untitled

数据库设计

数据库设计简介

Untitled

Untitled

表关系

Untitled

表关系之一对多

Untitled

表关系之多对多

Untitled

表关系之一对一

Untitled

总结

Untitled

多表查询

事务

上一篇 MySQL 学习笔记
下一篇 Jdbc
目录

常见问题

这是示例问题的回答内容,你可以在后台自由编辑。