目录
一、关系型数据库
1.什么是关系型数据库
关系型数据库是建立在关系模型基础上的数据库
简单来说,关系型数据库是由多张能互相连接的 二维表 组成的数据库
2.主要优点
-  
都是使用表结构,格式一致,易于维护
 -  
使用通用的SQL语言操作,使用方便,可用于复杂查询
 -  
数据存储在磁盘中,安全
 
二、SQL语句
1.简介:
-  
Structured Query Language,简称 SQL
 -  
结构化查询语言,一门操作关系型数据库的编程语言
 -  
定义操作所有关系型数据库的统一标准
 -  
对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”
 
2.SQL通用语法
-  
SQL 语句可以单行或多行书写,以分号结尾
 -  
MySQL数据库的 SQL 语不区分大小写,关键字建议使用大写!(为了好辨识我用的小写,正常应该用大写)
 -  
注释
-  
单行注释: --注释内容或#注释内容(MySQL 特有)
 -  
多行注释:/* 注释内容 */
 
 -  
 
3.SQL语法分类
-  
DDL:(Data Definition Language)数据定义语言,用来定义数据库对象: 数据库,表,列等
-  
操作数据的:库,表等
 
 -  
 -  
DML:(Data Manipulation Language)数据操作语言,用来对数据库中表的数据进行增删改
-  
对表中数据进行增删改
 
 -  
 -  
DQL:(Data Query Language)数据查询语言,用来查询数据库中表的记录(数据)
-  
对表中数据进行查询
 
 -  
 -  
DCL:(Data ControlLanguage)数据控制语言,用来定义数据库的访问权限和安全级别,以及创建用户
-  
对数据库进行权限控制
 
 -  
 
4.DDL
(1)查询库
#查看所有数据库
show databases; 
(2)创建库
#创建数据库
create database 数据库名;
#创建数据库(加判断)
create database if not exists 数据库名; 
(3)删除库
#删除数据库
drop database 数据库名;
#删除数据库(加判断)
drop database if exists 数据库名; 
(4)使用库
#查看当前使用的数据库
select database();
#使用/进入指定数据库
use 数据库名; 
 
(5)查询表
#查看库中所有表
show tables;
#查看表结构
desc 表名; 
(6)创建表
#创建表,最后一行没有,
create table 表名(
    字段名01 数据类型01,
    字段名02 数据类型02,
    字段名03 数据类型03,
    ...
    字段名n 数据类型n
);
create table user(
    id int,
    name varchar(20),
    password varchar(40)
); 
 
(7)删除表
#删除表
drop table 表名;
#删除表(带判断)
drop table if exists 表名; 
 
(8)修改表
#修改表名
alter table 表名 rename 新表名;
#表中添加一列(末尾插入)
alter table 表名 add 列名 数据类型;
#删除指定列
alter table 表名 drop 列名;
#修改数据类型
alter table 表名 modify 列名 新数据类型;
#修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型; 
(9)SQL中的数据类型
分为三类,我举例只是常用的
-  
数值类:
 
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 | 
|---|---|---|---|---|
| TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 | 
| SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 | 
| MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 | 
| INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 | 
| BIGINT | 8 Bytes | 自查 | 自查 | 极大整数值 | 
| FLOAT | 4 Bytes | 自查 | 自查 | 单精度 浮点数值 | 
| DOUBLE | 8 Bytes | 自查 | 自查 | 双精度 浮点数值 | 
| DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 | 
double(数值总长度,小数点保留位数【0-100】)
-  
日期和时间类:
 
| 类型 | 大小 ( bytes) | 范围 | 格式 | 用途 | 
|---|---|---|---|---|
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 | 
| TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 | 
| YEAR | 1 | 1901/2155 | YYYY | 年份值 | 
| DATETIME | 8 | '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' | YYYY-MM-DD hh:mm:ss | 混合日期和时间值 | 
| TIMESTAMP | 4 |   '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC 结束时间是第 2147483647 秒 北京时间:2038-1-19 11:14:07 格林尼治时间: 2038年1月19日 凌晨 03:14:07  | YYYY-MM-DD hh:mm:ss | 混合日期和时间值,时间戳 | 
-  
字符串类型
 
| 类型 | 大小 | 用途 | 
|---|---|---|
| CHAR | 0-255 bytes | 定长字符串(高效但费空间) | 
| VARCHAR | 0-65535 bytes | 变长字符串(低效但省空间) | 
| TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 | 
| TINYTEXT | 0-255 bytes | 短文本字符串 | 
| BLOB | 0-65 535 bytes | 二进制形式的长文本数据 | 
| TEXT | 0-65 535 bytes | 长文本数据 | 
| MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 | 
| MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 | 
| LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 | 
| LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 | 
5.DML
(1)添加数据
#给指定列添加数据
insert into 表名(列名01,列名02,列名03, ... ,列名n) value(值01,值02,值03, ... ,值n);
#给全部列添加数据
insert into 表名 values(值01,值02,值03, ... ,值n);
#批量添加数据
#方式一
insert into 表名(列名01,列名02,列名03, ... ,列名n) values(值01,值02,值03, ... ,值n),(值01,值02,值03, ... ,值n),(值01,值02 ... ,值n)...;
#方式二
insert into 表名 values(值01,值02,值03, ... ,值n),(值01,值02,值03, ... ,值n),(值01,值02,值03, ... ,值n)...; 
 
(2)修改数据
#修改表数据
#注意:如果不加条件判断,则为修改全部数据!
update 表名 set 列名1=值1,列名2=值2,...,列名n=值n [where 条件]
UPDATE user SET id = 10,num = 3, score = 99 WHERE name="张三"; 
 
(3)删除数据
#删除表数据
#注意:如果不加条件,则为删除所有数据!
delete from 表名 [where条件] 
 
 
6.DQL(单表查询)
(1)基础查询
#查询表中所有数据
select * from 表名;
#查询表中多个字段中的数据【多个字段用,隔开】
select 字段列表 from 表名;
#去除重复记录
select distinct 字段列表 表名;
#起别名,AS可以省略
as 别名
#如
select name as 姓名 from user;
select name 姓名 from user; 
(2)条件查询
#基础查询+条件列表
select name from user where id = 3; 
(3)分组查询
#select 聚合函数(列名) from 表名;
#null 值不参与所有聚合函数运算
select avg(score) from user;
#分组查询
#基础查询+(条件)group by 分组字段名 (having 分组后条件)
#分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
#按性别分组,查询平均分
select sex,avg(score) from user group by sex;
#按性别分组,查询平均分和各自的人数
select sex,avg(score),count(*) from user group by sex;
#按性别分组,查询平均分和各自的人数,要求低于60分的不参与平均
select sex,avg(score),count(*) from user where score>60 group by sex;
#按性别分组,查询平均分和各自的人数,要求低于60分的不参与平均,分组后人数要大于2
select sex,avg(score),count(*) from user where score>60 group by sex having count(*) > 2; 
注意点:
-  
分组之后,查询的字段应为聚合函数和分组字段,查询其他字段无任何意义
 
where 和 having的区别:
-  
执行时机:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤.
 -  
限定范围:where 不能对聚合函数进行判断,having可以对聚合函数进行判断
 
-  
执行顺序:where > 聚合函数 > having
 
(4)排序查询
#基础查询+(条件查询)+order by 排序字段名1 排序方式,排序字段名2 排序方式...
#如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
select name,math,chinese from user order by math desc,chinese asc; 
 
(5)分页查询
#基础查询 + limit 起始索引,查询条目数
#起始索引:从0开始
#计算公式:起始索引 = (当前页面-1)*每页显示条数
select * from user limit 0,3;
#每页显示10条数据,查询第3页的数据
select * from user limit 20,10; 
 
分页查询在不同数据库的关键字
-  
Mysql:limit
 -  
Oracle:rownumber
 -  
SQL Server:top
 
(6)条件列表(关键字推荐大写,为了好辨识写的小写)
| 符号 | 说明 | 
|---|---|
| > | 大于 | 
| < | 小于 | 
| >= | 大于等于 | 
| <= | 小于等于 | 
| = | 等于 | 
| <>/!= | 不等于 | 
| between...and... | 在[ ]区间,内容可为日期 | 
| in(a,b,c,d...) | 多选一,满足其一即成立 | 
| like 占位符 (_单个任意字符) (%多个任意字符) | 模糊查询 | 
| is null | 是null | 
| is not null | 不是null | 
| and/&& | 并且(推荐and) | 
| or/|| | 或(推荐or) | 
| not/! | 非 | 
(7)排序方式
| 排序方式 | 说明 | 
|---|---|
| ASC(默认) | 升序 | 
| DESC | 降序 | 
(8)聚合函数
将一列数据作为一个整体,进行纵向计算。
| 函数名 | 说明 | 
|---|---|
| count(列名) | 统计数量(不为null的值,一般推荐主键和*) | 
| max(列名) | 最大值 | 
| min(列名) | 最小值 | 
| sum(列名) | 求和 | 
| avg(列名) | 平均值 | 
三、图形化客户端工具-Navicat
Navicat for MysQL 是管理和开发MySQL或MariaDB 的理想解决方案
这套全面的前端工具为数据库管理、开发和维护提供了一款直观而强大的图形界面
官网: Navicat 中国 | 支持 MySQL、Redis、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理
1.工具的使用
-  
打开Navicat
 -  
文件
 -  
新建连接
 -  
选择mysql/MariaDB都可以
 
-  
设置好连接名和密码即可进行连接
 
点击连接名,右键,新建数据库,之后自己玩吧~
















