mysql知识总结1

基础查询

1、查询单表里的所有字段

select * from 某表名

2、查询单表里的某个字段

select 某字段名 from 某表名

3、查询单表里的多个字段

select 某字段名,某字段名 from 某表名

简单处理查询结果

1、查询结果去重 (使用去重关键字distinct)

select distinct 某字段 from 某表名

2、限制返回的行数 (使用limit关键字)

SELECT 语句会返回指定表中所有匹配的行,但有时我们并不想结果返回所有的行,这种情况下可以通过Limit语句限制返回结果行数。Limit语句一般加在SQL语句末尾,并且与数
字搭配,写作Limit N,N代表想要限制返回的行数。
返回前N行:select 某字段名 from 某表名 limit N
返回前N行:select 某字段名 from 某表名 limit 0,N
返回N到M行:select 某字段名 from 某表名 limit M-N+1,offset N-1
注意:偏移量比实际的少1

3、查询后的列重命名-Select查询列后使用了 as 函数

select device_id as user_infos_example from user_profile limit 2

条件查询

1、基础排序,关键字order by,默认升序,进行降序排序, 必须指定DESC 关键字

单列排序:select 某字段 from 某表名 order by 某字段
多列排序:select 某字段,某字段 from 某表名 order by 某字段,某字段 #多列排序以order by后第一个字段为主,第一个字段出 现相同值的时候才会用到后面的字段再次进行排序,如果第一个字段都是不同的值,那后面的字段排序将不会产生作用。
单列降序:select 某字段 from 某表名 order by 某字段 desc
多列降序:select 某字段,某字段 from 某表名 order by 某字段,某字段 desc #注意的一点是,DESC关键字只应用到直接位于其前面的列名。Order By age desc,gpa,那么排序将首先按照age降序排序序,再按照gpa升序排序输出。
eg:多次降序select device_id,gpa,age from user_profile order by gpa desc,age desc;

2、基本操作符

Where语句需要和操作符搭配使用,在前一章节中搭配的通配符是“=”,即等于号,选择合适的操作符可以大大提高查询的效率,下面对常见的操作符进行一些介绍。

不等于号

不等于号在SQL中的写法为 < > 或 !=,代表筛选出不满足某条件的数据。
大于号小于号
大于号SQL中的写法为 > ,小于号为<,代表筛选出大于或小于某个条件的数据。

范围值

范围值限制方法为between n1 and n2,n1和n2为要限制的区间范围,使用中需要注意两点:
一是 and 之前的值 需要小于and 之后的值,不然查询会返回空结果。
二是在hive sql中结果会包括两端值,即如果语句写为 betwen 10 and 20, 那么结果中会包括取值等于10或20的数据。

空值

在表存储的数据类型中,有一类特殊的值叫空值,其定义为当一个字段不包括任何值时,称其包含空值 NULL,空值与字段包含 0、空字符串或仅仅包含空格是不同的概 念。
在对空值进行筛选时,不能用等于号简单的判断是否 ‘= NULL’。SQL 语句有一个特殊的 WHERE 子句,可用来检查具有 NULL 值的列。这个 WHERE 子句就 是 IS NULL 子句。 其语法
如下:
Select device_id,gender,age
From user_profile
Where gender is Null
这条语句可以返回表中所有性别列值为空的用户数据,同样如果我们想要剔除空值数据的话,也需要用一个特殊的WHERE子句,IS NOT NULL,其语法如下:
Select device_id,gender,age
From user_profile
Where gender is Not Null

3、高级操作符:SQL在处理 OR操作符前,优先处理 AND 操作符

AND操作符

在过滤数据时如果我们想结果同时满足多个条件,可以使用 AND 操作符给 WHERE子句附加条件

OR操作符

OR 操作符逻辑与 AND 操作符正好相反,在过滤数据时如果我们想要结果只需满足多个条件中的一个
IN 和 Not IN IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN 取 一组由逗号分隔、括在圆括号中的合法值。
Like操作符——模糊匹配
Like操作符需要和通配符结合使用,一般最常用的通配符是 %, 在搜索串中,%表示任何

高级查询

1、计算函数

AVG

AVG()为平均值函数,通过对表中行数计数并计算其列值之和,求得该列的平均值。 AVG() 可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。
Select avg(gpa) From user_profile

COUNT

COUNT()函数为计数函数,可利用 COUNT()确定表中行的数目或符合特定 条件的行的数目
COUNT()函数有两种使用方式:
使用 COUNT()对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。 使用 COUNT(column)对特定列中具有值的行进行计数,忽略 NULL 值。
SELECT COUNT(age) AS num_cnt FROM user_profile;

MAX

MAX()返回指定列中的最大值。MAX在使用时,()需指定要返回最大值的列名,
SELECT MAX(age) AS max_age FROM user_profile;

MIN

MIN()的功能正好与 MAX()功能相反,它返回指定列的最小值。
SELECT MIN(age) AS min_age FROM user_profile;

SUM

SUM()用来返回指定列值的和(总计)
SELECT SUM(age) AS sum_age FROM user_profile;

取整函数

在一些聚集运算中,容易出现结果为非整数的情况,这时候如果想要限定结果返回的小数位数就可以使用SQL中内置的round函数,语法格式为round(value,n),其中 value代表想要限制小
数位数的字段,n代表想要限制的小数位数。
SELECT round(avg(age),1) AS avg_age FROM user_profile;

2、分组查询

分组计算

理解分组语句最好的办法是从例子出发,我们来看一个例子:
SELECT university,avg(gpa) AS avg_gpa
FROM user_profile
Group By university
在使用Group by时,有一些事项需要注意:

  1. GROUP BY 子句可以包含任意数目的列,因而可以对分组进行嵌套, 更细致地进行数据分组。
  2. 除聚集计算语句外,SELECT 语句中的每一列都必须在 GROUP BY 子句 中同时给出。
  3. 如果分组列中包含具有 NULL 值的行,则 NULL 将作为一个分组返回。 如果列中有多行 NULL 值,它们将分为一组。
  4. GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。
    select
    gender,
    university,
    count(*) as user_num ,
    round(avg(active_days_within_30),1) as avg_active_day,
    round(avg(question_cnt),1) as avg_question_cnt
    from
    user_profile
    group by university,gender
分组过滤:只想要取出某条件的分组,这时就可以用到Having语句

select
university,
round(avg(question_cnt),3) as avg_question_cnt,
round(avg(answer_cnt),3) as avg_answer_cnt
from
user_profile
group by
university
having
(avg(question_cnt)<5 or avg(answer_cnt) <20)

分组排序

如果想让分组查询的结果按照某个特殊的字段进行升序或降序排列,那么应该怎么做呢?分组查询结果也支持排序功能,所需要用到的语句是Order By ,来看语句示例:
SELECT university,avg(active_days_within_30) as avg_active_days
FROM user_profile
Group By university
ORDER BY avg_active_days

可参考:
https://blog.51cto.com/u_13760719/5675749

posted @ 2022-08-18 11:22  冉大猫6666  阅读(62)  评论(0)    收藏  举报