数据库管理软件:DBMS是用于管理数据库的软件。MySQL属于数据库管理软件的一种。可以把数据库管理软件分为2类:
关系型数据库管理软件:数据是以表的方式存储。常见的有:MySQL/Oracle/SQL Server/DB2等
非关系型数据库管理软件:数据以文档或字符串等前提非表的方式存储。常见的有:MongoDB/Redis/HBase等
数据库:DB,长期存储在计算机内的、有组织的、可共享的大量数据的集合。
数据库系统:DBS,在计算机系统里引入了数据库之后的系统。

SQL:结构化的查询语言。主要包含了4个部分:
DQL 数据查询语言——》查询数据库里的数据。此部分是学习的重点和难点。代表性的关键字:select
DML 数据操纵语言——》改变数据库里的数据。次重点。代表性的关键字:insert/update/delete
DDL 数据定义语言——》用于定义数据的结构。次次重点。我们需要学会基本的建库建表从而检验数据库指令的正确性。代表性的关键字:create/alter/drop
DCL 数据控制语言——》用于控制访问权限。通常由DBA数据库管理员来做
数据库的常见操作:
创建数据库
create database 数据库名 default utf-8;
查看数据库
show databases;
查看当前连接的数据库
select database();
连接数据库
use 数据库名;
删除数据库
drop database数据库名;
表的常见操作
简单建表语句
create table 表名(字段名 数据类型 );
mysql常见的数据类型
整型 int
浮点型 float double decimal
字符型 char 定长字符型 varchar 变长字符型
日期时间型 date time datetime
枚举型 enum
常见的约束
主键约束:primary key 设置了该约束的字段不可以不给值,也不可以给重复的值
非空约束:not null 设置了该约束的字段不能不给值
唯一约束:unique 设置了该约束的字段不能给重复的值
默认值约束:default 默认值 设置了该约束的字段,不给值时用默认值,给值时用给的值
外键约束:foreign key 通常用在两表之间,反映的是字段之间的参照关系,一旦设置了外键,它的取值就会受到限制,
create table student2(
sid int primary key,
sname varchar(10) not null,
sheight float(3,2) default 1.65,
semail varchar(50) unique,
sbirth date
);
外键约束举例:
假设我想针对student2表里的学员,创建一个问题表来收集学员问题:
create table question(
qid int primary key,
sid int, -- 如果你希望在往question表插入数据时,禁止录入超出student2表范围的学员编号——》外键约束
content varchar(100),
foreign key(sid) references student2(sid) -- 设置外键约束
);
其他常见表的操作(DDL)
修改表名
alter table 旧表名 rename to 新表名;
修改字段名
alter table 表名 change 旧字段名 新字段名 字段类型;
添加字段
alter table 表名 add 新字段名字 字段类型;
删除字段
alter table 表名 drop 字段名 ;
删除表
drop table 表名;
数据的插入
单条数据插入
insert into 表名(要插入的字段) values(插入的值)
实际工作中要插入的东西很多,字段名很多,所以一定要在表名后面写入字段
多条数据的插入
insert into 表名(要插入的字段) values(插入的值)(插入的值);
insert into student2(sid,sname) values(6,'qiqi'),(7,'lala'),(8,'qiaqia');
数据的查询
select * from 表名;
select *|字段名1,字段名2,……,字段名n from 表名,只显示查询的字段
select distinct bj from xsb; -- 可以通过distinct去掉重复的记录
select *|字段名1,字段名2,……,字段名n from 表名 where 条件
where子句里常见的运算符:
1)比较运算符 > >= < <= != <> =
2) 逻辑运算符 not and or
3) 范围运算符 between and 在某个区间范围里 <= >=
in 匹配某个数据集合里的任意一个
4)模糊查询:like _ %
_ 表示一个字符
% 表示多个字符
select * from xsb where xm like '张%';
5) 空值查询:is null is not null
select * from student2 where sbirth is null;
排序显示
order by asc 升序 desc 降序 默认是升序
数据的更新
update 表名 set 字段名= ~ where 限制条件;(有条件的更新)
update 表名 set 字段名 (无条件的更新)
数据的删除
delete from 表名 where 删除条件
delete from cjb where xh='001' and kch='01'(有条件的删除)
delete from cjb (数据全部删除,表还在)
进阶查询
分组查询
常见的聚合函数
count() 统计个数 ——》2种常见的用法:count(*) count(字段名)
sum() 求和
avg() 求平均值
max() 求最大值
min() 求最小值——》1种常见用法:sum(字段名)
count在统计个数时,空值不会统计在内。count(*)和count(字段名)一样的
相关的sql语句
group by 分组 后面跟分组字段
having 作用:分组之后的进一步过滤(只查询满足条件的分组而不是所有组) 后面跟针 对组的筛选条件
select
from
where
group by 分组字段
order by
各个性别各有多少人?
select xb,count(*) from xsb group by xb;
子查询
子查询
select * from xsb where bj=(select bj from xsb where xm='张三') and xm!='张三';
关联查询(也叫分表查询)
内连接
select * from xsb,cjb where xsb.xh=cjb.xh;
select * from 表1 inner join 表2 on 关联条件 [where 其他条件];(标准写法)
select x.xh,x.xm,c.kch,c.cj
from xsb x,cjb as c -- 简写方式 表1,表2 where 关联条件 and 其他条件
where x.xh=c.xh and x.xm in('张三','李四');
外连接
left join on[~=~](左连接)满足关联条件之外,还会将左边的表进行完全的展示
select x.xh,x.xm,c.kch,c.cj
from xsb x left join cjb c -- 完整展示了left join左边的xsb
on x.xh=c.xh;
right join on[~=~](右连接)满足关联条件之外,还会将右边的表进行完全的展示
select x.xh,x.xm,c.kch,c.cj
from cjb c right join xsb x -- 完整展示right join右边的xsb
on x.xh=c.xh;
全连接 union 都显示,显示left join on 和right join on
select x.xh,x.xm,c.kch,c.cj
from cjb c left join xsb x
on x.xh=c.xh
union
select x.xh,x.xm,c.kch,c.cj
from cjb c right join xsb x
on x.xh=c.xh;
限制结果的输出(limit)
查询年龄最大的3个人的信息
select * from xsb order by nl desc limit 3;
select 5
from 1 如果是1张表就将该表数据查出来,如果是多表,则做笛卡尔积运算生成一张大的表查出来
where 2
group by 3
having 4
order by 6
limit 7
拼接函数
concat()
功能:将多个字符串/字段拼接在一起。如果字段有取空值的情况,整个concat处理后的结果为空。
语法格式:concat(str1,str2,...)

concat_ws()
将多个字符串/字段拼接在一起,使用指定的分隔符。如果字段有取空值的情况,整个结果不会为空,它会忽略空值的内容做后续的拼接。

group_concat()
功能:将多行的字符串/字段按分组整合成一个字符串,必须配合group by 分组来使用。
语法格式:group_concat(要连接的字段 【separator '分隔符'】)
注解:【】里的内容是可选的,如果不指定分隔符,就有一个默认的分隔符:逗号

case when语句
case when 表达式1 then 结果1
when 表达式2 then 结果2
……
【else 默认值】
end

日期函数
