常用对数据库操作的命令写法
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中的数据类型
大致可分为三类
- 数值
- 日期
- 字符串



创建案例

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

预创建数据
# 删除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 条件列表;

条件查询示例
# 条件查询
# 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 '%德%';
排序查询

# 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;
分组

/*
分组函数
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;

分页查询

/*
分页查询:
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;
约束
概念&分类


约束案例


非空约束

唯一约束

主键约束

默认约束

外键约束

数据库设计
数据库设计简介


表关系

表关系之一对多

表关系之多对多

表关系之一对一

总结
