4、mysql高阶语句
mysql高阶语句是对复杂的条件进行查询的操作。
排序—order by
- 加了desc表示由大到小
1、查询name和score,地址都是云南西路的按id进行由小到大排序
2、查询name和score,先按hobbid进行排序,再把结果按id进行排序
- 第一段字段必须要有相同的值,第二个字段才有意义。如果先按id排序,再按hobbid排序将毫无意义。
区间判断—and/or
根据where的条件,来对数据进行逻辑的区分,and / or
and表示逻辑且,and的所有条件都要为真
or表示逻辑或,只要有一个条件满足即可
1、查询info表所有信息,分数>80且分数<=90
查询info表所有信息,分数=85或分数=90
区间嵌套
2、查询info表所有信息,分数>80且(分数>90且分数<95)
对结果进行分组查询—group by
group by都是和聚合函数一起使用的
- count():统计函数
- sum():求和
- avg():求平均值
- max():最大值
- min():最小值
1、按hobbid进行分组,查询name(统计name)和hobbid
- 不要使用聚合函数的字段来进行分组。
- 要有多个字段,按照非统计的字段来进行分组。
- 对聚合函数进行过滤,使用having语句
2、,按hobbid进行分组,查询 score(求平均值)和 hobbid
3、按hobbid进行分组,查询 score(求平均值)和 hobbid,然后挑出score平均值大于85的
- 对聚合函数进行过滤,使用having语句
4、先根据where条件过滤出成绩大于等于80的,再查询姓名、性别,按照性别来进行分组,统计姓名
- where只能用在分组之前,不能在分组之后
5、分别统计男生组和女生组的最大成绩和最小成绩
查看指定范围—limit
1、查看从第1行后1行开始,至后面4行,即2-5行
2、显示成绩最高的前三行
数据去重—distinct
1、查询表xy103按address去重的结果
- 需要去重的类型越多,效果越差
设置别名
1、给列名设置别名
- as:设置别名,当表名和列名过长的时候可以使用别名进行替代,尤其是在多表联查时,可以不用申明表名
2、给表名设置别名
表示先给表info设置别名a,表info1设置别名b,查询a的兴趣、地址、性别,当a的姓名=b的姓名的时候。
3、创建表时,根据另一张表的结果,直接创建,但是不能继承主键的约束
- 这种方法只能继承字段、类型等,不能继承主键的约束
通配符—%_
%:表示0个,1个,多个字符,可有可无
_(下划线):表示单个字符
通配符一般是和like一起使用,并且是配和where条件进行过滤
1、%表匹配任意内容
2、匹配 徐x、徐xx和徐x(任意几个x)
- 几个_代表后面几个字符数量
- %_表示任意字符数量
子查询
内查询或者嵌套查询,就是在查询语句当中又嵌套着另一个select。
运行时,先查询子语句,然后把子语句的结果传给主语句进行查询。
子查询的表可以是同一张表,也可以是不同的表。
1、先查询name当分数的值大于85的,然后按查询结果查询name和score
- 前后的条件要一致,多表联查不要超过三张
2、更新info表,设置成绩的值是65,根据子查询的语句,只修改地址有南京的记录的值。
- 注意:子查询和修改不能对一张表,即不能对自己又查询又修改
exists语句
3、用来判断子查询的结果集是否为空
视图表—view
视图是一个虚拟表,数据基于检索的查询结果。
复杂的查询语句,简单化的呈现给用户。
查询视图就可以获取数据,避免找到真正的表,提高了数据安全。
创建试图表
删除试图表
- 如果表info里面更新数据,也会同步更新视图表test1,test1相当于查询的一个快捷方式
view和table的区别
- 存储方式,表都是实际数据,保存在硬盘,视图存储的不是数据行,而是结果的集合。
- 数据更新,更新表可以更新视图,更新视图也可以更新表,一般情况下,视图仅仅用于展示数据。
- 占用空间,表示实际空间,视图不占用数据库的空间,就是一个结果。
- 视图表的主要作用就是把复杂的查询语句简化成一个查询的集合
连接查询
把两个或者三个表的记录行结合起来,基于这些表之间共同的字段,进行数据的拼接,首先确定一
个主表的结果集(主表的列),然后把其他表的进行选择性的连接到主表的结果上。
内连接—inner join
结合两个表之间基于一个字段或者多个字段之间,将两个表中结果进行组合。即取交集。
1、查询表test1和test2中,name相等的交集
左连接—left join
左外连接,在from之后使用left join或者left outer join用关键字来匹配。
左连接以左侧表为基础,接受左表所有的行,并用这些行,与右侧表一起参与,显示左表以及右表
符合条件的行,不满足的显示为null。
2、查询交集,显示左连接左侧表的所有信息;右侧表只显示交集的部分,其余部分为null。
右连接—right join
右外连接,在from之后使用right join或者right outer join用关键字来匹配。
右连接以右侧表为基础,接受右表所有的行,并用这些行,与左侧表一起参与,显示右表以及左表
符合条件的行,不满足的显示为null。
3、查询交集,显示右连接右侧表的所有信息;左侧表只显示交集的部分,,其余部分为null。