>> 基本命令 打开终端:win + r ,输入 cmd ,按回车 window 系统:盘符切换:直接输入盘符 -> d: 并回车 >> 连接 数据库 mysql -u 用户名 -p
>> 关系型数据库(mysql) >> 非关系型数据库(mongodb、redis)
类比 表格。 >> 关系型数据库中三种关系 一对一关系 一对多关系 多对多关系
>> 什么是 SQL 一种用于管理关系型数据库、与数据库中的数据进行通讯的计算机标准语言。 >> 语言组成 数据定义语言(DDL) 数据查询语言(DQL) 数据操作语言(DML) 数据控制语言(DCL) >> DBMS(数据库管理系统) 数据库河西组成部分,主要完成对数据库的操作与管理。
create database 数据库名;
CREATE TABLE `students` ( `student_id` int(11) NOT NULL AUTO_INCREMENT, `student_name` varchar(20) NOT NULL COMMENT '学生姓名', PRIMARY KEY (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
>> 整数类型 tinyint -- 1字节 int -- 4字节 bigint -- 8字节 >> 浮点数类型 float(m,d) -- 小数,4字节,单精度 double(m, d) -- 8字节,双精度 decimal(m, d) >> 字符类型 char -- 固定长度(0~255) varchar -- 可变长度(0~65535) text -- 长文字 假设 char(4)与varchar(4)的区别 >> 日期 date -- yyyy-mm-dd datetime -- yyyy-mm-dd hh:mm:ss time -- hh:mm:ss timestamp 时间戳
insert into 表名 values (列1值,列2值); insert into 表名 (列1, 列2) values (列1值,列2值); -- 指定列添加数据 insert into 表名 values (列1值,列2值),(列1值,列2值) -- 同时添加多条数据
update 表名 set 列名1=新值, 列名2=新值 where 条件;
delete from 表名 where 条件;
>> 主键:一般是当前表的 id PRIMARY KEY >> 唯一性 unique CREATE TABLE `students` ( `student_id` int(11), `student_name` varchar(20) unique, PRIMARY KEY (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
>> 非空约束 `student_name` varchar(20) NOT NULL COMMENT '学生姓名', >> 默认值 `sex` tinyint(1) DEFAULT '1' COMMENT '1-男 2-女',
`student_id` int(11) NOT NULL AUTO_INCREMENT, -- 不为空 自增
>> 外键约束:表达表和表之间的关系 -- 第一步:创建主表(外键要连接的表,即 班级表) -- 第二步:创建从表(发生依赖关系的表,即需要设置外键的表,即 学生表) CONSTRAINT `students_ibfk_1` FOREIGN KEY (`grades_id`) REFERENCES `grades` (`grades_id`)
– 添加"李四":
INSERT INTO students VALUES (NULL,‘李四’);
– 指定字段添加信息
INSERT INTO students(student_name) VALUES (‘王五’);
– 多条数据添加
INSERT INTO students(student_name) VALUES (‘麻子’),(‘刚娃子’);
– 如果更新的时候不写条件,将会更细所有的数据
UPDATE students SET student_name=‘李雷’;
– 更新指定条件
UPDATE students SET student_name=‘韩梅梅’ WHERE student_id=3;
– 删除id为6的数据
DELETE FROM students WHERE student_id=6;
– 不加条件,全删
DELETE FROM students;
– 删除所有数据,标识列恢复默认值
TRUNCATE TABLE students;
select * | 列名 from 表名 DISTINCT 返回唯一不同的值 [where 条件] [group by 分组名] [having 筛选条件] [order by 排序] [limit 限制结果数量]
投影操作:指定查询的结果中能显示哪些列; 选择操作:指定哪些行出现在结果中; 排序操作:指定查询的结果以什么样的顺序显示
– 查询students表里的所有信息
SELECT DISTINCT garden FROM students;
– 查询学生信息且班级不重复
SELECT * FROM students;
– 选择某些列进行投影
SELECT student_name,age FROM students;
– 别名设置
SELECT student_name AS studentName,age FROM students;
– 简写
SELECT student_name studentName,age FROM students;
>> 单条件 = > < >= >> 多条件 and or >> 范围 between ... and ... / in / not in >> 模糊查询 like 规则: %:任意长度任意字符 _:任意单个字符
– 查询age>8的学生的 student_name,age的信息
SELECT student_name,age FROM students WHERE age>8;
– 查询age>8和sex=1的学生的 student_name,age的信息
SELECT student_name,age FROM students WHERE age>8 AND sex=1;
– 查询age在10和16之间的学生的 student_name,age信息
SELECT student_name,age FROM students WHERE age BETWEEN 10 AND 16;
– 查询grades_id不在(2,4)之间的学生的 student_name,age信息
SELECT student_name,age FROM students WHERE grades_id NOT IN (2,4);
– 找姓李
SELECT student_name,age FROM students WHERE student_name LIKE ‘李%’;
– 找王XX
SELECT student_name,age FROM students WHERE student_name LIKE ‘王__’;
– 带 四 这个字的 ‘%四%’
– 查询电话号码不为空
– is null
– is not null
SELECT student_name,age FROM students WHERE tel IS NOT NULL;
排序:
– 默认升序 asc
SELECT * FROM students ORDER BY age;
– desc 降序
SELECT * FROM students ORDER BY age DESC;
限制
limit 开始位置,指定行数
开始位置是从 0 开始的
SELECT * FROM students LIMIT 2,2;
查询中经常会对数据进行统计,就需要用到聚合函数。 注意: 返回的是单行单列; 不能和普通列一起查询。
/
– 求数量:count()
SELECT COUNT() FROM students;
– 求男生的数量
SELECT COUNT(*) FROM students WHERE sex=1;
– 查询 age 非空的学生数量
SELECT COUNT(age) FROM students;
– 统计 grades_id 没有重复的数量
SELECT COUNT(DISTINCT grades_id) FROM students;
– 求平均值:avg
– 不会计算空值
SELECT AVG(age) FROM students;
– ifnull(字段, 指定值)
SELECT AVG(IFNULL(age, 0)) FROM students;
– 别名设置
SELECT AVG(IFNULL(age, 0)) studentAvg FROM students;
– 求最大值:max
SELECT MAX(age) FROM students;
– 求最小值:min
SELECT MIN(age) FROM students;
– 求和:sum
SELECT SUM(age) FROM students;
将表中的行进行分组,然后在每个分组上应用聚合函数。
– 每个班级有多少人
SELECT grades_id,COUNT(*) FROM students GROUP BY grades_id;
– 每个班级最老的年龄
SELECT grades_id,MAX(age) FROM students GROUP BY grades_id;
– 统计各个班级男女各多少人
SELECT grades_id,sex,COUNT(*) FROM students GROUP BY grades_id,sex;
– 分组统计各个年级的男生人数大于1的
SELECT grades_id,sex,COUNT()
FROM students
WHERE sex=1 – 发生在聚合之前
GROUP BY grades_id,sex
HAVING COUNT()>1; – having 是对聚合之后的数据进行筛选
– 分组统计各个年级的男生人数大于1的,并且按人数进行升序排列
SELECT grades_id,sex,COUNT(*) num
FROM students
WHERE sex=1
GROUP BY grades_id,sex
HAVING num>1
ORDER BY num;
– 分组统计各个年级的男生人数大于1的,并且按人数进行升序排列,然后分页显示
SELECT grades_id,sex,COUNT(*) num
FROM students
WHERE sex=1
GROUP BY grades_id,sex
HAVING num>1
ORDER BY num
LIMIT 0,1;
– 需求:返回学生 王五 的 班级名字
SELECT grades_id FROM students WHERE student_name=‘王五’;
– 子查询
SELECT * FROM grades WHERE grades_id=(SELECT grades_id FROM students WHERE student_name=‘王五’);
– 表联接
SELECT * FROM students
JOIN grades – 连接表
ON students.grades_id=grades.grades_id
WHERE students.student_name=‘王五’