首页 > 数据库 >MySQL 进阶语法

MySQL 进阶语法

时间:2023-06-24 23:55:51浏览次数:148  
标签:... 进阶 column INTO 语法 MySQL table SELECT name

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 是同一个字段

方法二:

标签:...,进阶,column,INTO,语法,MySQL,table,SELECT,name
From: https://www.cnblogs.com/georgeflyu/p/17501901.html

相关文章

  • MySQL---事务
    概述数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。事务是一个不可分割的工作逻辑单元。语法开启事务提交事务回滚事务回滚事务......
  • MySQL---约束
    概念约束是作用于表中列上的规则,用于限制加入表的数据例如:我们可以给id列加约束,让其值不能重复,不能为null值。约束的存在保证了数据库中数据的正确性、有效性和完整性添加约束可以在添加数据的时候就限制不正确的数据,年龄是3000,数学成绩是-5分这样无效的数据,继而保障数据的......
  • 变量语法强化
    声明强化在C++17之后,if语句可以像for循环语句一样,在括号里声明一个变量了。if(intx=5;x<10){x+=1;}//必然会执行初始化强化C++11引入了初始化列表这一概念,在C++11之前,普通数组,非常简单的类,都可以使用{}来初始化,而一般的类又要用其他的方式初始化,各种各样的初始......
  • C#-SQLHelper(二)_MySQL
    SqlHelper工具类/***┌──────────────────────────────────────────────────────────────┐*│描述:Mysql的操作工具类*│作者:执笔小白......
  • mysql8 执行聚合函数报错:Error 1140: In aggregated query without GROUP BY,sql_mode
    解决办法:setglobalsql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';SETGLOBALlog_bin_trust_function_creators=1;setsessionsql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZER......
  • mysqldump 介绍
    使用mysqldump命令来备份MySQL数据库。mysqldump命令是MySQL自带的备份工具,可以将MySQL数据库备份成SQL文件。mysqldump是MySQL用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATETABLE、INSERT等。mysqldump的运行机制......
  • mysql 系统查看命令
    查看系统编码mysql>\s--------------mysqlVer8.0.32-0ubuntu0.22.04.2forLinuxonx86_64((Ubuntu))Connection:LocalhostviaUNIXsocketServercharacterset:utf8mb4Dbcharacterset:utf8mb4Clientcharacterset:utf8mb4Conn.......
  • MySQL的sql语句编写
    基础的增删改查新增给指定列添加数据INSERTINTO表名(列名1,列名2,…)VALUES(值1,值2,…);给全部列添加数INSERTINTO表名VALUES(值1,值2,…);批量添加数据INSERTINTO表名(列名1,列名2,…)VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;INSERTINTO表名VALUE......
  • k8s进阶4-应用无损发布之健康检查
    一、配置探针kubernetes提供了三种探针(支持exec、tcp和http方式)来探测容器的状态:LivenessProbe:容器存活性检查,用于判断容器是否健康,告诉kubelet一个容器什么时候处于不健康的状态。如果LivenessProbe探针探测到容器不健康,则kubelet将删除该容器,并根据容器的重启策略做相应......
  • Mysql-sql优化
    1.查看SQL执行频率分析当前数据库是查询频繁的,还是写入频繁的,一般都是查比较多咯。MySQL客户端连接成功后,通过show[session|global]status命令可以提供服务器状态信息。show[session|global]status可以根据需要加上参数session或者global来显示对应级别的统计结果。如......