mysql基础(4)

本文介绍了SQL中处理字符串的replace函数用于替换特定字符,concat函数用于合并字符串,以及控制流程的if和case when函数。示例展示了如何根据条件改变数据展示,如将E开头的ID改为jw,如何根据分数显示及格或不及格等。同时强调了if函数的嵌套限制和case when作为更灵活的选择。
摘要由CSDN通过智能技术生成

内容一:字符串运算函数

 例子1 字符串替换---replace函数

把查询id那一列 E开头数据  变成jw开头数据

select id,REPLACE(id,"E","jw") as "员工编号" from  jw03_sale;

例子2: 字符串合并  将两列数据可以合并显示

select concat("陈","冠希")

将员工编号+ 姓名+a商品销量一起显示

select CONCAT(id,name,sales_a) from jw03_sale;

select CONCAT_WS("--",id,name,sales_a) as "个人销量" from jw03_sale;

内容二:  控制流函数(重点)

需求: 根据不同的数据---显示出不同的结果

根据考试分数 >=60  显示及格  否则 显示不及格

解决方案:if() 函数  理解  ifNULL函数  NULLif函数  2.Case  when 函数

If函数

格式1:===》支持嵌套

   if(条件,满足条件值,不满足条件的值)

条件 假   0  NULL  FASLE  其它 TRue

if函数格式

select if(70>=60,"及格","不及格")

例子 if嵌套  先判断是否及格 ,然后再判断是否优秀

select if(85>=60,if(85>=80,"优秀","良好"),"不及格")

应用1: 给表格增加一列  显示学生是否及格

select id,score,if(score>=60,"及格","不及格") as score_result

from jw04_stu8;

应用2: 给表格增加一列  显示学生是否及格 小于80分==》良好,大于等于80 优秀

select id,score,if(score>=60,if(score<80,"良好","优秀"),"不及格") as score_result

from jw04_stu8;

if函数  外层到内层进行解析即可

ifNULL函数  NULLif函数

 ifNULL(参数1,参数2)

含义 如果参数1 不为空则返回参数1            否则  则返回参数2

NULLif(参数1,参数2)

含义:如果 参数1等于参数2 返回NULL       否则返回 参数1

例子 查询worker表

根据 岗位类型  type="A"  数据分析岗位

其它类型   非数据分析岗位

增加1列 没有工资的 工资显示为0

增加1列 没有工资的 工资显示为NULL

select name,

if(type='A',"数据分析岗","非数据岗") as jwtype,

IFNULL(salary,0) as '无工资为0',

NULLIF(salary,null) as '无工资为Null'

from worker;

需求: 在sql if 不建议嵌套太深(不要3层)==》慢查询

解决:  使用 case ..when 解决

格式一:(简单写法)

   Case  字段名字

      When  条件1  then 满足条件1结果

      When  条件2  then 满足条件2结果

      When  条件3  then 满足条件3结果

      ...

      Else  不满足返回默认值

   End

注意:  条件具体的值,只适合相等条件判断,不能进行比较运算!!!

格式二:(搜索写法  解决格式1 问题 可以做比较运算)

 Case  (啥也没有)

      When  条件1  then 满足条件1结果

      When  条件2  then 满足条件2结果

      When  条件3  then 满足条件3结果

      ...

      Else  不满足返回默认值

   End

说明: 这里的条件可以进行比较运算的

例子 1.增加一列 根据班级 结果  显示不同班级别名(幼儿园)

select id,class ,

(

case class

   when "一班"  then "向日葵班"

   when "二班"  then "玫瑰班"

   when "三班"  then "小鸡班"

  else  "老鹰班" end

) as "班级别名"

from jw04_stu8;

例子2. 小于60分 "不及格" 小于80分 良好 其它情况优秀

select

    id,score,

(

case

  when score <60  then "不及格"

  when score <80 then "良好"

  else "优秀"

  end

)  "分数等级"

from jw04_stu8;

补充说明  条件between and 关键字支持的

小结: if和case

   If 简单  不建议嵌套 建议推荐使用case

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where a.score>b.score and a.s#=b.s#; 2、查询平均成绩大于60分的同学的学号和平均成绩; select S#,avg(score) from sc group by S# having avg(score) >60; 3、查询所有同学的学号、姓名、选课数、总成绩; select Student.S#,Student.Sname,count(SC.C#),sum(score) from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、查询没学过“叶平”老师课的同学的学号、姓名; select Student.S#,Student.Sname from Student where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平'); 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002'); 7、查询学过“叶平”老师所教的所有课的同学的学号、姓名; select S#,Sname from Student where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平')); 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名; Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2 from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 60); 10、查询没有学全所有课的同学的学号、姓名; select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course); 11、查询至
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vlepro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值