数据库的操作-mysql-3(表的设计)

1 梳理关系

1.梳理哪些实体 什么样的实体(属性、约束等)

2.梳理实体间的关系(一对一、一对多、多对多、无关)

2 关系详解

2.1一对一

2.2一对多

mysql不支持数组类型,不支持(2)

例子:

(1)class(id=1,name=‘math’)student(sid=1 sname=‘qq’ classid=1,sid=2 sname=‘ww’ classid=1);

(2)class(id=1,name=‘math’,ssid=1,2,..)student(sid=1 sname=‘qq’ ,sid=2 sname=‘ww’ );

redis支持(2)

2.3多对多

一个学生-多门课

一门课-多个学生

3 查询进阶

3.1查询搭配插入

insert into 插入表名 select *from 查询表名;  

查询出的结果集合 列数/类型 要和插入这个表匹配!

3.2聚合查询

  •  count

返回查询到的数据的数量(行数)

count(列名/*)

ps.如果列中有null ,就不记做一行

count(distinct 列名)

ps.distinct - 去重

  • sum

sum(distinct 列名)/(列名表达式)

这一列必须是数字列/以数字形成的字符串,会先将数据尝试转为double,不可以就会报错!

  • avg

avg(distinct 列名)

计算平均值;

  • min/max(distinct 列名)

返回最大最小值;

3.3分组查询

使用group by 分组,针对每个分组,再分别进行聚合查询;

group by:针对指定的列进行分组;

select 列名1,列名2 from 表名 group by 列名1;(查询出每一组中一个代表数据)

select 列名1,列名2聚合函数 from 表名 group by 列名1;

搭配条件(1.2.可以联合使用)

1.分组之前 (where)

查询每个岗位平均工资,排除张三的

where...+group by...

2.分组之后(使用having描述条件)

查询每个岗位平均薪资,排除平均薪资超过两万的

group by...+having...(聚合函数条件)

3.4联合查询/多表查询(重点)

ps.数据量庞大(耗时,耗量)/查询复杂(可读性差)

笛卡尔积组合(表1 m*n ,表2 a*b)

【select * from 表1,表2;】

笛卡尔积列数=m+a

笛卡尔积行数=n*b

连接条件 连接两个表排除非法数据的条件

【select * from 表1,表2 where 表1.列1=表2.列1;】

总体分析步骤:

1.先进行笛卡尔积

2.指定连接条件

3.精简一下列/行

4.再进行group by聚合查询

4 内连接 外连接

如果两张表存在对应关系,那么内连接和外连接是一样的

4.1内连接

1.select * from 表1,表2 where 表1.id=表2.id;

2.select * from  表1 (inner) join  表2 on 表1.id=表2.id;

4.2外连接(当两个表数据出现不完全匹配情况)

左外连接(以左侧表为基准,保留左侧表每个数据都在最终结果,如果未在右侧表查询到,则对应列为NULL)

left join

右外连接(同上,以右侧表为基准)

right join

全外连接(mysql不支持,oracle支持)

5 自连接

1.一张表 自己和自己笛卡尔积 比较行与行之间的关系 ps.需要给表用“表名 as 别名”起别名之后再进行笛卡尔积 否则会重名

2.再进行精细筛选

6 子查询

把多个简单sql语句嵌套成一个复杂的

6.1单行子查询

子查询语句必须返回的是某个数值/一行记录!

6.2多行子查询

子查询返回的是多个记录;

7 合并查询

把多个sql查询的结果集合,合并到一起;

允许把多个不同表的查询结果合并在一起(结果集的列要匹配)

select ..... union select.....(可以去重)

select ..... union all  select.....(不会去重)

 

sql中注释语句  “-- ”/“ # ”

配置项差异 :打开mysql终端属性,目标文件找到“my.ini”文件路径,用记事本打开,修改配置项;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值