MySQL - SELECT - 语句

as语句

mysql> select TT.studentno 学号 ,TT.courseno 课程号 ,
    ->          TT.final*0.8+TT.daily*0.2  总评
    -> from  (select *  from score  where final>90) as TT
    -> where TT.final*0.8+TT.daily*0.2>85;

基本限制语句

distinct

DISTINCT 关键词用于返回唯一不同的值。
也就是:自动去重

使用

select distinct studentno,courseno
    -> from score
    -> where daily >90

and

当有两个限制条件时候,使用and连接
使用

   -> where courseno='c08126' and daily between 85 and 100;

范围限制

选择一个范围内的数据
使用

   -> where daily between 85 and 100;

排序、分组和限定记录

order by

对结果集进行排序。
默认是升序排列,(也可用关键字asc表示升序)
如果需要降序,使用desc关键字。

select
from
where
order by column_name,column_name desc;

group by

通过列或表达式的值
将一组行分组为一个小分组的汇总行记录。
GROUP BY子句为每个分组返回一行。
换句话说,它减少了结果集合中的行数。
比如说:对于某大学的全部学生表,如果按照男女分组,就只有两组,返回两行。
使用

select
from
where
group by  column_name

with rollup

在group分组字段的基础上再进行统计数据。
比如说:统计平均分
image
加入该字段后会再统计分组后的平均值
image

group_concat

返回带有来自一个组的连接的非 NULL 值的字符串结果。

使用

GROUP_CONCAT(
distinct
order by
separator
)

distinct:去除重复值
order by:根据字段或表达式进行排序
separator str_val:分隔符(默认为英文逗号)
使用场景
https://shockerli.net/post/mysql-function-group_concat/

  1. 结合 GROUP BY 查询
select column_name,group_concat(column_name)
from
group by column_name;

having count

没有分组的情况下having和Where 类似。
有分组的时候 Where对分组前内容过滤,having是分组后的内容进行筛选。
select xxx from xxxx group by xxxx having count(*) > 2
having作用是将分组后的元素大于2的显示。
使用的限制语句和where一样,where能用having就能用
使用

select
from
where
group by
having

limit

作用:显示从第x行开始,计数y行的信息。
使用

select
from
where
order  by
limit starting_point , end_point;

聚合函数

聚合函数aggregation function。
默认情况下 聚合函数会对当前所在表当做一个组进行统计。
常用于GROUP BY从句的SELECT查询中
特点

  1. 每个组函数接收一个参数(字段名或者表达式) 统计结果中默认忽略字段为NULL的记录
  2. 要想列值为NULL的行也参与组函数的计算,必须使用IFNULL函数对NULL值做转换。
  3. 不允许出现嵌套 比如sum(max(xx))
    left
    作用切割字符的前x个字符
    left(student.studentno,2)='19'
    常用聚合函数
    ROUND(column_name,decimals)
    column_name:要舍入的字段。必须要填。
    decimals 规定要返回的小数位数。可选,缺省值是四舍五入到整数

AVG(col)返回指定列的平均值
COUNT(col)返回指定列中非NULL值的个数
MIN(col)返回指定列的最小值
MAX(col)返回指定列的最大值
SUM(col)返回指定列的所有值之和
GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果

子查询

例:

select studentno,sname,phone,Email
 from student
 where studentno in ( select studentno
                          from score
                          where final>90);

查找score表中所有比c05103课程期末成绩都高的学号、姓名、电话和期末成绩。

mysql> select student.studentno,sname,phone,final
    -> from score inner join student
    -> on score.studentno=student.studentno
    -> where final>all
    -> (select final from score where courseno='c05126');

正则表达式

https://blog.csdn.net/lonelymanontheway/article/details/118197636

posted @ 2022-04-30 10:10  kingwzun  阅读(74)  评论(0编辑  收藏  举报