目前主要使用关系型数据库
关系型数据库模型就是把复杂的数据结构归结于简单的二元关系(即二维表格形式)。在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过这些关联表的表格分类,合并,连接或选取等运算来实现数据的管理。
SQL就是结构化查询语言
用于从数据库中有结构的查询
NoSQL,泛指非关系型数据库
MySQL相关命令
---登录
mysql -uroot -p
---查看表
show databases;
---创建数据库
CREATE DATABASE <数据库名称>;
---退出数据库
quit
一般使用英文小写字母来约定表,多个单词之间使用_
分隔
NULL
,必须有对应的值类型 | 含义 |
---|---|
VARCHAR | 可变的长字符串,可以类比于Java中的String类型 |
INT | 整形,和Java中的int类型一致 |
DOUBLE | 浮点型,和Java中的double类型一致,一般不加长度限制 |
DATETIME | 时间类型,长度为0,格式为YYYY-MM-DD HH:MM:SS,值为2022-12-12 12:12:12 |
BIGINT | 长整型,和Java中的long类型一致 |
英文 | 中文 | SQL | HTTP |
---|---|---|---|
CREATE | 创建 | INSERT(插入) | POST |
READ | 读取 | SELECT(查询) | GET |
UPDATE | 更新 | UPDATE | POST |
DELETE | 删除 | DELETE | DELETE |
create table table_name ( --- 创建表
`id` INT(10) NOT NULL. --- 表单头部格式
`gmt_created` datetime,
PRIMARY KEY (`id`) --- 设置主键
)ENGINE=InnoDB DEFAULT CHARSET=utf8 --- 设置存储引擎和编码方式
drop table table_name;
//或者
drop table if exists table_name;
语法
INSERT TNTO table_name(field1, field2,...,fieldN)
VALUES
(value1,value2,...,valueN);
INSERT INTO
`user` (`id`, `mobile`, `nickname`,`gmt_created`)
VALUES
(1,'13426069530','XXX',now());
// 插入语句简化
INSERT INTO table_name
VALUES
(value1,value2,...valueN);
// 批量插入数据
INSERT INTO table_name
VALUES
(value1,value2,...valueN),
(value1,value2,...valueN);
语法
SELECT field1,field2... FROM table_name; --- 查询指定列的信息
//
SELECT
id,
hero_name
FROM
timi_adc
// 查询所有字段
SELECT * FROM timi_adc;
语法
SELECT * FROM table_name WHERE condition;
// 举例
SELECT
*
FROM
table_name
where
win_rate > 0.5;
语法
SELECT * FROM table_name LIMIT parameter
查询x-y行
SELECT
*
FROM
timi_adc
LIMIT
5,6;
-- 表示从第6行开始查,查6条记录
0-x行z
SELECT * FROM timi_adc LIMIT 5;
查询第x行
SELECT * FROM timi_adc LIMIT 4,1;
和WHERE子句联合使用
SELECT
*
FROM
timi_adc
WHERE
appearance_rate > 0.1
LIMIT
5;
语法
SELECT * FROM table_name ORDER BY field_name;
SELECT
*
FROM
timi_adc
ORDER BY
win_rate;
-- 排序默认按照升序排序,对于int double 从小到大,对于varchar 从字母A-Z,对于datetime,从过去到现在
DESC关键字
SELECT
*
FROM
timi_adc
ORDER BY
win_rate DESC
-- DESC使排序变为逆序
和其他子句连用
Select
*
from
timi_adc
ORDER BY
win_rate DESC
LIMIT
3;
更新:
语法
UPDATE 表名称 SET 列名称 = WHERE 列名称 = 某值
UPDATE语句必须加入WHERE限制条件,否则的话UPDATE 语句就会对整列起作用。
删除语句(DELECT)
语法
DELETE FROM table_name [WHERE Clause]
删除user表中id为4的行:
delete from user where id=4;
删除user表中所有id小于20的数据:
delete from `user` where id < 20;
删除user表中的所有数据:
delete from user;
语法
SELECT * FROM table_name where condition LIKE condition;
%
SQL LIKE 子句中,% 字符来表示任意字符,如果没有使用任何字符LIKE 就相当于=
_
如果记不清全名,可以使用_
来表示
语法
SELECT * FROM tble_name WHERE condition AND/OR condtionB;
有时需要加上()来分割条件
要注意分清逻辑条件
语法
SELECT * FROM table_name WHERE colum IN (condtionA, condtionB);
NOT IN / NOT LIKE
SELECT * FROM timi_adc WHERE NOT IN(condtion);
NULL 不是空值,空值不占空间,NULL占用存储空间
如何处理空值
语法
select colume_name1,COMCAT(column_name2,str,column_name3),column_name4 FROM table_name;
,
分隔如果拼接的值有NULL,则结果一律为NULL,NULL本身特性决定
配合WHERE语句查询
SELECT
id,
CONCAT(hero_name,'的胜率是',win_rate)
FROM
timi_adc
WHERE
id = 3;
别名
查询结果列名叫result
SELECT
id,
CONCAT(hero_name,'的胜率是',win_rate) as result --- 例如
为了保证数据格式的正确性,我们会使用TRIM函数来清理数据
语法
TRIM(str)
示例(⊙﹏⊙)
SELECT
TRIM(hero_name),
TRIM(fever)
FROM
timi_adc
WHERE
id = 20;
语法拓展
trim()函数也可以精准去掉前面或者后面的空格,或者其他的字符
TRIM( BOTH|LEADING|TRALING remove_str FROM str);
例子(⊙﹏⊙)
SELECT
TRIM(
LEADING ' '
FROM
hero_name
)
FROM
timi_adc
WHERE
id = 21;
REPLACE()函数
TRIM()函数不能去除字符串中间的值,使用REPLACE()函数可以
UPDATE table_name
SET colunm_name =
REPLACE(colunm_name,string_find,string_to_replace)
WHERE conditions;
语法
SELECT
*
FROM
TableA LEFT JOIN
TanleB
ON condition;
举例(⊙﹏⊙)
SELECT
*
FROM
teacher
LEFT JOIN course ON teacher.id = course.teacher.id;
表结构设计规范
语法
SELECT
*
FROM
TableA RIGHT JOIN
TableB
ON condition
多表关联
语法
SELECT
*
FROM
TableA
LEFT JOIN TableB ON conditionA
LEFT JOIN TableC ON conditionB;
INNER连接
例如两个表TableA,TableB
查找A,B同时符合某一条件的数据
SELECT
*
FROM
TableA
INNER JOIN TableB
ON
TableA.id = TableB.student_id;
外连接的拓展
指除了A,B重合部分外,如A部分或者B部分
SELECT
*
FROM
TableA
LEFT JOIN TableB ON TableA.id = TableB.student_id
WHERE
TableB.student_id IS NULL;
UNION关键字
SELECT
*
FROM
TableA
LEFT JOIN TableB
ON
TableA.id = TableB.student_id
UNION DISTINCT
SELECT
*
FROM
TableA
RIGHT JOIN TableB 0N TableA.id = TableB.student_id;
相当于AB左右连接
UNION 关键字可以将两个查询语句的结果合并,并去除重复数据
笛卡尔积
cross join
select distinct ... from table_name
cout(列明);
avg(列名) --- 计算该列的平均值
round(avg(列名), 1) --- round指定保留小数位数
--- 我们需要将两个select语句的结果作为一个整体输出
--- UNION 会对两个结果取并集(也就是自动去除重复的结果)
--- UNION ALL 是将所有结果输出
substring_index(str,delim,count)
例如:str = www.liqur.xyz
substring_index(str,’.’,1) 结果就是www
语法
<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列明>)
<窗口函数>的位置,可以放以下两种函数:
功能
注意
原则只能写在select子句中