0
点赞
收藏
分享

微信扫一扫

MySQL数据库笔记<一>

静守幸福 2022-04-14 阅读 70
mysql

SQL分类

DDL(Data Definition Language) 数据定义语言,用来定义数据库对象:数据库、表、列等。
DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改。
DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)。
DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。
【注释语句一般/**/,-- [此处空格不可少], #(MySQL特有)】

DDL—操作数据库

查询SHOW DATABASES;
创建
1.创建数据库:CREATE DATABASE 数据库名称;
2.创建数据库(判断,如果不存在则创建): CREATE DATABASE IF NOT EXISTS 数据库名称;

删除
1.删除数据库:DROP DATABASE 数据库名称;
2.删除数据库(判断,如果存在则删除): DROP DATABASE IF EXISTS 数据库名称;
使用数据库
1.查看当前使用的数据库:SELECT DATABASE();
2.使用数据库:USE 数据库名称;

DDL—操作表

查询
1.查询当前数据库下所有表名称:SHOW TABLES;
2.查询表结构:DESC 表名称;
创建(注意最后一行末尾,不能加逗号)

CREATE TABLE 表名(
			字段名1 数据类型1,
			字段名2 数据类型2,
			...
			字段名n 数据类型n
);

MySQL支持多种类型,可以分为三类:数值、日期、字符串
删除DROP TABLE 表名; DROP TABLE IF EXISTS 表名;
修改
1.修改表名:ALERT TABLE 表名 RENAME TO 新的表名;
2.添加一列:ALERT TABLE 表名 ADD 列名 数据类型;
3.修改数据类型:ALERT TABLE 表名 MODIFY 列名 新数据类型;
4.修改列名和数据类型:ALERT TABLE 表名 CHANGE 列名 新列名 新数据类型;
5.删除列:ALERT TABLE 表名 DROP 列名;

DML

添加数据
1.给指定列添加数据:INSERT INTO 表名(列名1,列名2,...) VALUES(值1, 值2,...);
2.给全部列添加数据(列名的列表可以省略):INSERT INTO 表名 VALUES(值1, 值2,...);
3.批量处理数据:
INSERT INTO 表名(列名1, 列名2,...) VALUES(值1, 值2,...),(值1, 值2,...),(值1, 值2,...)...;
INSERT INTO 表名 VALUES(值1, 值2,...),(值1, 值2,...),(值1, 值2,...)...;

修改数据
UPDATE 表名 SET 列名1=值1,列名2=值2,...[WHERE 条件];
注意:修改语句中如果不加条件,则那个所有数据都修改!

删除数据
DELETE FROM 表名 [WHERE 条件];

DQL

查询语法

SELECT
	字段列表
FROM
	表名列表
WHERE
	条件列表
GROUP BY
	分组字段
HAVING
	分组后条件
ORDER BY
	排序字段
LIMIT
	分页限定

查询时去除重复记录:SELECT DISTINCT 列名 FROM 表名;
查询时给列起别名:SELECT 列名 AS 别名 FROM 表名;

条件查询(WHERE)
条件查询语法:SELECT 字段列表 FROM 表名 WHERE 条件列表;
在这里插入图片描述
1.对数值或者时间范围的查询可以使用:SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 and 值2;
2.查询列信息等于(不等于)某个数值:SELECT * FROM 表名 WHERE 列名 =(!=或者<>) 值1;
3.查询年龄等于18岁或者年龄等于20岁或者年龄等于22岁的学员信息:
SELECT * FROM stu WHERE age=18 OR age=20 OR age=22;
SELECT * FROM stu WHERE age IN (18, 20, 22);
4.null值的比较不能使用=、!= 来比较,需要使用is、is not。
5.模糊查询

通配符:
(1)_:代表单个任意字符
(2)%:代表任意个数字符

1.查询姓‘张’的学员信息:SELECT * FROM stu WHERE name LIKE ‘张%’;
2.查询第二个字是‘三’的学员信息:SELECT * FROM stu WHERE name LIKE ‘_三%’;
3.查询名字中包含‘德’的学员信息:SELECT * FROM stu WHERE name LIKE ‘%德%’;

排序查询(ORDER BY)
排序查询的语法:SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1], 排序字段2 [排序方式2]...;
排序方式:①ASC 升序排列(默认值) ②DESC 降序排列(注意:如果有多个排序条件,当前边的条件值一样时,才会按照第二条件进行排列)
1.查询学生信息,按照年龄升序排列:SELECT * FROM stu ORDER BY age ASC;
2.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列:SELECT * FROM stu ORDER BY math DESC, english ASC;

聚合函数
1.聚合函数:将一列数据作为一个整体,进行纵向计算。
2.聚合函数分类:count的取值一般为主键列或者*,推荐使用count(*);

函数名功能
count(列名)统计数量(一般选用不为null的列)
max(列名)最大值
min(列名)最小值
sum(列名)求和
avg(列名)平均值

3.聚合函数语法:SELECT 聚合函数名(列名) FROM 表;
注意:null值不参与所有聚合函数运算

分组查询(GROUP BY)
分组查询语法:SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 HAVING 分组后条件过滤];

WHERE和HAVING区别:
①执行时机不一样:WHERE是分组之前进行限定,不满足WHERE条件,则不参与分组,而HAVING是分组之后对结果进行过滤。
②可判断的条件不一样:WHERE不能对聚合函数进行判断,HAVING可以。

执行顺序:WHERE > 聚合函数 > HAVING

例1:查询男同学和女同学各自的数学平均分
SELECT sex, AVG(math) from stu GROUP BY sex;
(注意:分组后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义)

例2:查询男同学和女同学的数学平均分,以及各自的人数
SELECT sex AS 性别, AVG(math) AS 平均数,COUNT(*)  AS 人数 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 HAVING COUNT(*) > 2;

分页查询
分页查询语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目;
起始索引:从0开始
计算公式:起始索引=(当前页码-1)*每页显示的条数

举报

相关推荐

0 条评论