day32、33 MySQL (二)


I know, i know
地球另一端有你陪我




一、SQL

1、简单合并 union

为了提高效率,数据库中大多不会将所有数据存放于一个表中
常见的优化方式是将关键字提取,作为桥梁
将大的表拆分为小的表
此时想要再查询数据,往往需要将多个表放在一起参照
即为 合并

-- 去重
	select * from student
	union 
	select * from score

-- 不去重
	select * from student
	union all
	select * from score

上述两个都是将两个现有表直接上下拼接
要求两个表的字段数相同

2、连接 join on

预备知识:笛卡尔积,即排列组合

1001 李四        数学 1001
1002 王五        数学 1002
1003 赵六        数学 1003

笛卡尔积得到

1001 李四 数学 1001
1001 李四 数学 1002
1001 李四 数学 1003
1001 王五 数学 1001
1001 王五 数学 1002
1001 王五 数学 1003
1001 赵六 数学 1001
1001 赵六 数学 1002
1001 赵六 数学 1003

1、内连接 inner join on

	求得左右表的笛卡尔积,得到一张新的大表
	根据 on 的条件筛选出符合条件的数据,最终显示
	select * from student
	inner join score
	on student.id=score.studentid;

2、左连接 left join 右连接 right join

	左连接:
	在 inner join on 的基础上,补齐左表被筛选下来的属性
	另一边空的位置用 null 补齐
	右连接:
	在 inner join on 的基础上,补齐右表被筛选下来的属性
	另一边空的位置用 null 补齐
--  左连接
	select * from student
	left join score
	on student.id=score.studentid;
--  右连接
	select * from student
	right join score
	on student.id=score.studentid;	

3、判断 if & case

1、if

	格式:if(boolean testCondition, T valueTrue, T valueFalseOrNull)
	select name,if(age is null,18,age) from fgh;

2、case when then

格式:CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END
	select 
	case when sex=1 then '男' when sex=0 then '女' else '未知' end 
	from fgh;
	注:	若是 enum 中,1 代表 1,0 实际是 2
	    关于 sql 中的字符串,尽量使用单引号,避免 java 中需要额外处理

4、备份

1、创建时复制

	create table fgh as select * from student

2、创建空表,插入备份的数据

	create table fgh(
		id int(11),
		name varchar(255),
		age int(11),
		sex enum('0','1')
	) engine innodb;
	insert into fgh select * from student

二、视图 view

类似于一种映射,用于对表的引用
创建方法的方式和 table 类似

	1、可以正常的使用查找
	2、关于增删改,只有一种情况下可以正常使用,即视图和原单表完全相同(对应)
	create view fgh as ...

三、事务

某些时刻,对于一组指令,我们需要他们能够同时生效,或同时失败
一荣俱荣,一损俱损
此时可以使用事务

	其原理是将范围内的指令写入缓冲区
	过程中若发生错误,或接收到特殊指令,将抹除缓冲区
	即相当于范围内的指令未能生效,这个动作叫做 回滚(ROLLBACK)
	若接收到提交指令,则将缓冲区内的指令一并生效

– 开始一个事务 begin
– 回滚 rollback
– 提交 commit

	begin;
	需要处理的指令
	commit;
	
	begin;
	需要处理的指令
	rollback;

Guess you like

Origin blog.csdn.net/qq_41464008/article/details/121183894