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 后面加的字段列表,是全部不一样的才算是重复的

例:原表为:

mysql中英文插件 mysql英文版_字段

当你的查询语句为:

select id,username from student;

查询的结果为:

mysql中英文插件 mysql英文版_mysql_02


起别名 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 条件列表;

条件列表可使用的运算符

mysql中英文插件 mysql英文版_java_03

模糊查询

模糊查询使用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