文章目录
一、mysql的三大范式二、连表联查1.union2.笛卡尔积3.表连接4.逻辑判断5.连表查询
三、从其他表中加载数据四、视图五、sql执行顺序六、索引七、事务八、在xshell中执行脚本运行sql语句九、总结
一、mysql的三大范式
原子性 字段不可在分割
唯一性 字段必须依赖于主键
冗余性 避免数据量过大
二、连表联查
删除之前的表,创建两个新表,插入数据 student ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200922170052248.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Nzk4NTUw,size_16,color_FFFFFF,t_70#pic_center)
score ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200922165257423.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Nzk4NTUw,size_16,color_FFFFFF,t_70#pic_center)
1.union
union:多个结果集进行合并(纵)
格式:select 字段 from 表名 union 表名;
注意:查询时多张表的字段数量保持一致
直接使用union时,相同的数据只显示一行
使用union all时,相同的数据都会显示
查询结果的列名以第一次sql语句的结果列为准
truncate table student;清空表 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200922170144647.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Nzk4NTUw,size_16,color_FFFFFF,t_70#pic_center)
2.笛卡尔积
前面的数据与后面表的数据每一行去匹配,10*30会变成300行数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200922170656403.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Nzk4NTUw,size_16,color_FFFFFF,t_70#pic_center)
3.表连接
为了减少数据膨胀,在笛卡尔积的基础上增加条件 1个ID对应三科成绩,数据变为30行 join
join中连接条件用on 不用where。left join:左表为准 匹配右表的数据,左表中的数据匹配不到右表的数据就显示null,右边的数据和左表不匹配就不会显示 格式:select 字段 from 表名 left join 表名 on 连接条件;right join:右表为准 匹配左表的数据,右表中的数据匹配不到左表的数据就显示null,右边的数据和左表不匹配就不会显示 格式:select 字段 from 表名 right join 表名 on 连接条件;inner join:两张表的交集 格式:select 字段 from 表名 inner join 表名 on 连接条件;
在原先的student中增加一个学生 “学生”,便于观察结果 左连接 以左表为准,右边没有补空 右连接 以右表为准,学生没有匹配到 内连接 只显示两者共有的,不以某一个为准 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200922185958520.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Nzk4NTUw,size_16,color_FFFFFF,t_70#pic_center)
4.逻辑判断
逻辑判断:case when 判断条件 then 值 [when 判断条件 then]* [else 值] end 格式一: 格式二: 注意:枚举类型判断时,要加上引号,如上的1,0表示男女,判断时需加上引号
5.连表查询
select * from student where id in(select distinct studentid from score where score |