mysql-第三天2020.4.29
1.连接条件:
(1)等值连接(左,右,内连接等等)
(2)不等值连接:通过关联字段之间的比较关系连接,而非通过主外键值进行关联
ex)工资与工资等级
2.自连接
应用于:要查询的内容属于同一个表的同一个字段,可以通过自连接来实现,即通过别名,将同一张表视为多张表,关联进行查询
ex)员工的领导的姓名,员工和领导都是员工,就是应用场景之一
3.三张以上的表进行连接,直接在后面追加即可
a left join b on a.id=b.id
left join c on a.id = c.id
*查处结果后,可以抽样验证一下,数据结果的正确性
4.子查询
(1)标量子查询:返回的结果是一个数据(聚合值),单行单列
(2)行子查询:返回的结果是一行(单行多列)
(3)列子查询:返回的结果是一列(对行单列)
(进行比较的时候,一定排出空值)
查询操作符:
in/not in 在(不在)其中 ==》字段 in 数据表子查询
any 任何一个 ==》字段 any 数据表子查询(测试字段值是否大于数据表式子查询结果中的任何一个),也可以用标量子查询,大于最小值即可
all 全部,每个 ==》字段 阿里数据表子查询(测试字段值是否大于数据表或子查询结果集中的每一个值),也可以用标量子查询大于最大值即可
(4)表子查询:返回的结果是一张临时表(对行多列)
from子查询:就是from中的表是一个子查询的结果,注意事项(表引用加别名,子查询列中为聚合函数,则也要加别名)
5.函数
字符串函数
数值函数
日期函数
6.分组合并函数
group_concat()常用
-- GROUP_CANCAT([distinct] str [order by str asc/desc] [separator]) 将group by产生的同一个分组中的值连接起来,返回一个字符串结果。 不分组就是一个组
-- 可去重,可排序,可加自己想要的分隔符
select deptid,
group_concat(distinct empname order by salary desc separator \'|\') -- 字符串的聚合函数,忽略空值,所有的聚合函数都会忽略空值
7.-- 逻辑函数
-- IFNULL(expression, alt_value) 判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
select ifnull(commp,0) from emp;
-- IF(expr1,expr2,expr3) 如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。
select if(salary>1000,salary,\'低于1000\') from emp;
-- if函数:查询每位员工的工资级别:3000及以上为高,1500-3000为中,1500及以下为低
select if(salary>3000,\'高\',if(salary>1500,\'中\',\'低\')) as 工资级别 from emp;
-- 逻辑表达式 case when ...then... else ... end
-- CASE WHEN expr1 THEN expr2 [WHEN expr3 THEN expr4...ELSE expr] END 如果expr1的值为true,则返回expr2的值,如果expr3的值为false,则返回expr4的值...
select empname,salary,
case
when salary > 3000 then \'高\'
when salary >1500 then \'中\'
else \'低\'
end
as 工资级别
from emp;