MySQL 烹饪笔记

说明

这里的学习过程主要来自于此网站:https://www.mysqltutorial.org/,以前读过什么《MySQL 必知必会》,现在在学数据库系统概论这门课,比起这个时新的网站,其时效性还是差了些,更重要的是,目前看来,这个网站的教程质量很好,并且有示例的数据库,这个示例的数据库的质量也很好。

数据库的脚本我复整了一份 gist:mysqlsampledatabase

这个脚本可以直接复制到 Navicat 中去执行,或者利用 Navicat 导入 sql 脚本。

我目前的数据库版本是 MySQL 8.0.25,可以把脚本复制到 Navicat 中去执行,没有出现问题。

MySQL SubQuery

https://www.mysqltutorial.org/mysql-subquery/

SELECT
lastName, firstName
FROM
employees
WHERE
officeCode IN
(
    SELECT 
    officeCode
    FROM
    offices
    WHERE
    country = 'USA'
);

在这个例子中:

  • 子查询返回所有位于美国的办公室的 office codes
  • 外面的查询 select 在子查询中查询到的办公室工作的员工的 lastName 和 firstName。

然后就是执行一下几个示例。

SELECT 
    customerNumber, 
    checkNumber, 
    amount
FROM
    payments
WHERE
    amount = (SELECT MAX(amount) FROM payments);

SELECT 
    customerNumber, 
    checkNumber, 
    amount
FROM
    payments
WHERE
    amount > (SELECT 
            AVG(amount)
        FROM
            payments);

纠正一个错误的认识:我之前看的不认真,以为可以独立的子查询一定是先于外查询执行的,实际上人家并没有这么说,只有当用到 IN 操作符时,才会这样。

SELECT

ORDER BY

WHERE

SELECT DISTINCT

AND

OR

IN

BETWEEN

LIKE

LIMIT

IS NULL

Table & Column Aliases

Joins

INNER JOIN

LEFT JOIN

RIGHT JOIN

Self Join

CROSS JOIN

GROUP BY

HAVING

ROLLUP

Subquery

https://www.mysqltutorial.org/mysql-subquery/

SELECT
lastName, firstName
FROM
employees
WHERE
officeCode IN
(
    SELECT 
    officeCode
    FROM
    offices
    WHERE
    country = 'USA'
);

在这个例子中:

  • 子查询返回所有位于美国的办公室的 office codes
  • 外面的查询 select 在子查询中查询到的办公室工作的员工的 lastName 和 firstName。

然后就是执行一下几个示例。

SELECT 
    customerNumber, 
    checkNumber, 
    amount
FROM
    payments
WHERE
    amount = (SELECT MAX(amount) FROM payments);

SELECT 
    customerNumber, 
    checkNumber, 
    amount
FROM
    payments
WHERE
    amount > (SELECT 
            AVG(amount)
        FROM
            payments);

纠正一个错误的认识:我之前看的不认真,以为可以独立的子查询一定是先于外查询执行的,实际上人家并没有这么说,只有当用到 IN 操作符时,才会这样。

Derived Tables

EXISTS

UNION

MINUS

INTERSECT

INSERT

Insert Multiple Rows

INSERT INTO SELECT

Insert On Duplicate Key Update

INSERT IGNORE

UPDATE

UPDATE JOIN

DELETE

DELETE JOIN

ON DELETE CASCADE

REPLACE


MySQL 烹饪笔记
http://fanyfull.github.io/2021/12/04/MySQL-烹饪笔记/
作者
Fany Full
发布于
2021年12月4日
许可协议