SQL的基本语法
1、SQL语句可以单行或者多行书写,以分号结尾。
2、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
3、注释:
1) 单行注释:-- 注释内容 或 #注释内容(MySQL独有)
2) 多杭注释:/* 注释内容*/
SQL分类:
DDL(Data Definition Language)数据定义语言,用来定义数据库对象:数据库、表、列等;
DML(Data Manipulation Language)数据操作语言,用来对数据库中表的数据进行增删改;
DQL(Data Query Language)数据查询语言,用来查询数据库中表的记录(数据);
DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全等级、创建用户;
DDL -- 操作数据库
1、查询
查看数据库:SHOW DATABASES;
2、创建
创建数据库:CREATE DATABASE 数据库名;
创建数据库(判断,如果不存在则创建):CARETE DATABASE IF NOT EXISTS 数据库名;
3、删除
删除数据库:DROP DATABASE 数据库名;
删除数据库(判断,如果存在则删除):DROP DATABASE IF EXISTS 数据库名;
4、使用数据库
使用数据库:USE 数据库名;
查看当前使用的数据库:SELECT DATABASE();
DDL -- 操作表
创建(Create)/ 查询(Retrieve) / 修改(Update) / 删除(Delete)
查询表:
查询当前数据库中的所有表:SHOW TABLES;
查询表结构:DESC 表名称;
创建表:
CREATE TABLE 表名称(
字段1 数据类型1,...
字段n 数据类型n
);
数值类型
MySQL 支持所有标准 SQL 数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB表。
作为 SQL 标准的扩展,MySQL 也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
删除表
DROP TABLE 表名;
DROP TABLE IF EXISTS 表名;(删除表时先判断表是否存在)
修改表
1、修改表名:ALTER TABLE 表名 RENAME TO 新表名;
2、添加一列:ALTER TABLE 表名 ADD列名 数据类型;
3、修改数据类型:ALTER TABLE 表名 MODIFY 列名 新数据类型;
4、修改列名和数据类型:ALTER 表名 CHANGE 列名 新列名 数据类型;
5、删除列:ALTER TABLE 表名 DROP 列名;
DML -- 添加数据 (INSERT INTO)
1、给指定的列添加数据:
(1) INSERT INTO 表名称(列名1,列名2, ...) values(值1, 值2, ...);
2、给全部列添加数据:
(1) INSERT INTO 表名称 VALUES(值1, 值2, ...);
3、批量添加数据:
(1) INSERT INTO 表名称(列名1,列名2, ...) VALUES(值1, 值2, ...), (值1, 值2, ...)...;
(2) INSERT INTO 表名称 VALUES(值1, 值2, ...), (值1, 值2, ...);
DML -- 修改数据(UPDATE...SET)
1、修改表数据:
(1) UPDATE 表名 SET 列名1=值1, 列名2=值2, ...[WHERE 条件];
注意:修改语句中如果不加条件,则将所有数据都修改!
DML -- 删除数据(DELETE)
1、删除表中的数据:
(1) DELETE FROM 表名 [WHERE 条件];
注意:删除语句中不加条件,则将表中所有的数据删除!
DQL -- 查询数据(SELECT)
语法:
SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组列表 HAVING 分组后条件 ORDER BY 排序字段 LIMIT 分页限定;
1、查询单表中所有数据:
(1) SELECT 字段名 FROM 表名称;
(2) SELECT DISTINCT 字段名 FROM 表名称;(去重)
(3) SELECT 字段名 FROM 表名称;
2、单表条件查询:
1、查询单表中的总记录数:
(1) SELECT COUNT(*) FROM 表名称;
(2) SELECT COUNT(*) FROM 表名称 WHERE 条件[AND/OR ...];(多条件)
2、单表排序查询:
(1) SELECT 字段列表 FROM user ORDER BY 排序字段;
(2) 按照数学成绩降序排列,如果数学成绩形同时,则按英语成绩升序排列
SELECT * FROM stu ORDER BY math DESC, english ASC;
注意:多字段排序时中间用“,”隔开,当前面的条件一样时才会启用后面的条件。
3、分组查询:将一列数据作为一个整体,进行纵向计算
语法:SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY分组字段名 [HAVING 分组后条件过滤];
Where和having的区别:
① 执行时机不一样:where是分组之前进行限定,不满足where条件的则不参与分组,而having是分组之后对结果进行过滤;
② 可判定的条件不一样:where不能对聚合函数进行判定,having可以;
注意:
① null不参与任何聚合函数的运算;
② 分组之后查询的字段为聚合函数和分组字段,查询其他字段无意义;
③ 执行顺序为:where > 聚合函数 > having;
1、单表分页查询:
分页的关键字为:LIMIT
语法:SELECT 字段列表 FROM 表名称LIMIT 索引开始, 查询的记录数;
起始索引:从0开始
计算公式:起始索引 = (当前页码 - 1) * 每页显示的条数
提示:
① 分页查询limit 是MySQL数据库独有的(方言)
② Oracle分页查询使用 rownumber
③ SQL Server分页查询使用top
1、起别名:
AS: AS 也可以省略
① SELECT u.id, u.`name`, u.gender, u.address, u.`status` FROM user AS u;
② SELECT u.id, u.`name`, u.gender, u.address, u.`status` FROM user u;
③ select name, math as 数学成绩, english as 英语成绩 FROM stu;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效