mysql基础
- 一、Mysql和navicat安装包
- 数据库
- 二、SQL
- SQL简介
- SQL通用语法
- SQL分类
- 数据类型
- 对表和数据库的DDL
- 查询
- 基础查询
- 条件查询
- 模糊查询
- 排序查询
- 聚合函数
- 聚合函数分类
- 聚合函数的语法
- 拼接函数
- 分组查询
- 分页查询
- 注意点
一、Mysql和navicat安装包
安装包及安装教程链接:
数据库
- 存储和管理数据的仓库,数据是有组织的进行存储。
- 数据库英文名是 DataBase,简称DB。
MySQL: 开源免费的中小型数据库
二、SQL
SQL简介
- 英文:Structured Query Language,简称 SQL,结构化查询语言
- 操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准,可以使用SQL操作所有的关系型数据库管理系统,以后工作中如果使用到了其他的数据库管理系统,也同样的使用SQL来操作。
SQL通用语法
- SQL 语句可以单行或多行书写,以分号结尾。以分号结尾才是一个完整的sql语句
- MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
- 注释
单行注释: – 注释内容 或 #注释内容(MySQL 特有)
多行注释: /* 注释 */
SQL分类
DDL(Data Definition Language) : 操作(创建、查询、删除)数据库、表
DML(Data Manipulation Language):对表中的数据进行增删改
DQL(Data Query Language):对表中的数据进行查询
DCL:对数据库进行权限控制
数据类型
整型
tinyint : 小整数型,占一个字节,例:状态
int: 大整数类型,占四个字节 用作与id 年龄 ,班级 ,金额(分)
double : 浮点类型 分数 , 包含小数的数据 (慎用 精度丢失)
使用格式: 字段名 double(总长度,小数点后保留的位数)
日期
date : 日期值。只包含年月日 交往纪念日 生日
datetime : 混合日期和时间值。包含年月日时分秒
格式:'2021-12-10 15:10'
字符串
char : 定长字符串。(你知道要存储的数据占多少个字节就可以使用这个) 性别
优点:存储性能高
缺点:浪费空间
eg : name char(10) 如果存储的数据字符个数不足10个,也会占10个的空间
varchar : 变长字符串。 名字,地址....
优点:节约空间
缺点:存储性能低
eg : name varchar(10) 如果存储的数据字符个数不足10个,那就数据字符个数是几就占几个的空间
关于SQL语法的命名规则:
- 下划线命名法
- 布尔类型使用 1 0 来表示
- 表名统一小写
- 表名不用复数
- 建议小数类型使用 decimal 或将小数根据需要的精度乘 10、100 后以整数存储(扩展)
- 字符串若长度固定,使用 char
- 表必备字段 id,gmt_create,gmt_modified(扩展)
对表和数据库的DDL
查询全部的数据库
SHOW DATABASES;
创建数据库,字符集为utf-8
CREATE DATABASE 数据库名称 CHARACTER SET = utf8;;
判断数据库是否存在,不存在则创建
CREATE DATABASE IF NOT EXISTS 数据库名称;
删除数据库
DROP DATABASE IF EXISTS 数据库名称;
使用数据库
USE 数据库名称;
查看当前使用的数据库
SELECT DATABASE();
查询当前数据库下所有表名称
SHOW TABLES;
查询表结构
DESC 表名称;
创建表:
CREATE TABLE 表名 (
字段名1 数据类型1,
字段名2 数据类型2,
字段名n 数据类型n
);
修改表名:
alter table 表名 rename to 新表名;
表中添加一列
alter table 表名 add 列名 数据类型;
修改表中列的数据类型
alter table 表名 modify 列名 新的数据类型;
修改列名和数据类型
alter table 表名 change 列名 新类名 新数据类型;
删除列
alter table 表名 drop 列名;
查询
基础查询
给制定的列添加元素
insert into 表名(列名1,列名2...) values(值1,值2...);
给全部的列添加元素
insert into 表名 values(值1,值2...);
批量添加元素
insert into 表名 (列名1,列名2...) values(值1,值2...),(值1,值2...);
insert into 表名 values (值1,值2...),(值1,值2...);
修改表中的元素
update 表名 set 列名1=值1 where 条件;
注意:update 修改值时,不加条件会把全部的值修改掉
删除数据
delete from 表名 [where 条件];
查询元素完整语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定
查询某些元素
select 列名1,列名2 from 表名;
查询不重复元素
select distinct 字段列表 from 表名;
注意:当你distinct 后面加的字段列表,是全部不一样的才算是重复的
例:原表为:
当你的查询语句为:
select id,username from student;
查询的结果为:
起别名 AS (也可以省略)
select * from student s where s.id=1001;
select * from student AS s where s.id=1001;
注意:在使用select 时,最好直接使用字段列表,这样可以加注释
例:
select id,-- 序列号
username,-- 用户名
password-- 密码
from student;
条件查询
语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件列表可使用的运算符
模糊查询
模糊查询使用like关键字,可以使用通配符进行占位:
- _ : 代表单个任意字符
- % : 代表任意个数字符
例:
select * from stu s where name like '马%';
select * from stu s where name like '_运';
排序查询
关键字:order by
desc:降序
asc:升序
select 字段列表 from 表名 order by 字段 desc;-- 降序
select 字段列表 from 表名 order by 字段 asc;-- 升序
当要排序的字段出现重复时,加上,后面在加上重复元素要遵守的排序规则
按照java成绩降序排序,当java成绩一样时,按照c++的成绩升序排序
select * from stu order by java desc, c++ asc ;
聚合函数
将一列数据作为一个整体,进行纵向计算
例如:当你要计算学生成绩表中的java成绩的总和,就可以使用函数,这就是对java成绩的纵向计算。
聚合函数分类
函数名 | 功能 |
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
聚合函数的语法
SELECT 聚合函数名(列名) FROM 表;
求和:
select sum(列名) from stu;
求平均值:
select avg(列名) from stu;
求个数:
select count(列名) from stu;
假如所求个数的列中有null,则不会计算该行
求最大值
select max(列名) from stu;
求最小值
select min(列名) from stu;
拼接函数
concat()
用法 concat('aaa','bbb');
分组查询
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
例:
select sex,avg(age) from stu group by sex;-- 以性别分组,并且计算每组的平均年龄
查询满足数学成绩大于70的性别、计算他们的平均数学成绩、组内个数并以性别分组且组里所含个数大于2
select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
where 和 having 区别:
- 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
- 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
分页查询
分页查询的语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
注意: 上述语句中的起始索引是从0开始
起始索引计算公式:
起始索引 = (当前页码 - 1) * 每页显示的条数
例:
每页显示3条数据,查询第3页的数据
select * from 表名 limit 6,3;
注意点
group by、having、order by的使用顺序:group by 、having、order by