MySQL 进阶语法

select into 语法

在 MySQL 中,SELECT INTO 语法用于将查询结果插入到一个新表或已存在的表中。下面是 SELECT INTO 的

语法示例:

  1. 创建一个新表并将查询结果插入其中:

    CREATE TABLE new_table_name
    SELECT column1, column2, ...
    FROM original_table
    WHERE condition;
    

    这将从 original_table 表中选择满足指定条件的记录,并将结果插入到名为 new_table_name 的新表中。

  2. 将查询结果插入到已存在的表中:

    INSERT INTO existing_table_name (column1, column2, ...)
    SELECT column1, column2, ...
    FROM original_table
    WHERE condition;
    

    这将从 original_table 表中选择满足指定条件的记录,并将结果插入到已存在的 existing_table_name 表中。请确保目标表的结构与查询结果的列一致,否则可能会导致插入失败或出现数据不匹配的情况。

注意事项:

  • 当使用 SELECT INTO 时,被选择的列的数据类型和顺序将基于查询结果自动确定。
  • 在执行 SELECT INTO 语句之前,确保你有足够的权限来创建新表或对已存在的表进行插入操作。
  • 使用 SELECT INTO 语句时,可以添加适当的 WHERE 子句来指定要选择的特定记录。
  • SELECT INTO 可以与其他 SQL 语句(如 JOIN、GROUP BY 等)一起使用,以满足特定的查询需求。
  • SELECT INTO 只能转移数据不转移约束,索引,需要额外创建

请根据具体情况选择适当的 SELECT INTO 语法,并根据查询结果和目标表进行调整。

upsert 语法

在 MySQL 中,没有直接的 UPSERT 语法(即同时执行插入和更新操作)。但是,可以使用其他语句和技巧来实现类似的效果。下面介绍两种常用的方法:

方法一:使用 INSERT INTO ... ON DUPLICATE KEY UPDATE

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE
    column1 = value1,
    column2 = value2,
    ...

注意事项:这种方法首先尝试将数据插入到表中,如果遇到主键冲突或唯一索引冲突时,则会执行更新操作。你需要确保表中的主键或唯一索引设置正确,以便识别重复记录。

方法二:使用 REPLACE INTO

REPLACE INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)

注意事项:这种方法会尝试插入新的数据行,如果发生主键冲突,则会删除已有的冲突行并插入新行。因此,它类似于先删除再插入的操作。注意,使用 REPLACE INTO 时,表必须有主键或唯一索引。

update join 语法

在MySQL中,可以在UPDATE语句中使用JOIN子句执行跨表更新。

方法一:

UPDATE table1
JOIN table2 ON table1.column = table2.column
SET table1.columnToUpdate = newValue
WHERE condition;

在这个示例中,我们使用 UPDATE 语句对 table1 进行更新,并通过 JOINtable2 进行关联。通过指定关联条件 table1.column = table2.column,可以将这两个表相匹配的行进行连接。

然后,我们使用 SET 子句指定要更新的列以及新的值 newValue。你可以根据需要更新多个列。

最后,我们可以使用 WHERE 子句指定更新条件,以便选择性地更新满足条件的行。这是可选的,如果省略 WHERE 条件,将会更新所有匹配的行。

请注意,关联更新的效果会影响到关联表中的数据,因此请谨慎操作。确保你理解关联条件和更新数据的含义,并仔细检查以避免不必要的数据修改或错误更新。

方法二:

UPDATE T1, T2
SET T1.c2 = T2.c2,
	T1.c3 = T2.c3
WHERE T1.id= T2.id AND condition

等同于

UPDATE T1
INNER JOIN T2 ON T1.id = T2.id
SET T1.C2 = T2.C2, 
	T1.C3 = T2.C3
WHERE condition

null 值排序

在 MySQL 中,NULL 值可以使用 ORDER BY 子句进行排序。下面是一些常见的排序方式:

  1. 升序排序(NULL 值排在最前面):
SELECT column_name
FROM table_name
ORDER BY column_name ASC;

这将按升序对列 column_name 进行排序,NULL 值会被排在最前面。

  1. 降序排序(NULL 值排在最后面):
SELECT column_name
FROM table_name
ORDER BY column_name DESC;

这将按降序对列 column_name 进行排序,NULL 值会被排在最后面。

方法一:

SELECT column_name
FROM table_name
ORDER BY ISNULL(column_name), column_name ASC;

通过 column_name 字段排序,null 值字段永远排在最后,然后再通过 column_name 升序或者降序

注意 ISNULL(column_name) 和 column_name ASC 是同一个字段

方法二:

posted @ 2023-06-24 23:46  乔治带你飞  阅读(349)  评论(0)    收藏  举报