文章目录

  • 1. MySQL简介
  • 2.MySQL操作数据库
  • 2.1 MySQL创建数据库
  • 2.2 MySQL查看、选择数据库
  • 2.3 MySQL修改数据库
  • 2.4 MySQL删除数据库
  • 3. MySQL操作数据表
  • 3.1 MySQL创建表
  • 3.2 MySQL复制表结构
  • 3.3 MySQL查看表
  • 3.4 MySQL删除表
  • 3.5 MySQL修改表名
  • 3.6 MySQL添加列
  • 3.7 MySQL修改列名称
  • 3.8 MySQL删除列
  • 3.9 MySQL插入数据
  • 3.10 MySQL更改数据
  • 3.11 MySQL删除数据
  • 3.12 MySQL简单查询
  • 3.13 MySQL条件查询
  • 3.14 MySQL模糊查询
  • 4. MySQL单表查询
  • 4.1 MySQL单列排序
  • 4.2 MySQL组合排序
  • 4.3 MySQL聚合函数
  • 4.4 MySQL分组
  • 4.5 MySQLlimit关键字


1. MySQL简介

数据库(DataBase) 是按照数据结构来组织、存储和管理数据的仓库。
数据库是一个数据的集合。
其本质是一个文件系统,以文件的方式,将数据保存在电脑上。

Mysql的数据类型:

MYSQL学习计划表推荐 mysql 教学_查询数据

2.MySQL操作数据库

2.1 MySQL创建数据库

-- 方式1 直接指定数据库名进行创建
CREATE DATABASE db1;

/*
方式2 指定数据库名称,指定数据库的字符集
一般都指定为 utf8
*/
CREATE DATABASE db1 CHARACTER SET utf8;

2.2 MySQL查看、选择数据库

-- 切换数据库 从db1 切换到 db1_1
USE db1_1;
-- 查看当前正在使用的数据库
SELECT DATABASE();
-- 查看Mysql中有哪些数据库
SHOW DATABASES;
-- 查看一个数据库的定义信息
SHOW CREATE DATABASE db1_1;

2.3 MySQL修改数据库

-- 将数据库db1 的字符集 修改为 utf8
ALTER DATABASE db1 CHARACTER SET utf8;
-- 查看当前数据库的基本信息,发现编码已更改
SHOW CREATE DATABASE db1;

2.4 MySQL删除数据库

-- 删除某个数据库
DROP DATABASE db1_1;

3. MySQL操作数据表

3.1 MySQL创建表

格式:

CREATE TABLE 表名(
	字段名称1 字段类型(长度),
	字段名称2 字段类型 注意 最后一列不要加逗号
);

示例:

-- 创建测试表
CREATE TABLE test1(
	tid INT,
	tdate DATE
);

3.2 MySQL复制表结构

-- 创建一个表结构与 db1 相同的 db2 表
CREATE TABLE db2 LIKE db1;
-- 查看表结构
DESC db2;

3.3 MySQL查看表

-- 查看当前数据库中的所有表名
SHOW TABLES;
-- 显示当前数据表的结构
DESC category;
-- 查看创建表的SQL语句
SHOW CREATE TABLE category;

3.4 MySQL删除表

-- 直接删除 db1 表
DROP TABLE db1;
-- 先判断 再删除db2表
DROP TABLE IF EXISTS db2;

3.5 MySQL修改表名

-- rename table 旧表名 to 新表名;
RENAME TABLE category TO category1;

3.6 MySQL添加列

-- alter table 表名 add 字段名称 字段类型
# 为分类表添加一个新的字段为 分类描述 cdesc varchar(20)
ALTER TABLE category ADD cdesc VARCHAR(20);

3.7 MySQL修改列名称

-- alter table 表名 change 旧列名 新列名 类型(长度);
ALTER TABLE category CHANGE cdesc description VARCHAR(30);

3.8 MySQL删除列

-- alter table 表名 drop 列名;
ALTER TABLE category DROP description;

3.9 MySQL插入数据

-- insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);
-- 方式1: 插入全部字段, 将所有字段名都写出来
INSERT INTO student (sid,sname,age,sex,address) VALUES(1,'孙悟
空',20,'男','花果山');
-- 方式2: 插入全部字段,不写字段名
INSERT INTO student VALUES(2,'孙悟饭',10,'男','地球');
-- 方式3:插入指定字段的值
INSERT INTO category (cname) VALUES('白骨精');

注意:

  • 值与字段必须要对应,个数相同&数据类型相同
  • 值的数据大小,必须在字段指定的长度范围内
  • varchar char date类型的值必须使用单引号包裹。
  • 如果要插入空值,可以忽略不写,或者插入null
  • 如果插入指定字段的值,必须要上写列名

3.10 MySQL更改数据

-- update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值 ]
# 示例:
-- 不带条件修改,将所有的性别改为女(慎用!!)
UPDATE student SET sex = '女';
-- 带条件的修改,将sid 为3的学生,性别改为男
UPDATE student SET sex = '男' WHERE sid = 3;
-- 一次修改多个列, 将sid为 2 的学员,年龄改为 20,地址改为 北京
UPDATE student SET age = 20,address = '北京' WHERE sid = 2;

3.11 MySQL删除数据

  • 删除所有数据
-- delete from 表名
DELETE FROM student;
  • 指定条件 删除数据
-- delete from 表名 [where 字段名 = 值]
DELETE FROM student WHERE sid = 1;

删除表中的所有数据,有两种做法
①delete from 表名; 不推荐. 有多少条记录 就执行多少次删除操作. 效率低
②truncate table 表名: 推荐. 先删除整张表, 然后再重新创建一张一模一样的表. 效率高当一个表中条数非常多,又要做删除动作的时候,如果用delete会很慢,那我们可以使用truncate

truncate table student;

3.12 MySQL简单查询

-- select 列名 from 表名
SELECT * FROM emp; -- 使用 * 表示所有列

-- 查询emp表中的所有记录,仅显示id和name字段
SELECT eid,ename FROM emp;

-- 将所有的员工信息查询出来,并将列名改为中文
# 使用 AS关键字,为列起别名
SELECT
	eid AS '编号',
	ename AS '姓名' ,
	sex AS '性别',
	salary AS '薪资',
	hire_date '入职时间', -- AS 可以省略
	dept_name '部门名称'
FROM 
	emp;
	
-- 使用distinct 关键字,去掉重复部门信息
SELECT DISTINCT dept_name FROM emp;

-- 运算查询
SELECT ename , salary + 1000 FROM emp;

3.13 MySQL条件查询

# 查询员工姓名为黄蓉的员工信息
SELECT * FROM emp WHERE ename = '黄蓉';

# 查询薪水价格为5000的员工信息
SELECT * FROM emp WHERE salary = 5000;

# 查询薪水价格不是5000的所有员工信息
SELECT * FROM emp WHERE salary != 5000;
SELECT * FROM emp WHERE salary <> 5000;

# 查询薪水价格大于6000元的所有员工信息
SELECT * FROM emp WHERE salary > 6000;

# 查询薪水价格在5000到10000之间所有员工信息
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;

# 查询薪水价格是3600或7200或者20000的所有员工信息
-- 方式1: or
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
-- 方式2: in() 匹配括号中指定的参数
SELECT * FROM emp WHERE salary IN(3600,7200,20000);

3.14 MySQL模糊查询

% 表示匹配任意多个字符串,
_ 表示匹配 一个字符

# 查询含有'精'字的所有员工信息
SELECT * FROM emp WHERE ename LIKE '%精%';

# 查询以'孙'开头的所有员工信息
SELECT * FROM emp WHERE ename LIKE '孙%';

# 查询第二个字为'兔'的所有员工信息
SELECT * FROM emp WHERE ename LIKE '_兔%';

# 查询没有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NULL;
-- SELECT * FROM emp WHERE dept_name = NULL;

# 查询有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NOT NULL;

4. MySQL单表查询

4.1 MySQL单列排序

-- 默认升序排序 ASC
SELECT * FROM emp ORDER BY salary;
-- 降序排序
SELECT * FROM emp ORDER BY salary DESC;

4.2 MySQL组合排序

-- 组合排序
SELECT * FROM emp ORDER BY salary DESC, eid DESC;

4.3 MySQL聚合函数

MYSQL学习计划表推荐 mysql 教学_插入数据_02

-- SELECT 聚合函数(字段名) FROM 表名

#1 查询员工的总数
-- 统计表中的记录条数 使用 count()
SELECT COUNT(eid) FROM emp; -- 使用某一个字段
SELECT COUNT(*) FROM emp; -- 使用 *
SELECT COUNT(1) FROM emp; -- 使用 1,与 * 效果一样
-- 下面这条SQL 得到的总条数不准确,因为count函数忽略了空值
-- 所以使用时注意不要使用带有null的列进行统计
SELECT COUNT(dept_name) FROM emp;

#2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值
-- sum函数求和, max函数求最大, min函数求最小, avg函数求平均值
SELECT
SUM(salary) AS '总薪水',
MAX(salary) AS '最高薪水',
MIN(salary) AS '最低薪水',
AVG(salary) AS '平均薪水'
FROM emp;

#3 查询薪水大于4000员工的个数
SELECT COUNT(*) FROM emp WHERE salary > 4000;

#4 查询部门为'教学部'的所有员工的个数
SELECT COUNT(*) FROM emp WHERE dept_name = '教学部';

#5 查询部门为'市场部'所有员工的平均薪水
SELECT
AVG(salary) AS '市场部平均薪资'
FROM emp
WHERE dept_name = '市场部';

4.4 MySQL分组

-- SELECT 分组字段/聚合函数 FROM 表名 GROUP BY 分组字段 [HAVING 条件];
-- 按照性别进行分组操作
SELECT * FROM emp GROUP BY sex; -- 注意 这样写没有意义
SELECT sex, AVG(salary) FROM emp GROUP BY sex;

#1.查询每个部门的平均薪资
SELECT
dept_name AS '部门名称',
AVG(salary) AS '平均薪资'
FROM emp GROUP BY dept_name;

#2.查询每个部门的平均薪资, 部门名称不能为null
SELECT
dept_name AS '部门名称',
AVG(salary) AS '平均薪资'
FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name;

# 查询平均薪资大于6000的部门
-- 需要在分组后再次进行过滤,使用 having
SELECT
dept_name ,
AVG(salary)
FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name HAVING
AVG(salary) > 6000 ;

4.5 MySQLlimit关键字

作用
limit是限制的意思,用于 限制返回的查询结果的行数 (可以通过limit指定查询多少行数据)
limit 语法是 MySql的方言,用来完成分页

# 查询emp表中的前 5条数据
-- 参数1 起始值,默认是0 , 参数2 要查询的条数
SELECT * FROM emp LIMIT 5;
SELECT * FROM emp LIMIT 0 , 5;

# 查询emp表中 从第4条开始,查询6条
-- 起始值默认是从0开始的.
SELECT * FROM emp LIMIT 3 , 6;

-- 分页操作 每页显示3条数据
SELECT * FROM emp LIMIT 0,3; -- 第1页
SELECT * FROM emp LIMIT 3,3; -- 第2页 2-1=1 1*3=3
SELECT * FROM emp LIMIT 6,3; -- 第三页

-- 分页公式 起始索引 = (当前页 - 1) * 每页条数