• MySQL基础篇【第二篇】| 简单的查询、条件查询、排序查询


    ✅作者简介:大家好我是@每天都要敲代码,一位材料转码农的选手,希望一起努力,一起进步!
    📃个人主页:@每天都要敲代码的个人主页

    🔥系列专栏:MySQL专栏
    💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习

    目录

    一:简单的查询(DQL)

    1. 查询一个字段

    2. 查询多个字段 

    3. 查询全部字段

    4. 计算员工的年薪

    5. 将查询出来的字段显示为中文

    二:条件查询

    1. = 操作符 

    2. <> != 操作符

    3. between … and …操作符

    4. is null

    5. and

    6. or

    7. and 和 or 联合使用

    8. in

    9. not

    10. like

    三:排序查询

    1 .单一字段排序

    2. 手动指定排序顺序

    3. 多个字段排序

    4.  使用字段的位置来排序


    一:简单的查询(DQL)

    语法格式:  

    select 字段名1,字段名2,字段名3,.... from 表名;

    注意:
            (1)任何一条sql语句以 “;” 结尾
            (2)sql语句不区分大小写

    1. 查询一个字段

    例如:查询员工的姓名

    select ename from emp;

    Select语句后面跟的是字段名称,select是关键字,select和字段名称之间采用空格隔开,from表示将要查询的表,它和字段之间采用空格隔开

    2. 查询多个字段 

    例如:查询员工的编号和姓名

    select empno, ename from emp;

    查询多个字段,select中的字段采用逗号间隔即可,最后一个字段,也就是在from前面的字段不能使用逗号了。

    3. 查询全部字段

    例如:查询当前数据库中,emp表中的所有字段;在select语句中可以使用运算符!

    select * from emp;

    采用select * from emp,虽然简单,但是*号不是很明确,建议查询全部字段将相关字段写到select语句的后面;在以后java连接数据库的时候,是需要在java程序中编写SQL语句的这个时候编写的SQL语句不建议使用select *  这种形式,建议写明字段,这样可读性强!

    4. 计算员工的年薪

    例如:列出员工的编号,姓名和年薪

    select empno,ename,sal*12 from emp;

    sal*12看着很不舒服,我们可以用as给查询结果的列重命名,as可省略

    5. 将查询出来的字段显示为中文

    采用as关键字重命名表字段,并且这里的as 是可以省略的!

    注意:字符串必须添加单引号 或者 双引号

               标准sql语句中要求字符串使用单引号括起来;虽然mysql支持双引号,尽量别用!

    1. select empno as '员工编号',ename as '员工姓名',sal*12 as '年薪'from emp;
    2. # 写成双引号的方式,只能在MySQL中运行,不通用;建议写成单引号的方式
    3. select empno "员工编号", ename "员工姓名", sal*12 "年薪" from emp;

     

    二:条件查询

    条件查询需要用到where语句,where必须放到from语句表的后面

    语法格式:
            select 
                字段,字段...
            from
                表名
            where
                条件;

    执行顺序:先from,然后where,最后select

    支持如下运算符:

    1. = 操作符 

    (1)查询薪水为5000的员工

    select empno, ename, sal from emp where sal=5000;

     (2)查询job为MANAGER的员工

    注意:manager字符串,要用单引号或者双引号括起来!

    select empno, ename from emp where job='manager';

    2. <> != 操作符

    (1)查询薪水不等于5000的员工

    注意:对于数值也可以采用单引号或者双引号引起来的,写成'5000'或者“5000”都是可以的,但是不建议这样写!

    1. select empno, ename, sal from emp where sal <> 5000;
    2. select empno, ename, sal from emp where sal != 5000;

     (2)查询工作岗位不等于MANAGER的员工

     select empno, ename, sal from emp where job<>'manager';

    3. between … and …操作符

    between and在使用的时候必须左小右大。

    between and除了可以使用在数字方面(左闭右闭)之外,还可以使用在字符串方面(左闭右开)

    (1)查询薪水为1600到3000的员工

    第一种方法:使用between...and...

    select empno, ename, sal from emp where sal between 1600 and 3000;

     between … and …,它是包含最大值和最小值的;就等价于>= and <=

    第二种方式:使用>= and <=

    select empno, ename, sal from emp where sal >=1600 and sal<=3000;

    (2)查看员工首字母是A到C开头的名字

    select ename from emp where ename between 'A' and 'C';

    4. is null

    null为空,但不是空串,为null可以设置这个字段不填值,空不是一个值,不能用等号衡量。如果查询为null的字段,采用is null;不能采用 =null !

    (1)查询津贴为空null的员工

    (1)首先先使用select * from emp; 查询到所有的comm信息,发现有很多是NULL 

    (2)如果直接只用 =null 是无法查询出符合条件的数据

     (3)应该采用 is null 作为查询条件

    1. select * from emp where comm is null;
    2. select * from emp where comm is not null;

    (2)找出那些员工没有津贴:这就包括为null的和0的

    select * from emp where comm is null or comm=0;

    5. and

    and表示并且的含义,表示所有的条件必须满足

    例如:查询工作岗位为MANAGER,薪水大于2500的员工

    select * from emp where job='manager' and sal >= 2500;

    6. or

    or,只要满足条件即可,相当于包含;满足条件之一即可!

    例如:查询出job为manager或者job为salesman的员工

    select * from emp where job='manager' or job = 'salesman';

    7. and 和 or 联合使用

    找出薪资大于1000的并且部门编号是20或30部门的员工。

    1. select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30);
    2. -- and优先级比or高,要想让or先执行,必须加小括号

    8. in

    in表示包含的意思,完全可以采用or来表示,采用in会更简洁一些

    (1)查询出job为manager或者job为salesman的员工

    使用or:select * from emp where job='manager' or job = 'salesman'; 使用in是:

    select * from emp where job in ('manager','salesman');

    (2)查询出薪水包含1600和薪水包含3000的员工

    select * from emp where sal in(1600,3000);

    9. not

    (1)查询出薪水不包含1600和薪水不包含3000的员工

    第一种写法:使用不等<>

    select * from emp where sal<>1600 and sal <>3000;

    第二种写法: 使用等于= 和 not 联合使用

    select * from emp where not(sal=1600 or sal=3000);

    第三种写法:使用not in

    select * from emp where sal not in(1600,3000);

    (2)查询出津贴不为null的所有员工

    select * from emp where comm is not null;

    10. like

    (1)Like可以实现模糊查询,like支持%和下划线匹配

    (2)Like中%和下划线的差别?

            %匹配任意字符出现的个数

            下划线只匹配一个字符

    (3)Like 中的表达式必须放到单引号中或者双引号中

     (1)查询姓名以M开头所有的员工

    select * from emp where ename like 'M%';

     (2)查询姓名以N结尾的所有的员工

    select * from emp where ename like '%N';

     (3)查询姓名中包含O的所有的员工

    select * from emp where ename like '%O%';

     (4)查询姓名中第二个字符为A的所有员工

    select * from emp where ename like '_A%';

    (5)补充:找出名字中下划线_的;利用转义字符!

    select * from emp where ename like '%\_%';

    三:排序查询

    1 .单一字段排序

    排序采用order by子句,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序,如果存在where子句那么order by必须放到where语句的后面

    (1)按照薪水由小到大排序

    select * from emp order by sal;

    (2)先取得job为MANAGER的员工,再按照薪水由小到大排序

    select * from emp where job='manager' order by sal; 

    (3)按照多个字段排序,如:首先按照job排序,再按照sal排序

    select * from emp order by job,sal;

    2. 手动指定排序顺序

    (1)手动指定按照薪水由小到大排序:asc;默认也是从小到大的!

    select * from emp order by sal asc;

     (2)手动指定按照薪水由大到小排序:desc

    select * from emp order by sal desc;

    3. 多个字段排序

    (1)按照job和薪水倒序

    select * from emp order by job desc,sal desc;

    (2)按照工资的降序排列,当工资相同的时候再按照名字的升序排列

    注意:越靠前的字段越能起到主导作用,只有当前面的字段无法完成排序的时候,才会启用后面的字段

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

    4.  使用字段的位置(下标)来排序

    也就是通过下标进行排序,从1开始,例如sal下标是6,那么按照薪水升序;不健壮,不建议使用

    select * from emp order by 6;
    

    总结:一定要注意执行的顺序

    select 
            字段                     3
    from
            表名                     1
    where
            条件                     2
    order by
            ....                        4
        
    order by是最后执行的!

    结束语

    今天的分享就到这里啦!快快通过下方链接注册加入刷题大军吧!各种大厂面试真题在等你哦!
    💬刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习

  • 相关阅读:
    【面试】对CSS预处理器的理解及与原生CSS的区别
    postgreSQL中将字段从smallint类型改成boolean类型
    操作系统备考学习 day3 (2.1.1 - 2.1.6)
    SparkSql读取外部Hql文件的公共类开发
    分布式事务-TCC
    记一次长连接断开排查过程
    Redis6笔记03 SpringBoot整合Redis,事务和锁机制,持久化操作
    【蓝桥杯】C++研究生组 每个整装待发的重新开始,都为时不晚!
    网关的鉴权功能设计思考
    跨域解决方案
  • 原文地址:https://blog.csdn.net/m0_61933976/article/details/126259962