【SQL学习进阶】从入门到高级应用(五)

在这里插入图片描述

🌈你好呀!我是 山顶风景独好
💕欢迎来到我的博客,很高兴能够在这里和您见面!
💕希望您在这里可以感受到一份轻松愉快的氛围!
💕这里不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!

🏠大家订阅本专栏!本专栏旨在为SQL初学者提供一条逐步迈向高级应用的学习之路,带您从零开始,一步一步练习,逐步掌握SQL的精髓,实现技能的提升与飞跃!😊

✨排序操作


排序操作很常用,比如查询学员成绩,按照成绩降序排列。排序的SQL语法:

select .. from .. order by 字段 asc/desc

✨单一字段升序

查询员工的编号、姓名、薪资,按照薪资升序排列。

select empno,ename,sal from emp order by sal asc;

image.png

✨单一字段降序

查询员工的编号、姓名、薪资,按照薪资降序排列。

select empno,ename,sal from emp order by sal desc;

image.png

✨默认采用升序

查询员工的编号、姓名、薪资,按照薪资升序排列。

select empno,ename,sal from emp order by sal;

image.png
查询员工的编号、姓名,按照姓名升序排列。

select empno,ename from emp order by ename;

image.png

✨多个字段排序

查询员工的编号、姓名、薪资,按照薪资升序排列,如果薪资相同的,再按照姓名升序排列。

select empno,ename,sal from emp order by sal asc, ename asc;

image.png

✨where和order by的位置

找出岗位是MANAGER的员工姓名和薪资,按照薪资升序排列。

select ename,sal from emp where job = 'MANAGER' order by sal asc;

image.png
通过这个例子主要是想告诉大家:where先执行,order by语句是最后执行的。

✨distinct去重

查询工作岗位

select job from emp;

image.png
可以看到工作岗位中有重复的记录,如何在显示的时候去除重复记录呢?在字段前添加distinct关键字。

select distinct job from emp;

image.png
注意:这个去重只是将显示的结果去重,原表数据不会被更改。
接下来测试一下,在distinct关键字前添加其它字段是否可以?

select ename, distinct job from emp;

分析一下:ename是14条记录,distinct job是5条记录,可以同时显示吗?
image.png
报错了,通过测试得知,distinct只能出现在所有字段的最前面。
当distinct出现后,后面多个字段一定是联合去重的,我们来做两个练习就知道了:
练习1:找出公司中所有的工作岗位。
image.png
练习2:找出公司中不同部门的不同工作岗位。
image.png

✨数据处理函数


关于select语句,我们之前都是这样写:select 字段名 from 表名; 其实,这里的字段名可以看做“变量”,select后面既然可以跟变量,那么可以跟常量吗,尝试一下:
image.png
通过以上sql的测试得知,select后面既可以跟变量,又可以跟常量。
以上三条SQL中前两条中100和’abc’都是常量,最后一条SQL的abc没有添加单引号,它会被当做某个表的字段名,因为没有这个字段所以报错。

✨字符串相关

✨转大写upper和ucase

# 查询所有员工名字,以大写形式展现
select upper(ename) as ename from emp;

image.png
还有一个和upper函数功能相同的函数ucase,也可以转大写,了解一下即可:

# 查询所有员工姓名,以大写形式展现
select ucase(ename) as ename from emp;

image.png

# 查询员工smith的岗位、薪资(假如你不知道数据库表中的人名是大写、小写还是大小写混合)
select ename, job, sal from emp where upper(ename) = 'SMITH';

image.png

✨转小写lower和lcase

很简单,不再赘述,直接上代码:

# 查询员工姓名,以小写形式展现
select lower(ename) as ename from emp;
select lcase(ename) as ename from emp;

image.png
image.png

✨截取字符串substr

语法:substr(‘被截取的字符串’, 起始下标, 截取长度)
有两种写法:
第一种:substr(‘被截取的字符串’, 起始下标, 截取长度)
第二种:substr(‘被截取的字符串’, 起始下标),当第三个参数“截取长度”缺失时,截取到字符串末尾
注意:起始下标从1开始,不是从0开始。(1表示从左侧开始的第一个位置,-1表示从右侧开始的第一个位置。)
image.png

练习:找出员工名字中第二个字母是A的

select ename from emp where substr(ename, 2, 1) = 'A';

image.png

✨获取字符串长度length

image.png
注意:一个汉字是2个长度。

✨获取字符的个数char_length

image.png

✨字符串拼接

语法:concat(‘字符串1’, ‘字符串2’, ‘字符串3’…)
拼接的字符串数量没有限制。
image.png
注意:在mysql8之前,双竖线||也是可以完成字符串拼接的。但在mysql8之后,||只作为逻辑运算符,不能再进行字符串拼接了。

select 'abc' || 'def' || 'xyz';

mysql8之后,|| 只作为“或者”运算符,例如:找出工资高于3000或者低于900的员工姓名和薪资:

select ename, sal from emp where sal > 3000 || sal < 900;

image.png
mysql中可以使用+进行字符串的拼接吗?不可以,在mysql中+只作加法运算,在进行加法运算时,会将加号两边的数据尽最大的努力转换成数字再求和,如果无法转换成数字,最终运算结果通通是0

✨去除字符串前后空白trim

select concat(trim('    abc    '), 'def');

image.png
默认是去除前后空白,也可以去除指定的前缀后缀,例如:
去除前置0

select trim(leading '0' from '000111000');

image.png
去除后置0

select trim(trailing '0' from '000111000');

image.png
前置0和后置0全部去除

select trim(both '0' from '000111000');

image.png


✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊

🏠 我在CSDN等你哦!我的主页😍

在这里插入图片描述

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值