MySQL学习笔记(二)

这篇博客详细介绍了MySQL查询的各个方面,包括排序(升序、降序)、分组函数、单行处理函数、group by 和 having的使用,以及各种连接查询,如内连接(等值连接、非等值连接、自连接)和外连接。通过实例展示了如何写出完整的DQL语句,解释了笛卡尔积现象,强调了在使用分组函数时避免无效使用和where子句的限制。
摘要由CSDN通过智能技术生成

目录

2、查询(续)

2.3、排序(升序、降序)

2.4、分组函数(多行处理函数)

2.5、单行处理函数 

2.6、group by 和 having

2.7、总结一个完整的DQL语句怎么写

2.8、关于查询结果集的去重

2.9、连接查询

2.10、连接查询的分类

2.11、笛卡尔积现象(笛卡尔乘积现象)

2.12、内连接之等值连接

2.13、内连接之非等值连接

2.14、内连接之自连接

2.15、外连接

2.16、三张表连接查询


2、查询(续)

2.3、排序(升序、降序)

  1. 按照工资升序排,找出员工名和薪资:
    1. select ename,sal from emp order by sal;(默认升序)
    2. select ename,sal from emp order by sal asc;(升序)
    3. select ename,sal from emp order by sal desc;(降序)
  2. 按照工资降序排列,当工资相同的时候按照名字的升序排列:select ename,sal from emp order by sal desc,ename asc;
  3. 按第几列字段排序(不健壮):
    1. select ename,sal from emp order by 2;
    2. select ename,sal from emp order by 1;
    3. select * from emp order by 6;(同select * from emp order by sal;)
  4.  找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排列:select ename,job,sal from emp where job = 'SALESMAN' order by sal desc;
  5. sal别名salary,按salary排序:select ename,sal as salary from emp order by salary;(说明select先执行,order by后执行。)

select 

        字段                        3

from

        表名                        1

where

        条件                        2

order by

        ......                        4

order by是最后执行的。

注意:order by默认是升序,ASC表示升序,DESC表示降序。

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

 

 

2.4、分组函数(多行处理函数)

  • count计数
  • sum求和
  • avg平均值
  • max最大值
  • min最小值

注意:所有的分组函数都是对“某一组”数据进行操作的。

分组函数一共5个。分组函数还有另一个名字:多行处理函数。

多行处理函数的特点:输入多行,最终输出的结果是1行。

分组函数自动忽略NULL。

  1. 找出工资总和:select sum(sal) from emp;
  2. 找出最高工资:select max(sal) from emp;
  3. 找出最低工资:select min(sal) from emp;
  4. 找出平均工资:select avg(sal) from emp;
  5. 找出总人数:
    1. select count(*) from emp;
    2. select count(ename) from emp;
  6. 分组函数自动忽略NULL
    1. select count(comm) from emp;
    2. select sum(comm) from emp;
    3. select sum(comm) from emp where comm is not null;(不需要额外添加这个过滤条件,sum函数自动忽略null。)

 

找出工资高于平均工资的员工:

  1. 平均工资:select avg(sal) from emp;//2073.214286
  2. (错误)select ename,sal from emp where sal>avg(sal);//ERROR 1111 (HY000): Invalid use of group function无效使用了分组函数,因为SQL语句中有一个语法规则,分组函数不可以直接使用在where子句当中。why???因为group by是在where执行之后才会执行的。
  3. (正确)select ename,sal from emp where sal > 2073.214286;
  4. (1+3)select ename,sal from emp where sal > (select avg(sal) from emp);(子查询)

select                5

        ...

from                1

        ...

where                2

        ...

groupby                3

        ...

having                4

        ...

order by                6

        ...

count(*)和count(具体的某个字段):

  • count(*):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关)
  • count(comm):表示统计comm字段中不为NULL的数据总数量。

分组函数也能组合起来用:

  • select count(*),sum(sal),avg(sal),max(sal),min(sal),min(sal) from emp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值