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时,有一些事项需要注意:
- GROUP BY 子句可以包含任意数目的列,因而可以对分组进行嵌套, 更细致地进行数据分组。
- 除聚集计算语句外,SELECT 语句中的每一列都必须在 GROUP BY 子句 中同时给出。
- 如果分组列中包含具有 NULL 值的行,则 NULL 将作为一个分组返回。 如果列中有多行 NULL 值,它们将分为一组。
- 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