文章目录
- 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的数据类型:
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聚合函数
-- 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) * 每页条数