mysql客户端命令不需要;分号结束,服务端命令需要分号;结束,sql语句
manipulation操作
DDL 数据定义
DML数据操作语言(增删改)
DCL,主要是数据控制语言,权限问题
DQL数据查询语言
group可以做聚合运算,比如按照男女分类
count()是系统自带的函数
PRI是主键,不为空
主键的数量就是整个表里记录的数量
classid有空的,少了两个NULL,这样就会丢失记录数
求平均年龄,avg
**按照性别分组,group **
统计每个班最大年龄
这里的值最好是有意义的,比如聚合函数或者分组本身,有些数据库,这么写会报错
查男生的平均年龄,分组前过滤和分组后过滤关键字不一样
男生的各个班平均年龄,女生的各个班平均年龄
order by排序
desc倒序
NULL默认排序在最前
加个-,原来的还是从小到大,但是NULL排最后了
同一个 班级的i情况下,可以对年龄再排序
可以多列排序
用别名也可以
也可以不用别名
也可以过滤完再排序
一般页面展示都是要限定下,就可以用limit
正则表达式写法
多表操作
纵向合并,是要字段类型一样,名字可以不一样,现在这两张字段数都不一样,合并不了
union纵向合并
teacher增加了一i个讲师
但是这里只有29条,应该是30条记录,因为union去重
这样可以把自己完全一样的记录去重
横向合并,简单粗暴,笛卡尔乘积,cross join,交叉链接
这个查询方式相当于两个表取交集
先看看老的写法,横向合并,取交集
不明确的列名name,要加哪个表
这个是比较老旧的写法,新的写法如下
inner join代表内链接
可以多张表取交集
可以试试用inner join取老师学生同龄的
同龄的
取交集前后无影响,没有先后次序
内连接相当于取两个表的交集
左外连接和右外链接
学生表有些有老师,有些没老师
A表和B表的交集+A表
取学生表全部,teacherID对应teacher表的
右外连接是由右边表决定
左外链接,右外连接,有方向性,谁在前在后差别很大
年级大于50的讲师
on应该是取交集的条件
应该加上where,对整个结构再次过滤
不要交集就剩下面这些了
TID为空就是不属于交集