大家好我是程序员_蓝天, 本文是为了方便初学者能够快速学习MySQL,写的可能不是很好,希望大家多多包涵。 每个赞都是我前进的动力
关系型数据库
关系型数据库就是建立在关系模型基础上的数据库,简单来说,关系型数据库是由多张相互连接的二维表组成的数据库。
优点
- 都是使用表结构,格式一致,易于维护
- 使用通用的 SQL 语言操作,使用方便,可用于复杂查询
- 数据存储在磁盘中,安全
SQL 通用语法
- SQL 语言可以单行或多行书写,以分号(;)结尾。
- MySQL 数据库的 SQL 语言不区分大小写,关键字建议使用大写。
- 注释
单行注释: --注释内容或#注释内容(MySQL,特有)
多行注释:/注释内容/
- DDL:操作数据库,表等。
- DML:对表中数据进行增删改
- DQL:对表中数据进行查询
- DCL: 对数据库进行权限控制
-
查询
SHOW DATABASES; -
创建
- 创建数据库
CREATE DATABASE 数据库名称;- 创建数据库(判断,如果不存在则创建)
CREATE DATABASE IF NOT EXISTS 数据库名称; -
删除
- 删除数据库
DROP DATABASE 数据库名称;- 删除数据库(判断,如果不存在则删除)
DROP DATABASE IF NOT EXISTS 数据库名称; -
使用数据库
-
查看当前使用的数据库
SELECT DATABASE(); -
使用数据库
USE 数据库名称;
-
DDL 操作表
-
创建(Create)
CREATE TABLE 表名( 字段名1 类型数据1, 字段名2 类型数据2 …… 字段名n 类型数据n //最好一行不能加, );
注意 double
案例:
```mysql
create table student(
id int,
name varchar(10),
sex char(1),
birthday date,
score double(5,2),
email varchar(64),
tel varchar(15),
status tinyint
);
```
-
查询(Retrieve)
查 mysql 里面的表
use mysql; show tables;查看 mysql 里面的表 func
desc func; -
修改(Update)
1.修改表名
ALTER TABLE 表名 RENNAME TO 新的表名;2.添加一列
ALTER TABLE 表名 ADD 列名 数据类型;3.修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;4.修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;5.删除列
ALTER TABLE 表名 DROP 列名; -
删除(Delete)
1.删除表
DROP TABLE 表名;2.删除表时判断表是否存在
DROP TABLE IF EXISTS 表名;
DML
-
添加(insert)
1.给指定的类添加数据
INSERT INTO 表名(列名1,列名2,……) VALUES(值1,值2,……);案例
INSERT INTO stu(id,name) VALUES(1,'张三');2.给全部列添加数据
INSERT INTO 表名 VALUES(值1,值2,……);案例:
INSERT INTO stu(id,name,birthday,score,email,tel,status) VALUES(2,'李四','男','2003-03-01',88.8,'list@qq.com','14567890890');INSERT INTO stu VALUES(2,'李四','男','2003-03-01',88.8,'list@qq.com','14567890890');3.批量添加数据
INSERT INTO 表名(列名1,列名2,……) VALUES(值1,值2,……),(值1,值2,……); INSERT INTO 表名 VALUES(值1,值2,……),(值1,值2,……),(值1,值2,……); -
修改(update)
1.修改数据表
UPDATE 表名 SET 列名1=值1,列名2=值2,…… WHERE 条件;案例:
update stu set sex='女' where name='张三';update stu set brithday='1999-11-02',score=99.5 where name='张三';如果没写 while 条件就都会全部修改
-
删除(delete)
DELECT FROM 表名 [WHERE 条件];案例:
delect from stu where name='张三';如果没写 while 条件就都会全部删除
DQL
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定
-
基础查询
1.查询多个字段
SELECT 字段列表 FROM 表名; SELECT *FROM 表名; --查询所有数据案例:
select name,age from stu;select *from stu;2.去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;案例:
select distinct id from stu;3.起别名
AS: AS可以省略select name as 姓名,age as 年龄 from stu;select name 姓名,age 年龄 from stu; -
条件查询(WHERE)
1.条件查询语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;案例:
查询年龄大于等于 20,小于等于 30
select * from stu where age>=20 && age<=30;select * from stu where BETWEEN 20 and 30;日期查询
select * from stu where BETWEEN 1990-02-04 and 2003-03-01;查询年龄等于 20
select * from stu where age = 20;查询年龄不等于 20
select * from stu where age != 20; select * from stu where age <> 20;查询年龄 18 或 20 的
select * from stu where age=20 or age=30; select * from stu where age in {18,20};查询 null,要使用 is is not
select * from stu where age is null;查询不为 null
select * from stu where age is not null;2.条件
模糊查询 like
1.查询姓'马'的
```mysql
select * from stu where name like '马%';
```
2.查询第二个字是'花'的同学
```mysql
select * from stu where name like -'花%';
```
3.查询名字中包含'德'的同学
```mysql
select * from stu where name like -'%德%'; --最常用
```
-
分组查询(GROUP BY)
聚合函数
1.概念:将一列数据作为一个整体,进行纵向计算
2.聚合函数分类:
count:统计数量(一般选用部位null的列) max:最大值 min:最小值 sum:求和 avg:平均值3.聚合函数语法
SELECT 聚合函数名(列名) FROM 表;注意:null 值不参与所有聚合函数运算
案例:统计班级有多少学生
select count(id) from stu; --统计列名不能为null select count(*) from stu; --建议使用或者为主键
1.分组查询语法
SELECT 字段列表 FROM 表名 WHERE 分组前条件限定 GROUP BY 分组字段名 HAVING 分组后过滤条件;
注意:分组之后,查询的字段为聚合函数和分组字段,查询任何字段无任何意义。
where 和 having 区别:
1.执行时机不一样:where 是分组之前进行限定,不满足 where 条件,则不参与分组, 而 having 是分组之后对结果进行过滤。
2.可判断条件不一样:where 不能对聚合函数进行判断,having 可以。
执行顺序:where > 聚合函数 > having
案例:
查询男女同学各自数学平均分
select sex, avg(math) from stu group by sex;
select name,sex, avg(math) from stu group by sex; --无意义
查询男女同学各自数学平均分和人数:
select sex, avg(math),count(*) from stu group by sex;
查询男女同学各自数学平均分和人数, 低于 70 不算:
select sex, avg(math),count(*) from stu where math > 70 group by sex;
查询男女同学各自数学平均分和人数, 低于 70 不算, 分组之后大于 2 人:
select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*)>2;
-
排序查询(ORDER BY)
语法:
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 排序方式1,排序字段名2 排序方式2,……;排序方式:
1.ASC: 升序排列(默认值)
2.DESC:降序排列
注意:如果有多个排序条件,当前面的条件值一样时,才会根据第二条件进行排序
案例:
按照年龄升序排序
select *from stu order by age asc;数学成绩按降序排列
select *from stu order by math desc;数学成绩按降序排列, 如果数学成绩一样,再按照英语成绩升序排列
select *from stu order by math desc,english asc; -
分页查询(LIMIT)
语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条数目;起始索引:从 0 开始
计算公式:起始索引 =(当前页码-1)*每页显示条数
tips:
1.分页查询 limit 是 MySQL 数据库的方言
2.Oracle 分页查询使用 rownumber
3.SQL sever 分页查询使用 top
案例:
从 0 开始查询 3 条数据
select * from stu limit 0,3;
每页显示 3 条数据,查询第一页数据
select * from stu limit 0,3;
每页显示 3 条数据,查询第二页数据
select * from stu limit 3,3;
每页显示 3 条数据,查询第三页数据
select * from stu limit 6,3;
原创-程序员_蓝天