其实很早就开始学习MySQL,因为各种原因耽误了很长时间,对学习的认识不足,疫情封校,navicat出现各种各样的问题,总是都是很打击人的自信心的,所以现在条件好了,大部分问题解决了,那就好好学习叭😊
还是不会排版将就看吧
1.SQL分类
- DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列
- DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
- DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)
- DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
List item
2.DDL
- 操作数据库
SHOW DATABASE//查询数据库
CREATE DATABASE 数据库名称;//创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名称;//加条判断语句
DROP DATABASE 数据库名称;//删除数据库
DROP DATABASE IF EXISTS 数据库名称;/加条判断
USE 数据库名称;//使用数据库
SELECT DATABASE();//查看当前使用的数据库
- 操作表(增删改查)
创建表的常用数据类型
1.int
2.double //score double(总长度,小数点后保留的位数)
3.char和varchar(数据需要的空间少用char)
4.time
SHOW TABLES;//查表
DESC 表名称;//查表结构
create table student (
id int,
name varchar(10),
gender char(1),
birthday date,
score double(5,2),
email varchar(15),
tel varchar(15),
status tinyint
);
DROP TABLE IF EXISTS 表名;//删除表
ALTER TABLE 表名 RENAME TO 新的表名;//修改表名
ALTER TABLE 表名 ADD 列名 数据类型;//增加新的一行
ALTER TABLE 表名 MODIFY 列名 新数据类型;//修改某列类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;//修改名和数据类型
ALTER TABLE 表名 DROP 列名;//删除列
3. DML
- 添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);//给指定列添加数据
INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;//批量添加数据
UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件] ;//修改表的数值,这块要稍加练习
- 条件查询
//重中之重(查询部分)
SELECT * FROM stu; -- 查询所有数据
select name as 姓名,age as 年龄 from stu;
select name age ,name from stu;
select distinct address from stu;//去掉重复记录
//查询年龄大于二十岁的学员
select name,age from stu where age>20;
//查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
select name,age from stu where age>20 and age<30;
select name,age from stu where age between 20 and 30;-- (包括20和30)
//查询入学日期在'1998-09-01' 到 '1999-09-01' 之间的学员信息
select name,age from stu where age between 20 and 30;-- (包括20和30)
//查询年龄不等于18岁的学员信息
select name,age from stu where age <>18;
//查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select name,age from stu where age in (18,20,22);
- 模糊查询
模糊查询使用like关键字,可以使用通配符进行占位:
(1)_ : 代表单个任意字符
(2)% : 代表任意个数字符
//查询姓'马'的学员信息
select name,age from stu where name like "马%";
//查询第二个字是'花'的学员信息
select name,age from stu where name like "_花%";
//查询名字中包含 '德' 的学员信息
select name,age from stu where name like "%德%";
- 排序查询
ASC : 升序排列 (默认值)
DESC : 降序排列
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
//排序查询
//查询学生信息,按照年龄升序排列
select * from stu order by age;
//查询学生信息,按照数学成绩降序排列
select * from stu order by math desc;
//查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc,english asc;
- 聚合函数和分组查询
//聚合函数:将一列数据作为一个整体,进行纵向计算。
//统计班级一共有多少个学生
select count(id) from stu;
select count(*) from stu;
//查询数学成绩的最高分
//分组查询
//查询男同学和女同学各自的数学平均
select sex,avg(math) from stu group by sex;--显示分组名称
//查询男同学和女同学各自的数学平均分,以及各自人数
select sex,avg(math),count(sex) from stu group by sex;
//查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex,avg(math),count(sex) from stu where math>=70 group by sex;
//查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
select sex,avg(math),count(sex) from stu where math>=70 group by sex having count(*)>2;
where 和 having 区别:
执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过
滤。
可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
- 分页查询
//分页查询
//从0开始查询,查询3条数据,每页显示3条数据,查询第1页数据
select * from stu where limit 0,3;
//每页显示3条数据,查询第2页数据
select * from stu where limit 3,3;
//每页显示3条数据,查询第3页数据
select * from stu where limit 6,3;
Navicat的快捷键 1.shift+home或者end选中该行 2.Ctrl+R快速运行