1. where和having的区别?
- where和having都可以使用的场景:
当筛选条件在要查询的字段中都有的情况下两者作用的等效的。
select goods_price,goods_name form sw_goods where(having) goods_price >100
当筛选条件不在查询字段中时,只能使用where进行条件过滤。
- 只能使用having不能使用where的场景:
当给字段取别名后,where不能根据别名进行筛选
,where后不能使用聚合函数,where 子句的作用是在对查询结果进行分组前将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚和函数,而having是可以的,having是对结果集进行的过滤,在查询返回以后对查询结果进行的过滤操作。
2. 外连接和内连接
- 内连接:
假设A和B进行内连接,使用内连接的话,只要A表和B表能够匹配上的记录都可以查出来,AB两表没有主副之分。 - 外连接:
A和B 进行外连接,AB表中有一张表示主表,另一张表示副表,看谁外连接谁,来决定谁是主表,主要查询主表中的数据,捎带查询副表,当副表中的数据没有和主表中的数据匹配上,副表就会自动模拟出null与之匹配。
3. union和union all
union和union all区别是,union会自动压缩多个结果集合中的重复结果,并同时会进行默认规则的排序,而union all 则将所有的结果全部显示出来,不管是否重复,且不进行排序。
4. 聚合函数
- 每个组函数接受一个参数;
- 默认情况下,组函数忽略值为null的行,不参与计算;
- 有时会使用关键字distinct剔除字段值重复的条数;
- 组函数不可以嵌套使用;
- 组函数的参数可以是列或函数表达式;
- 一个查询语句中可以有多个聚合函数;
4.1 常用函数
-
GROUP_CONCAT()函数:函数的值等于属于一个组的指定列的所有值,以逗号隔开,并且以字符串表示。
-
str_to_date(str, format):字符串转日期类型。
-
date_format(date, format):时间转字符串
-
INSERT(s1,x,len,s2):字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串。
-
LCASE(s) :将字符串 s 的所有字母变成小写字母。
-
LTRIM(s):去掉字符串 s 开始处的空格。
-
REPLACE(s,s1,s2):将字符串 s2 替代字符串 s 中的字符串 s1。
-
STRCMP(s1,s2):比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1。
-
IFNULL(v1,v2):如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。
-
case when then else end:CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。
CASE expression
WHEN condition1
THEN result1
WHEN condition2
THEN result2
...
WHEN conditionN
THEN resultN
ELSE result
END
网友评论