ents group by gender;
group by + 聚合函数
eg: 按性别分别统计年龄的平均值
select gender, avg(age) from students group by gender;
group by + having
用来分组查询后指定一些条件来输出查询结果, 作用和where一样,但是只能用于group by
select gender,count() from students group by gender having count()>2;
gounp by + with rollup
with rollup作用: 最后新增一行,来记录当前列里所有记录的总和
连接查询多表查询 join 表连接原理: 笛卡尔积
- 内连接
- 右连接 在内连接的基础上添加右表数据,右表中没有的数据字段使用null填充
- 左连接 在内连接的基础上添加左表数据,右表中没有的数据字段使用null填充
# 笛卡尔积 在其他数据库中内连接和笛卡尔积石油区别的,在mysql中 join 和 inner join 是一样的
select * from table1 [inner] join table2;
条件查询(on子句 过滤笛卡尔积)
语法: select * from table1 inner|left|right join table2 on table1.field = table2.field
自关联
应用场景 区域信息,分类信息(如淘宝分类栏,大类,小类,具体分类)
- 子查询
- 标量子查询 一行一列
子查询的结果是一个标量
eg: 查询大于平年龄的学生
select * from students where age > (select avg(age) from students);
- 列子查询 返回的结果是一列多行
- 行子查询 返回的结果是一行多列
行元素: 将多个字段合成一个行元素,在行级子查询中会使用到行元素
select * from students where (height, age) = (select max(height),max(age) from students);
主查询和子查询的关系
· 子查询是嵌入主查询的
· 子查询要么充当条件,要么作为数据源
· 子查询也是一条完整的select语句
- 事务
事务是多个SQL语句操作的序列,这些操作要么都执行,要么都不执行,如有有一个失败,便回滚到原始状态
应用场景: 充话费,银行转账,地铁卡充值等
- 原子性 Atomicity
- 一致性 Consistency
- 隔离性 Isolation
持久性 Durability
1??只有针对表的insert, update, delete 才能使用事务进行管理
2??终端修改数据的命令会自动触发事务, insert, update, delete
3??如果需要将自动开启的事务改为手动提交 关闭自动 set autocommit=0;
其他
1?? ubuntu mysql 终端无法输入中文解决方法
export LANG=en_US.UTF-8 # 修改本地用户的字符集即可
2?? 数据库默认字符集为utf8 只能存储3个字节的数据,标准的emoji表情是4个字节,所以要支持emoi表情的话就要修改字符集
utf8 --> utf8mb4 # 前提是mysql版本 > 5.5.3
mb4: most byte 4,专门兼容四个字节的,utf8mb4是向下兼容utf8的,即使修改了字符集也不会影响线上数据。
REFER:
58到家数据库30条军规解读