数据库大体可以分为:
基于标准的SQL的关系型数据库:Oracle、MySQL、SQL Server
不基于SQL实现的非关系型数据库:键值对【memcached、redis】;文档型【 mongodb】;
数据库基本语法(大写均为关键字,不可缺少):
1)登录本地数据库:MYSQL -U 'username' -P 'password' ;
2)显示当前的数据库:SHOW DATABASES;
3)创建数据库:CREATE DATABASE IF NOT EXISTS db_test CHARACTER SET utf8mb4;
4)使用/删除数据库:USE/DROP DATABASE db-name;
5)查看/创建表:DESC/CREATE TABLE table_name;
【基本】增删改查CRUD :Create, Retrieve,Update,Delete
1)多行数据 + 指定列插入:INSERT INTO table_student (id, sn, name) VALUES (?,?,?);
2)删除:-- 删除孙悟空同学的考试成绩
--------------DELETE FROM exam_result WHERE name = '孙悟空';
-- 删除整张表数据
--------------DROP TABLE IF EXISTS table_delete;
3)修改:-- 将孙悟空同学的数学成绩变更为 80 分
---------------UPDATE exam_result SET math = 80 WHERE name = '孙悟空';
4) 指定列的顺序查询:SELECT id, name, english FROM exam_result;
--别名:SELECT column [AS] alias_name [...] FROM table_name;
--去重:SELECT DISTINCT math FROM exam_result;
--排序:SELECT name, math, english, chinese FROM exam_result ORDER BY math;
--条件查询:-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
--------------------SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
--分页查询:- 从 s 开始,筛选出来 n 条结果
--------------------SELECT .. FROM table_name LIMIT n OFFSET s;
表约束:
1)主键是 NOT NULL(不为空) 和 UNIQUE(唯一不重复) 的结合作用,可以省略 NOT NULL。
一般情况下我们把id列设为自增主键:id int PRIMARY KEY auto_increment;
2)外键是关联两张表使用的:FOREIGN KEY (class_id) REFERENCES class(id);
3)聚合(函数)查询:SELECT COUNT/SUM/AVG/MAX/MIN(math) FROM table_score;
4)分组查询:--查询每个角色的最高工资、最低工资和平均工资
-------------------SELECT role,MAX(salary),MIN(salary),AVG(salary) FROM tavle_emp GROUP BY role;
注意:分组后再过滤就不能使用WHERE条件,而要使用HAVING
-----------显示平均工资低于1500的角色和它的平均工资。
-----------SELECT role,MAX(salary),MIN(salary),AVG(salary) FROM tavle_emp GROUP BY role HAVING AVG(salary)<1500;
多表查询:
1.内连接(两种方式)
SELECT 字段 FROM 表1 别名1 INNER JOIN 表2 别名2 ON 连接条件 AND 其他条件;
SELECT 字段 FROM 表1 别名1,表2 别名2 WHERE 连接条件 AND 其他条件;
2)外连接(分为左外连接和右外连接,左侧的表完全显示就叫做左外连接;右边的表完全显示就叫做右外连接)
---左外连接,表1完全显示
SELECT 字段名 FROM 表1 LEFT JOIN 表2 ON 连接条件;
---右外连接,表2完全显示
SELECT 字段名 FROM 表1 RIGHT JOIN 表2 ON 连接条件;
3)自连接(同一张表连接自身进行查询,不同行比较同一列的时候会用到)
SELECT s1.* FROM score s1 JOIN score s2 ON s1.student_id = s2.student_id;
4)子查询(子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询)
SELECT * FROM score WHERE course_id IN (SELECT id FROM course WHERE name='语文' OR name='英文');
SELECT * FROM score sco WHERE NOT EXISTS (SELECT sco.id FROM course cou WHERE (name!='语文' AND name!='英文') and cou.id = sco.course_id);【效率更高】
5)合并查询(在结果集中,使用UNION会自动去重;使用UNION ALL会自动去重)
-------可以看到结果集中出现重复数据
SELECT * FROM course WHERE id<3 UNION ALL SELECT * FROM course WHERE name='英文';
简述数据库三大范式:
范式就是规范,就是关系型数据库在设计表要遵循的三个规范。要满足第二范式必须先满足第一范式,要满足第三范式必须满足第二范式。另外反三范式是指有的时候为了效率,可以设置重复的字段(如订单表总价与订单项单价)。
第一范式:是指数据库表的每一列都是不可分割的基本数据项,同一个列中不能有多个值。
第二范式:是指数据库表的每一行必须可以被唯一区分,(通常利用到的是主键列)。
第三范式:是要求一个数据表中不包含已在其他表中已包含的非关键字信息(通常利用外键,多个表的数据重复,用外键引入)
来源:CSDN
作者:Walter丶
链接:https://blog.csdn.net/WalterBrain/article/details/104443560