六、MYSQL学习过程问题记录

一、MySQL数据库建表时用引号的问题

 

 

在创建mysql表时,表名和字段名外面的符号 ` 不是单引号,而是英文输入法的反单引号,同键盘~同一位置。

为了避免你的表名和字段名 和数据库SQL中的关键字冲突。但也可以不加

 

二、MySQL语句中包含group by  和join on 时的顺序问题

今天在做每日一练时,查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩 。思路是采用join on 两表联查。但是在第一次两表联查时报错

 

 仔细看sql语句发现没错呀,然后换了一种写法,join student表 on sc表。这时就对了。

 

原因:sql语句中 group by、where、Having、from、join on 等这些有执行先后顺序

参考链接:https://blog.csdn.net/mine_song/article/details/70185744

顺序:

FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE 或 WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP 

 

一、group by

group by主要用于分组,达到对数据的分类更加精确。 group by中存在的列必须是有效的列(即为表的列字段)。同时若在select 中存在,必须在group by中列出,不能使用别名。 group by必须位于where 后,order by前;此外一般与order by一起使用。 group by 会对Null进行单独分组,若为一行则单独一组,若多行,则多行为一组。

二、与having,where的比较
5. 使用group by 后,若想进行再次筛选可以使用having。
6. having是在分组后进行筛选;where是在执行条件后再分组。
7. having对一组数据进行操作;where是对行进行操作。
8.
三、与order by的比较
-**在使用group by时,一般与order by同时使用,执行顺序为:
先group by ,然后order by。

四、在SQL中执行的顺序
1. 先连接from后的数据源(若有join,则先执行on后条件,再连接数据源)。
2. 执行where条件
3. 执行group by
4.执行having
5.执行order by
6.最后select 输出结果。

三、MySQL语句中group by  和max()函数同时使用

场景描述:查询每个部门薪水最高得员工信息

场景分析:

1、查询每个部门——》根据部门使用group by  分组;

2、薪水最高——》对薪水使用max()函数,max(薪水)得到最高薪水。

产生的问题:

如:

部门1  员工1   2000

部门1  员工2   3000

此时由于group by 分组后按照顺序只取第一行记录,即:部门1  员工1   2000,而max()函数是根据相同的部门取薪水中最大值,得到3000。相当于把部门1  员工1   2000 中的2000替换为3000。导致查询的结果有问题。

解决方法:查询时增加一个limit 99999999即可,

如:

描述

有一个员工表dept_emp简况如下:
 
有一个薪水表salaries简况如下:
 
获取每个部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号升序排列,以上例子输出如下:
(注意: Mysql与Sqlite select 非聚合列的结果可能不一样)

 

 

结果语句:

SELECT
    *
FROM
    (
        SELECT
            dept_no,
            dept_emp.emp_no,
            salary
        FROM
            dept_emp
        LEFT JOIN salaries ON salaries.emp_no = dept_emp.emp_no
        ORDER BY
            salary DESC
        LIMIT 9999999
    ) AS a
GROUP BY
    a.dept_no
ORDER BY
    a.dept_no ASC;

例题参考:https://www.nowcoder.com/practice/4a052e3e1df5435880d4353eb18a91c6?tpId=82&&tqId=29764&rp=1&ru=/activity/oj&qru=/ta/sql/question-ranking

问题参考:https://www.jianshu.com/p/650e1f20a0a9

 

posted @ 2021-03-15 13:12  惜阙  阅读(83)  评论(0)    收藏  举报