100条常用SQL语句

100条常用SQL语句

一、基本查询语句

查询所有数据

SELECT * FROM 表名; 

查询特定列

SELECT 列名1, 列名2 FROM 表名; 

条件查询

SELECT * FROM 表名 WHERE 条件; 

模糊查询

SELECT * FROM 表名 WHERE 列名 LIKE '模式%'; 

排序查询

SELECT * FROM 表名 ORDER BY 列名 ASC|DESC; 

限制返回行数

SELECT * FROM 表名 LIMIT 10; 

去重查询

SELECT DISTINCT 列名 FROM 表名; 

二、聚合与分组

聚合函数 - 计数

SELECT COUNT(*) FROM 表名; 

分组查询

SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名; 

条件分组

SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名 HAVING COUNT(*) > 1; 

计算总和

SELECT SUM(列名) FROM 表名; 

计算平均值

SELECT AVG(列名) FROM 表名; 

计算最大值

SELECT MAX(列名) FROM 表名; 

计算最小值

SELECT MIN(列名) FROM 表名; 

三、数据操作

插入数据

INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2); 

批量插入数据

INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2), (值3, 值4); 

更新数据

UPDATE 表名 SET 列名 = 新值 WHERE 条件; 

删除数据

DELETE FROM 表名 WHERE 条件; 

四、表操作

创建表

CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型); 

删除表

DROP TABLE 表名; 

修改表结构

ALTER TABLE 表名 ADD 列名 数据类型; 

删除表中的列

ALTER TABLE 表名 DROP COLUMN 列名; 

重命名表

ALTER TABLE 旧表名 RENAME TO 新表名; 

五、索引与视图

创建索引

CREATE INDEX 索引名 ON 表名 (列名); 

删除索引

DROP INDEX 索引名; 

创建视图

CREATE VIEW 视图名 AS SELECT * FROM 表名; 

删除视图

DROP VIEW 视图名; 

六、连接查询

内连接

SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2.列名; 

左连接

SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列名 = 表2.列名; 

右连接

SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.列名 = 表2.列名; 

全连接

SELECT * FROM 表1 FULL OUTER JOIN 表2 ON 表1.列名 = 表2.列名; 

七、子查询与集合

子查询

SELECT * FROM 表名 WHERE 列名 IN (SELECT 列名 FROM 其他表名); 

存在查询

SELECT * FROM 表名 WHERE EXISTS (SELECT 1 FROM 其他表名 WHERE 条件); 

联合查询

SELECT 列名 FROM 表1 UNION SELECT 列名 FROM 表2; 

八、日期与时间

获取当前时间

SELECT NOW(); 

获取当前日期

SELECT CURDATE(); 

日期加法

SELECT DATE_ADD(日期, INTERVAL 1 DAY); 

日期减法

SELECT DATE_SUB(日期, INTERVAL 1 DAY); 

格式化日期

SELECT DATE_FORMAT(日期, '%Y-%m-%d'); 

九、字符串处理

字符串连接

SELECT CONCAT(列名1, 列名2) FROM 表名; 

字符串长度

SELECT LENGTH(列名) FROM 表名; 

字符串截取

SELECT SUBSTRING(列名, 1, 5) FROM 表名; 

查找字符串位置

SELECT LOCATE('子串', 列名) FROM 表名; 

大写转换

SELECT UPPER(列名) FROM 表名; 

小写转换

SELECT LOWER(列名) FROM 表名; 

去除空格

SELECT TRIM(列名) FROM 表名; 

十、其他高级功能

使用CASE语句

SELECT 列名, CASE WHEN 条件 THEN '值1' ELSE '值2' END FROM 表名; 

使用IF语句

SELECT 列名, IF(条件, '值1', '值2') FROM 表名; 

使用COALESCE函数

SELECT COALESCE(列名, '默认值') FROM 表名; 

使用NULLIF函数

SELECT NULLIF(列名1, 列名2) FROM 表名; 

获取唯一值的数量

SELECT COUNT(DISTINCT 列名) FROM 表名; 

使用GROUP_CONCAT

SELECT GROUP_CONCAT(列名) FROM 表名 GROUP BY 其他列名; 

十一、事务管理

事务开始

BEGIN; 

提交事务

COMMIT; 

回滚事务

ROLLBACK; 

十二、游标与存储过程

创建游标

DECLARE 游标名 CURSOR FOR SELECT 列名 FROM 表名; 

打开游标

OPEN 游标名; 

获取游标数据

FETCH 游标名 INTO 变量名; 

关闭游标

CLOSE 游标名; 

创建存储过程

CREATE PROCEDURE 存储过程名 AS BEGIN ... END; 

调用存储过程

CALL 存储过程名(); 

十三、函数与触发器

创建函数

CREATE FUNCTION 函数名() RETURNS 数据类型 AS BEGIN ... END; 

调用函数

SELECT 函数名(); 

创建触发器

CREATE TRIGGER 触发器名 BEFORE INSERT ON 表名 FOR EACH ROW SET 新列 = '值'; 

删除触发器

DROP TRIGGER 触发器名; 

十四、系统信息查询

查询当前用户

SELECT CURRENT_USER(); 

查询当前数据库

SELECT DATABASE(); 

查询表的行数和大小

SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH FROM information_schema.TABLES WHERE TABLE_SCHEMA = '数据库名'; 

获取表的创建时间

SELECT CREATE_TIME FROM information_schema.TABLES WHERE TABLE_NAME = '表名'; 

获取表的修改时间

SELECT UPDATE_TIME FROM information_schema.TABLES WHERE TABLE_NAME = '表名'; 

十五、其他实用查询

使用LIMIT与ORDER BY结合

SELECT * FROM 表名 ORDER BY 列名 LIMIT 10; 

查询表的外键约束

SELECT CONSTRAINT_NAME, TABLE_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '数据库名'; 

查询表的主键约束

SELECT CONSTRAINT_NAME, TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = '数据库名' AND CONSTRAINT_TYPE = 'PRIMARY KEY'; 

使用ROLLUP进行分组汇总

SELECT 列名, SUM(列名2) FROM 表名 GROUP BY 列名 WITH ROLLUP; 

获取前N条记录

SELECT * FROM 表名 LIMIT N; 

获取最后N条记录

SELECT * FROM 表名 ORDER BY 列名 DESC LIMIT N; 

使用NOT EXISTS进行条件判断

SELECT * FROM 表名 WHERE NOT EXISTS (SELECT 1 FROM 其他表名 WHERE 条件); 

使用IN进行条件判断

SELECT * FROM 表名 WHERE 列名 IN (值1, 值2); 

使用NOT IN进行条件判断

SELECT * FROM 表名 WHERE 列名 NOT IN (值1, 值2); 

使用UNION ALL

SELECT 列名 FROM 表1 UNION ALL SELECT 列名 FROM 表2; 

十六、性能优化

使用EXPLAIN分析查询

EXPLAIN SELECT * FROM 表名 WHERE 条件; 

优化索引

CREATE INDEX 索引名 ON 表名 (列名); 

使用临时表

CREATE TEMPORARY TABLE 临时表名 AS SELECT * FROM 表名; 

查询表的索引

SHOW INDEX FROM 表名; 

查询数据库版本

SELECT VERSION(); 

十七、常见错误处理

捕获错误

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN ... END; 

输出错误信息

SELECT ERROR_MESSAGE(); 

使用事务处理错误

BEGIN; -- 开始事务 -- 执行SQL语句 -- 如果有错误,ROLLBACK 

十八、数据备份与恢复

备份数据库

mysqldump -u 用户名 -p 数据库名 > 备份文件.sql 

恢复数据库

mysql -u 用户名 -p 数据库名 < 备份文件.sql 

十九、数据导入与导出

导入数据

LOAD DATA INFILE '文件路径' INTO TABLE 表名; 

导出数据

SELECT * INTO OUTFILE '文件路径' FROM 表名; 

二十、常用工具与命令

显示当前数据库

SELECT DATABASE(); 

显示所有数据库

SHOW DATABASES; 

显示所有表

SHOW TABLES; 

显示表结构

DESCRIBE 表名; 

显示当前连接信息

SHOW PROCESSLIST; 

显示数据库使用情况

SELECT table_schema AS '数据库', SUM(data_length + index_length) / 1024 / 1024 AS '大小(MB)' FROM information_schema.TABLES GROUP BY table_schema; 

显示表的行数

SELECT COUNT(*) FROM 表名; 

显示用户权限

SHOW GRANTS FOR '用户名'@'主机名'; 

Read more

【问题反馈】JNI 开发:为什么 C++ 在 Debug 正常,Release 却返回 NaN?

【问题反馈】JNI 开发:为什么 C++ 在 Debug 正常,Release 却返回 NaN?

摘要: 在 Android NDK / JNI 开发中,经常会遇到这样一种“诡异”问题:Debug 模式下运行完全正常,而 Release 模式却出现 NaN、Infinity 甚至随机结果。 本文通过一次真实的 JNI 坐标转换案例,深入分析了该问题的根本原因——C++ 返回局部栈内存指针所导致的未定义行为(Undefined Behavior)。 【问题反馈】JNI 开发:为什么 C++ 在 Debug 正常,Release 却返回 NaN? 本文为以下问题的解决记录。由于问题较为典型,故梳理备忘。 https://github.com/eqgis/Sceneform-EQR/discussions/16 一、问题现象描述 1. 现象

By Ne0inhk
《MySQL 权限与访问进阶:普通用户搭建、跨端登录及 C/C++ 开发对接教程》

《MySQL 权限与访问进阶:普通用户搭建、跨端登录及 C/C++ 开发对接教程》

前引:在 MySQL 开发与运维中,普通用户的创建与权限管控是保障数据库安全的基础,而本地连接、远程访问的配置,以及 C/C++ 程序的对接调用,则是打通 “数据库 - 应用” 链路的核心环节。很多开发者在实际操作中会遇到 “用户创建后登录失败”“远程连接被拒绝”“C/C++ 接口调用报错” 等问题,本文将从实战出发,一步步拆解 MySQL 普通用户的创建配置、本地 / 远程登录的关键步骤,以及 C/C++ 访问 MySQL 的完整流程(含环境搭建、代码实现、常见问题排查),帮助开发者快速搞定多场景下的 MySQL 访问需求! 目录 【一】普通用户的创建 (1)查看user表 (2)创建普通用户 (3)删除普通用户

By Ne0inhk
【C++初阶】:C++入门相关知识(3):引用 & inline内联函数 & nullptr相关概念

【C++初阶】:C++入门相关知识(3):引用 & inline内联函数 & nullptr相关概念

🎈主页传送门:良木生香 🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》《鼠鼠的C++学习之路》 🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离 前言:在上一篇文章中,我们学习了C++的输入输出,缺省参数以及函数重载,这些都是C++入门必备的基础知识,那么在这篇文章中,我们就要来学习剩下C++其他的基础知识,那就是引用、inline、以及nullptr这些知识。 一、引用 1.1、引用的概念和定义 引用不是定义一个新变量,而是给已经存在的变量起一个别名,那么编译器就不会为别名重新开辟空间,它和引用变量共同使用同一块空间。就好比我们把土豆称为马铃薯,番茄称为西红柿一样,都是取了一个新的别名,但是东西是同一个东西,所以引用的语法如下: 类型& 别名 = 变量 使用方法如下: int a = 10; int&

By Ne0inhk