mysql基础命令集和单表查询(非常详细!!!)

张开发
2026/4/11 16:09:46 15 分钟阅读

分享文章

mysql基础命令集和单表查询(非常详细!!!)
MySQL 基础命令集与单表查询详解本文涵盖 MySQL 最常用的基础命令数据库/表/数据操作以及单表查询的完整语法和示例适合初学者快速查阅。一、基础命令集1.1 连接与退出 MySQL# 连接本地 MySQL默认端口 3306mysql-uroot-p# 连接远程 MySQLmysql-h192.168.1.100-P3306-uusername-p# 退出 MySQLexit;# 或quit;1.2 数据库操作操作命令示例显示所有数据库SHOW DATABASES;创建数据库CREATE DATABASE db_name;CREATE DATABASE IF NOT EXISTS db_name;选择数据库USE db_name;查看当前数据库SELECT DATABASE();删除数据库DROP DATABASE db_name;DROP DATABASE IF EXISTS db_name;修改数据库字符集ALTER DATABASE db_name CHARACTER SET utf8mb4;1.3 表操作创建表CREATETABLEtable_name(column1 datatype[约束],column2 datatype[约束],...[表级约束])ENGINEInnoDBDEFAULTCHARSETutf8mb4;常用数据类型整数INT,TINYINT,BIGINT小数DECIMAL(M,D),FLOAT,DOUBLE字符串VARCHAR(n),CHAR(n),TEXT日期时间DATE,DATETIME,TIMESTAMP常用约束PRIMARY KEY– 主键AUTO_INCREMENT– 自增NOT NULL– 非空UNIQUE– 唯一DEFAULT value– 默认值COMMENT 描述– 字段注释查看表信息SHOWTABLES;-- 显示所有表DESCtable_name;-- 查看表结构SHOWCREATETABLEtable_name;-- 查看建表语句修改表结构-- 添加列ALTERTABLEtable_nameADDcolumn_name datatype[约束];-- 修改列数据类型、约束ALTERTABLEtable_nameMODIFYcolumn_name new_datatype;-- 重命名列ALTERTABLEtable_name CHANGE old_name new_name datatype;-- 删除列ALTERTABLEtable_nameDROPcolumn_name;-- 重命名表RENAMETABLEold_nameTOnew_name;删除表DROPTABLEtable_name;DROPTABLEIFEXISTStable_name;TRUNCATETABLEtable_name;-- 清空表数据保留结构1.4 数据操作CRUD插入数据-- 插入单行指定列INSERTINTOtable_name(col1,col2)VALUES(val1,val2);-- 插入单行所有列INSERTINTOtable_nameVALUES(val1,val2,...);-- 批量插入INSERTINTOtable_name(col1,col2)VALUES(val1,val2),(val3,val4);-- 插入查询结果INSERTINTOtable_nameSELECT...FROMother_table;更新数据UPDATEtable_nameSETcol1val1,col2val2WHEREcondition;-- 注意不加 WHERE 会更新所有行删除数据DELETEFROMtable_nameWHEREcondition;-- 不加 WHERE 会删除所有行但保留表结构-- 快速清空表不可回滚TRUNCATETABLEtable_name;查询数据详见第二部分SELECT...FROMtable_nameWHERE...GROUPBY...ORDERBY...LIMIT...;二、单表查询SELECT 详解单表查询是最基础的查询形式所有数据都来自一张表。2.1 完整语法顺序SELECT[DISTINCT]列1,列2,聚合函数(列)AS别名,...FROM表名[WHERE行筛选条件][GROUPBY分组列][HAVING分组后筛选][ORDERBY排序列[ASC|DESC]][LIMIT[offset,]row_count];2.2 基础查询查询所有列SELECT*FROMstudents;查询指定列SELECTname,age,cityFROMstudents;使用别名AS 可省略SELECTnameASstudent_name,ageASstudent_ageFROMstudents;-- 或SELECTname student_name,age student_ageFROMstudents;去重查询DISTINCTSELECTDISTINCTcityFROMstudents;-- 查看有哪些城市SELECTDISTINCTcity,ageFROMstudents;-- 多列组合去重2.3 WHERE 条件筛选比较运算符SELECT*FROMstudentsWHEREage18;SELECT*FROMproductsWHEREprice100;逻辑运算符AND / OR / NOTSELECT*FROMstudentsWHEREcity北京ANDage20;SELECT*FROMstudentsWHEREcity上海ORcity广州;SELECT*FROMstudentsWHERENOT(age18);范围查询-- BETWEEN … AND … 包含边界SELECT*FROMstudentsWHEREageBETWEEN18AND25;-- IN 集合SELECT*FROMstudentsWHEREcityIN(北京,上海,深圳);-- NOT INSELECT*FROMstudentsWHEREcityNOTIN(北京,上海);模糊查询LIKE-- % 任意多个字符_ 单个字符SELECT*FROMstudentsWHEREnameLIKE张%;-- 姓张SELECT*FROMstudentsWHEREnameLIKE_三;-- 名字第二个字是“三”SELECT*FROMstudentsWHEREnameNOTLIKE%明%;空值判断IS NULL / IS NOT NULLSELECT*FROMstudentsWHEREclass_idISNULL;SELECT*FROMstudentsWHEREemailISNOTNULL;2.4 排序ORDER BY-- 单列升序默认 ASCSELECT*FROMstudentsORDERBYage;-- 降序SELECT*FROMstudentsORDERBYageDESC;-- 多列排序先按城市升序再按年龄降序SELECT*FROMstudentsORDERBYcityASC,ageDESC;2.5 限制行数LIMIT-- 返回前 10 行SELECT*FROMstudentsLIMIT10;-- 分页从第 6 行开始取 5 行OFFSET 5, 行数 5SELECT*FROMstudentsLIMIT5,5;-- 第一个是 OFFSET第二个是行数-- 或更清晰的写法SELECT*FROMstudentsLIMIT5OFFSET5;2.6 聚合函数函数作用COUNT(*)统计行数COUNT(列)统计非空值的行数SUM(列)求和AVG(列)平均值MAX(列)最大值MIN(列)最小值SELECTCOUNT(*)AStotal_students,AVG(age)ASavg_age,MAX(age)ASmax_age,MIN(age)ASmin_ageFROMstudents;注意聚合函数自动忽略 NULL 值COUNT(*)除外。2.7 分组查询GROUP BY-- 统计每个城市的学生人数SELECTcity,COUNT(*)AScntFROMstudentsGROUPBYcity;分组前筛选WHERE vs 分组后筛选HAVINGWHERE在分组前过滤行不能使用聚合函数。HAVING在分组后过滤组可以使用聚合函数。-- 查询平均年龄大于 20 的城市SELECTcity,AVG(age)ASavg_ageFROMstudentsGROUPBYcityHAVINGAVG(age)20;两者结合使用-- 统计年龄大于 18 的学生中每个城市的平均年龄且只显示平均年龄 22 的城市SELECTcity,AVG(age)ASavg_ageFROMstudentsWHEREage18GROUPBYcityHAVINGAVG(age)22;2.8 查询执行顺序理解很重要FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT例如SELECTcity,COUNT(*)AScntFROMstudentsWHEREage18GROUPBYcityHAVINGcnt5ORDERBYcntDESCLIMIT3;2.9 常见单表查询示例-- 1. 查询年龄最大的学生信息SELECT*FROMstudentsORDERBYageDESCLIMIT1;-- 2. 查询每个班级的平均分只显示平均分 ≥ 80 的班级SELECTclass_id,AVG(score)ASavg_scoreFROMexam_scoresGROUPBYclass_idHAVINGavg_score80;-- 3. 查询名字包含“小”的学生SELECT*FROMstudentsWHEREnameLIKE%小%;-- 4. 查询注册时间在最近 7 天内的用户SELECT*FROMusersWHEREreg_dateCURDATE()-INTERVAL7DAY;-- 5. 查询价格在 50 到 100 之间的商品按价格降序排列SELECT*FROMproductsWHEREpriceBETWEEN50AND100ORDERBYpriceDESC;三、实用命令与技巧3.1 查看表数据-- 查看前几条数据SELECT*FROMtable_nameLIMIT5;-- 查看表总行数SELECTCOUNT(*)FROMtable_name;3.2 复制表结构不含数据CREATETABLEnew_tableLIKEold_table;3.3 复制表结构和数据CREATETABLEnew_tableASSELECT*FROMold_table;3.4 查看当前连接和数据库状态STATUS;-- 显示服务器状态SHOWVARIABLES;-- 显示系统变量SHOWPROCESSLIST;-- 查看当前连接和执行的SQL3.5 导入导出数据导出 SQL 文件命令行mysqldump-uroot-pdatabase_namebackup.sql导入 SQL 文件SOURCE/path/to/backup.sql;四、常见错误与注意事项忘记写 WHERE 的 UPDATE/DELETE会导致全表修改/删除操作前先 SELECT 确认。NULL 参与运算任何值与 NULL 运算结果都是 NULL判断 NULL 必须用IS NULL不能用 NULL。GROUP BY 后 SELECT 的列只能是分组列或聚合函数否则其他列的值是不确定的某些数据库会报错。HAVING 与 WHERE 混用记住 WHERE 先于 GROUP BYHAVING 后于 GROUP BY。字符串比较MySQL 默认不区分大小写取决于排序规则如需区分可加BINARYWHERE BINARY name Tom。五、总结类别核心命令/关键字数据库操作CREATE DATABASE,USE,DROP DATABASE表操作CREATE TABLE,ALTER TABLE,DROP TABLE,DESC数据操作INSERT,UPDATE,DELETE,SELECT单表查询SELECT,FROM,WHERE,GROUP BY,HAVING,ORDER BY,LIMIT聚合函数COUNT,SUM,AVG,MAX,MIN条件过滤,,,BETWEEN,IN,LIKE,IS NULL,AND/OR/NOT掌握以上基础命令和单表查询可以应对日常数据提取和分析的大部分场景。下一步可以学习多表连接JOIN和子查询进一步扩展查询能力。

更多文章