适合新手初步了解mysql
学会使用可视化
常见mysql可视化工具
https://zhuanlan.zhihu.com/p/406258276
我这里用自己比较常用navicat,所以下面主要用navicat可视化工具进行讲解,你可以自行去选择比较适合自己使用习惯的sql可视化工具
navicat下载
https://www.aliyundrive.com/s/hD1btrGfTNe
连接数据库
连接自己本地的数据库
创建测试数据库
我们可以创建一个专门用于测试的数据库,点击SQL预览也能查看用sql怎么去创建数据库
创建老师表和学生表
老师表
点击sql预览能看到对应的sql语句
CREATE TABLE `demo`.`Untitled` (
`id` int NOT NULL COMMENT '老师id',
`name` varchar(255) NULL COMMENT '老师姓名',
`age` int NULL COMMENT '老师年龄',
`class` varchar(255) NULL COMMENT '老师班级',
`student_id` int NULL COMMENT '学生id',
PRIMARY KEY (`id`)
);
学生表
CREATE TABLE `demo`.`Untitled` (
`id` int NOT NULL COMMENT 'id',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
`age` int NULL DEFAULT NULL COMMENT '学生年龄',
`class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生班级',
PRIMARY KEY (`id`)
);
简单的增删改查
添加信息
1.可以直接进入表里面进行添加(不推荐)
2. 使用sql语句添加数据
查询->新建查询->选择好自己测试的数据库->写sql语句
插入语句知识点
插入语句分为三种
- 完全插入:insert into 表名 values(值1,值2,值3,…)
- 选择插入:insert into 表名(列名1,列名2,列名,3…) values(值1,值2,值3,…)
- 批量插入:insert into 表名 values(值1,值2,值3,…),(值1,值2,值3,…),(值1,值2,值3,…)…
注1:完全插入可以省略列名,但是值必须包含所有字段,批量插入类同
注2:选择插入必须选择需要插入的字段,选择对应字段的值,批量插入类同
插入小练习
- 实现完全插入,往学生表里插入一条学生信息为(id:2,姓名:张三,年龄:18,班级:计科二班)
- 选择插入,往教师表里插入一条教师信息为(id:2,姓名:李老师,年龄:28,班级:计科一班)
- 批量插入,往学生表里插入多条学生信息
(id:3,姓名:李四,年龄:20,班级:计科二班)
(id:4,姓名:王五,年龄:18,班级:计科二班)
(id:5,姓名:赵六,年龄:19,班级:计科二班)
(id:6,姓名:路人甲,年龄:21,班级:计科二班)
(id:7,姓名:路人乙,年龄:22,班级:计科二班)
/*1. 实现完全插入,往学生表里插入一条学生信息为(id:2,姓名:张三,年龄:18,班级:计科二班)*/
INSERT INTO student VALUES (2,"张三",18,"计科二班");
/*2. 选择插入,往教师表里插入一条教师信息为(id:2,姓名:李老师,年龄:28,班级:计科一班)*/
INSERT INTO teacher(id,name,age,class) VALUES (2,"李老师",28,"计科二班");
/*
3. 批量插入,往学生表里插入多条学生信息
(id:3,姓名:李四,年龄:20,班级:计科二班)
(id:4,姓名:王五,年龄:18,班级:计科二班)
(id:5,姓名:赵六,年龄:19,班级:计科二班)
(id:6,姓名:路人甲,年龄:21,班级:计科二班)
(id:7,姓名:路人乙,年龄:22,班级:计科二班)
*/
INSERT INTO student VALUES (3,"李四",20,"计科二班"),(4,"王五",18,"计科二班"),(5,"赵六",19,"计科二班"),(6,"路人甲",21,"计科二班"),(7,"路人乙",22,"计科二班");
修改信息
update 表名 set 列名=‘值’ where 列名=‘范围’
where 1=1(全选)
where 1=2(全不选)
注:不加where条件为修改所有指定列的值
修改小练习
- 将(id:2,name:张三,age:18,class:计科二班)修改name:路人丙
#将(id:2,name:张三,age:18,class:计科二班)修改name:路人丙
UPDATE student SET name="路人丙" WHERE id=2;
删除信息
delete from 表名 where 列名=‘范围’
注:不加where条件为删除所有的值
删除小练习
- 删除教师表里id=2的数据
#删除教师表里id=2的数据
DELETE FROM teacher WHERE id=2;
查询
关键字:
1.or:或
2.and:和
3.having:分组后的附加条件
4.group by:分组
5.order by:排序:asc:正序,desc:倒序
6.in:存在于某个值中
7.not in:不存在与某个值中
8.inner join … on链接多表
9.left join … on:左外连接
10.right join … on:右外连接
11.left(right,inner) out join … on:去重
12.count:计数
13.AVG:平均值
14.sum:求和
15.max:最大值
16.min:最小值
17.like ‘关键字%’:取含有关键字的值
18.distinct:去重
19.round:四舍五入
20.where 1=1:全选
21.where 1=2:全不选
22.limit 1,5:从第二行开始显示5条数据
23.top 10:select top 10 * from 表名:显示前十条数据
24.newid():随机
1.选择查询:
select * from 表名 where 范围
2.完全查询:
select * from 表名
3.模糊查询:
select * from 表名 where 列名 like ‘%value%’(查询包含value的值)
4.排序查询(倒序,默认为正序):
select * from 表名 order by 列名 desc
5.计数查询:
select count as 别名 from 表名
6.求和查询:
select sum(field) as 别名 from 表名
7.平均值查询:
select avg(filed) as 别名 from 表名
8.最大值查询:
select max(filed) as 别名 from 表名
9.最小值查询:
select min(filed) as 别名 from 表名
10.四舍五入查询:
select round(min(filed),要保留的小数位数) as 别名 from 表名
11.去重查询:
select distinct 列名 from 表名
12.分组查询:
select * from 表名 group by 列名
13.多条件查询:
select * from 表名 where 列名=‘范围’ and 列名=‘范围’
14.不确定条件查询:
select * from 表名 where 列名=‘范围’ or 列名=‘范围’
15.多条件分组求值查询:
select 列名,min(filed)from 表名 where 列名=‘范围’ group by 列名 having sum(列名)
16.子查询(子查询的结果作为主查询的条件):
select * from 表名 where=(select id from 表名 where 列名=‘范围’)
17.连表查询(内连接):
select * from 表名 inner join 表名 on 主键=外键(必须有主外键)
18.连表查询(内连接)(去重):
select * from 表名 inner out join 表名 on 主键=外键(必须有主外键)
注:内连接只显示相关联的数据
19.连表查询(左外连接)(显示左表的全部信息和右表相关联的信息):
select * from 表名 left join 表名 on 主键=外键(必须有主外键)
20.连表查询(右外连接)(显示右表的全部信息和左表相关联的信息):
select * from 表名 right join 表名 on 主键=外键(必须有主外键)
21.连表查询(全外连接)(显示两个表中的所有记录):
select * from 表名 full/cross join 表名 on 主键=外键(必须有主外键)
22.说明:几个高级查询运算词
A:union(结合两个结果表并消除其中的重复行而派生出另一个表)
例:select name from 表名1 union select name from 表名2(去除name的重复行)
B:except(通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表)
C:intersect(通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表)
注:当这三个运算符与all一起使用时不消除重复行
简单的查询(上面的比较复杂暂时不教,后续再补)
sql查询小练习
- 查询出所有计科二班的学生
- 查询出大于年龄20的学生
- 查询名字包含"路人"的学生
#查询出所有计科二班的学生
SELECT * FROM student WHERE class='计科二班';
#查询出大于年龄20的学生
SELECT * FROM student WHERE age>20;
#查询名字包含"路人"的学生
SELECT * FROM student WHERE name LIKE "%路人%";