一、SQL简述
-
SQL的概述 SQL (Structured Query Language) 是一种标准化的编程语言,用于管理关系型数据库系统(RDBMS),包括数据查询、更新、管理和控制等多个方面。SQL不仅支持数据的定义(创建和修改数据库对象如表、视图等),还支持数据的操作(如插入、更新、删除记录),以及数据查询(从数据库中检索信息)。此外,SQL也提供了安全控制机制,用于设置用户访问权限和数据完整性约束。
-
SQL的优点
- 标准统一:大多数主流的关系型数据库管理系统(如MySQL、Oracle、SQL Server、PostgreSQL等)均支持SQL,使得开发者能使用同一套语言在不同平台上工作。
- 强大而灵活:SQL支持复杂查询,可以根据多个条件对数据进行筛选、排序、分组、联接等多种操作。
- 数据操纵能力:通过SQL可以方便地进行数据的增删改查,而且可以通过事务管理确保数据的一致性和完整性。
- 数据定义功能:允许用户定义数据库结构,包括创建表、索引、视图等,并可以对已有结构进行修改或删除。
- 数据控制功能:提供了权限管理和安全性控制,保证数据的安全性。
-
SQL的分类 SQL语句通常被分为以下几个类别:
- DDL(Data Definition Language,数据定义语言) :用于创建、修改和删除数据库结构的对象,如表、视图、索引、序列等。常见的DDL语句包括
CREATE
、ALTER
和DROP
。 - DML(Data Manipulation Language,数据操作语言) :负责数据的插入、修改和删除操作,以及查询数据。主要包含
SELECT
、INSERT
、UPDATE
和DELETE
语句。 - DCL(Data Control Language,数据控制语言) :用于管理数据库的权限和事务控制,包括授权、撤销权限以及事务处理的开始、提交(
COMMIT
)和回滚(ROLLBACK
)等操作。常见DCL语句有GRANT
、REVOKE
、COMMIT
和ROLLBACK
。
- DDL(Data Definition Language,数据定义语言) :用于创建、修改和删除数据库结构的对象,如表、视图、索引、序列等。常见的DDL语句包括
二、数据库的三大范式 数据库三大范式是设计关系型数据库时所遵循的原则,旨在减少数据冗余并提高数据一致性。
-
第一范式(1NF, First Normal Form) 每个关系表的属性(字段)都不可再分,即每个属性都是不可分割的基本数据项,不存在复合属性的情况。
-
第二范式(2NF, Second Normal Form) 在满足第一范式的基础上,每个非主键列必须完全依赖于整个主键,即不存在部分依赖。也就是说,非主属性不能仅依赖于主键的一部分,所有非主键属性必须直接依赖于整个主键。
-
第三范式(3NF, Third Normal Form) 在满足第二范式的基础上,所有非主键属性之间相互独立,不存在传递依赖。这意味着没有任何一个非主属性既不依赖于主键整体也不依赖于其他非主键属性。
三、数据库的数据类型
- 整数类型
整数类型通常包括多种子类型,用来存储不同长度和范围的整数值。在SQL中,这些类型可能会有不同的名称,但大致包括以下几种:
TINYINT
或 SMALLINT
:存储较小的整数,占用较少的存储空间,常用于标志位或者小型计数器。
INTEGER
或 INT
:最常见的整数类型,用于存储普通规模的整数。
BIGINT
:用于存储非常大范围的整数。
其他数据库系统可能还包括 MEDIUMINT
或特定长度的整数类型,如在MySQL中有 INT(N)
,其中N表示显示宽度,不影响存储的实际值范围。
- 浮点数类型和定点数类型
浮点数类型 (FLOAT
和 DOUBLE
) 用于存储带有小数的数值,精度相对较低,可能产生微小的误差,适合于科学计算和近似数值。
FLOAT
:占用较小的空间,精度相对较低。
DOUBLE
或 DOUBLE PRECISION
:提供更高的精度,占用更多的存储空间。
定点数类型 (DECIMAL
或 NUMERIC
) 用于存储精确的小数,特别适合财务和其他要求精确计算的场景,允许指定精度和标度。
DECIMAL(P, D)
或 NUMERIC(P, D)
,P代表总的有效数字位数(包括小数点两边),D代表小数点后的位数。
- 字符串类型
字符串类型用于存储文本数据,常见的有:
VARCHAR
或 NVARCHAR
:变长字符串,只存储实际使用的字符数量,节省空间,后者通常用于存储Unicode编码(如UTF-8)的文字。
CHAR
或 NCHAR
:定长字符串,无论实际内容多少都会占用预设长度的空间,同样后者用于Unicode字符串。
TEXT
或 CLOB
类型:用于存储大量文本数据,长度超过一般字符串类型的限制。
- 日期与时间类型
YEAR类型 :仅存储年份信息,比如在MySQL中,YEAR
可以存储1901至2155之间的年份。
TIME类型:存储时间信息,不含日期,可以精确到秒(或毫秒级别,根据数据库系统)。
DATETIME类型:同时存储日期和时间信息,格式如'YYYY-MM-DD HH:MM:SS',能够精确到秒。
TIMESTAMP类型:同样存储日期和时间信息,但有时会根据系统时区自动转换,并可能随着系统时间的变化而变化,有的数据库系统还会提供自动更新的功能,即每当行记录发生更改时自动记录当前时间戳。
- 二进制类型
BINARY 和 VARBINARY 类型:用于存储二进制数据,如图像、音频文件等非文本内容。
BINARY
和 VARBINARY
类似于 CHAR
和 VARCHAR
,前者为固定长度,后者为变长。
BLOB 或 BINARY LARGE OBJECT 类型:用于存储大量的二进制数据,如大文件等。
四、数据库、数据表的基本操作
1、数据库的基本操作
创建数据库 :使用 CREATE DATABASE
语句创建新的数据库,例如在MySQL中:
CREATE DATABASE database_name;
-
选择数据库 :使用
USE
语句切换到已存在的数据库,例如:USE database_name;
-
查看数据库 :通过
SHOW DATABASES
或类似的命令列出所有可用的数据库。SHOW DATABASES;
-
修改数据库:虽然不能直接更改数据库名称,但可以更改数据库的参数配置(取决于数据库系统)。
-
删除数据库 :使用
DROP DATABASE
删除数据库,但务必谨慎,因为这将永久删除数据库及其中的所有数据。DROP DATABASE database_name;
2、数据表的基本操作
2.1 创建数据表 :使用 CREATE TABLE
语句创建新表,指定表名、列名以及列的数据类型和约束。
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
primary_key_column datatype PRIMARY KEY,
foreign_key_column datatype REFERENCES other_table(primary_key)
);
2.2 查看数据表 :使用 DESCRIBE
或 SHOW COLUMNS FROM
查看表的结构,例如:
DESCRIBE table_name;
SHOW COLUMNS FROM table_name;
2.3 修改数据表:
2.4 删除数据表 :使用 DROP TABLE
删除表及其所有数据。
DROP TABLE table_name;
-
增加列 :使用
ALTER TABLE
添加新列。ALTER TABLE table_name ADD column_name datatype;
-
修改列 :改变现有列的名称、数据类型或约束。
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;
-
删除列 :移除不需要的列。
ALTER TABLE table_name DROP COLUMN column_name;
五、数据表的约束
-
主键约束:主键(PRIMARY KEY)用于唯一标识表中的每一行记录,不允许有重复值,也不允许为空。
-
非空约束:NOT NULL 约束强制某列的值不能为空。
-
默认值约束:DEFAULT 约束指定当插入新记录时,如果没有为该列提供值,则自动填充一个预先定义的默认值。
-
唯一性约束:UNIQUE 约束确保该列的每一条记录都有唯一的值,它可以应用于单个列或多列的组合。
-
外键约束:
数据一致性概念:外键约束用于维护两个表间的数据一致性,确保一个表中的记录引用了另一个表中存在的记录,防止"孤儿"记录的出现。
删除外键 :删除外键约束通常使用 ALTER TABLE
语句,例如在MySQL中:
Sql
ALTER TABLE child_table DROP FOREIGN KEY fk_constraint_name;
关于外键约束需要注意的细节:
在创建外键时,应确保引用的列在主表中具有唯一性约束,通常是主键。
当主表中的主键记录被删除时,根据外键约束的级联规则,从表中的相应记录也可能被删除或设置为NULL(取决于定义的ON DELETE策略)。
在执行涉及外键约束的DML操作时,需注意参照完整性的规则,否则可能导致操作失败。
外键约束可以影响数据库的性能,尤其是在涉及级联操作的情况下,因此在设计时要权衡数据完整性和性能要求。
六、数据表插入数据
-
为表中所有字段插入数据 使用
INSERT INTO
语句插入一行完整的数据,所有字段都需要提供相应的值。INSERT INTO table_name (column1, column2, ..., columnN) VALUES (value1, value2, ..., valueN);
-
为表中指定字段插入数据 如果只想插入某些字段的数据,可以在
INSERT INTO
语句中只列出需要插入的字段名。INSERT INTO table_name (column1, column2) VALUES (value1, value2);
-
同时插入多条记录 通过在
VALUES
子句中添加额外的值列表,可以一次性插入多条记录。INSERT INTO table_name (column1, column2) VALUES (value1_1, value2_1), (value1_2, value2_2), ...;
七、更新数据
UPDATE基本语法 使用 UPDATE
语句来修改表中已存在的数据,需要指定要更新的表和列以及新值。
UPDATE table_name
SET column1 = new_value1, column2 = new_value2, ...
WHERE condition;
WHERE
子句用于确定哪些记录应该被更新,如果不指定 WHERE
条件,将会更新表中的所有记录。
UPDATE更新部分数据 根据特定条件更新表中部分数据。
UPDATE users
SET email = 'new_email@example.com'
WHERE id = 1;
UPDATE更新全部数据 虽然不推荐一次性更新所有记录,除非有特殊需求,但若确实需要,可以省略 WHERE
子句,但这样做非常危险,因为它会改变表中所有记录对应列的值。
UPDATE table_name
SET column1 = 'all_new_value';
重要提示 : 在没有恰当 WHERE
条件的情况下执行全表更新是非常危险的操作,有可能导致数据丢失或错误,请谨慎使用并在必要时备份数据。在多数情况下,我们更倾向于根据具体的条件来更新数据。
八、删除数据
-
DELETE基本语法 使用
DELETE
语句从表中删除数据,可以指定删除符合特定条件的行。DELETE FROM table_name WHERE condition;
如果不使用
WHERE
子句,将会删除表中的所有记录,但是一般不会立即执行,而是需要确认或者在严格模式下被阻止,以防止意外的数据丢失。 -
DELETE删除部分数据 删除满足特定条件的数据行。
DELETE FROM students WHERE sid = 1001; -- 删除学号为1001的学生记录
-
DELETE删除全部数据 删除表中的所有记录,通常慎用且配合
WHERE
子句为空实现。DELETE FROM table_name; -- 危险操作,会删除表内所有记录
-
TRUNCATE和DELETE的区别
DELETE :逐行删除数据,记录每次删除操作,并且可以配合 WHERE
子句有条件地删除。它会触发触发器和相关的约束检查,并且执行删除后数据仍可被回收站找回(在支持回收站功能的数据库系统中)。
TRUNCATE TABLE :快速清空表的内容,它不是逐行删除,而是删除整个表并重新初始化表的高速计数器。不触发触发器,也不会进行回滚段记录,因此速度更快,但不可恢复。在许多情况下,TRUNCATE
操作比 DELETE
更高效,尤其针对大量数据时,不过它只能用于删除表中的所有数据,不能带 WHERE
子句。
九、MySQL数据表简单查询
-
简单查询概述 查询是对数据库中的数据进行检索的过程,通过
SELECT
语句完成。 -
查询所有字段 查询表中的所有字段数据,不指定字段名则使用通配符
*
。SELECT * FROM students;
-
查询指定字段 查询指定的字段(例如学生的学号sid和姓名sname)。
SELECT sid, sname FROM students;
-
常数的查询 查询固定的常数值。
SELECT 'Constant Value' AS constant_field;
-
从查询结果中过滤重复数据 使用
DISTINCT
关键字去除重复行。SELECT DISTINCT sname FROM students;
-
算术运算符 SQL查询中可以使用算术运算符进行计算,例如加运算符
+
。SELECT sid + 1 AS next_sid FROM students;
这个例子会在学生表中为每个学生的学号sid加上1作为新的列next_sid返回。
十、函数
- 聚合函数 聚合函数主要用于对一组值进行计算并返回单一的结果。
1.1 count() COUNT()
函数用于计算表中的行数或满足特定条件的行数。
SELECT COUNT(*) FROM students; -- 计算表中所有行数
SELECT COUNT(sid) FROM students WHERE gender = 'Male'; -- 计算性别为男的学生人数
1.2 max() MAX()
函数用于返回一组值中的最大值。
SELECT MAX(score) FROM scores; -- 返回成绩表中的最高分
1.3 min() MIN()
函数用于返回一组值中的最小值。
SELECT MIN(age) FROM students; -- 返回学生表中最年轻的年龄
1.4 sum() SUM()
函数用于计算一组数值的总和。
SELECT SUM(amount) FROM transactions; -- 返回交易表中的总金额
1.5 avg() AVG()
函数用于计算一组数值的平均值。
SELECT AVG(salary) FROM employees; -- 返回员工表中的平均薪资
其他常用函数
2.1 时间函数 时间函数用于处理日期和时间类型的数据,例如获取当前日期、计算两个日期差等。
SELECT NOW(); -- 获取当前日期和时间
SELECT DATE_SUB(date_column, INTERVAL 1 MONTH) FROM table_name; -- 计算日期字段减去一个月
2.2 字符串函数 字符串函数用于处理文本数据,如拼接、截取、查找、替换等操作。
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM students; -- 拼接名字和姓氏
SELECT LEFT(column_name, 5) FROM table_name; -- 截取字段左侧5个字符
2.3 数学函数 数学函数用于执行各种数学运算,如求绝对值、取余、舍入等。
SELECT ABS(-5); -- 返回5,计算绝对值
SELECT CEIL(3.14); -- 返回4,向上取整
SELECT ROUND(score, 2); -- 对成绩字段进行四舍五入保留两位小数
十一、条件查询
-
使用关系运算符查询 关系运算符用于比较字段值与其他值或表达式的大小、相等性等关系,例如:
SELECT * FROM students WHERE age > 18; -- 查询年龄大于18岁的学生 SELECT * FROM products WHERE price = 100; -- 查询价格为100的产品
-
使用IN关键字查询
IN
关键字用于匹配一组指定的值,例如:SELECT * FROM students WHERE major IN ('Computer Science', 'Mathematics'); -- 查询专业为计算机科学或数学的学生
-
使用BETWEEN AND关键字查询
BETWEEN AND
用于在一个范围内查找值,包括边界值:SELECT * FROM orders WHERE order_date BETWEEN '2020-01-01' AND '2020-12-31'; -- 查询2020年内下单的所有订单
-
使用空值查询 查询某个字段是否为空值:
SELECT * FROM students WHERE address IS NULL; -- 查询地址为空的学生 SELECT * FROM students WHERE address IS NOT NULL; -- 查询地址不为空的学生
-
使用AND关键字查询
AND
用于连接两个或更多条件,只有所有条件都满足时,记录才会被选中:SELECT * FROM students WHERE age > 18 AND gender = 'Female'; -- 查询年龄大于18岁且性别为女性的学生
-
使用OR关键字查询
OR
用于连接两个或更多条件,只要满足其中一个条件,记录就会被选中:SELECT * FROM students WHERE major = 'Physics' OR major = 'Chemistry'; -- 查询专业为物理或化学的学生
-
使用LIKE关键字查询
LIKE
关键字用于基于模式匹配进行字符串搜索:
7.1 普通字符串
SELECT * FROM courses WHERE course_name LIKE 'Intro to %'; -- 匹配以'Intro to'开头的所有课程
7.2 含有%通配符的字符串 %
表示任意数量的任意字符:
SELECT * FROM students WHERE name LIKE '%Smith%'; -- 匹配任何包含'Smith'的名字
7.3 含有_通配符的字符串 _
表示单个任意字符:
SELECT * FROM users WHERE username LIKE 'J_s_n'; -- 匹配用户名为三个字母且中间为任意字符的用户
使用LIMIT限制查询结果的数量 LIMIT关键字用于限制查询结果的数量:
SELECT * FROM students LIMIT 10; -- 只返回前10条记录
使用GROUP BY进行分组查询
9.1 GROUP BY和聚合函数一起使用
SELECT major, COUNT(*) FROM students GROUP BY major; -- 按专业统计学生数量
9.2 GROUP BY和聚合函数以及HAVING一起使用
SELECT major, COUNT(*) FROM students GROUP BY major HAVING COUNT(*) > 50; -- 统计人数超过50人的专业
使用ORDER BY对查询结果排序
SELECT * FROM students ORDER BY score DESC; -- 按成绩降序排列学生信息
十二、别名设置
-
为表取别名 在SQL查询中,可以为表设定别名以简化查询语句或提高可读性。表别名通常在
FROM
子句中定义。SELECT s.name AS student_name, c.course_title FROM students AS s JOIN courses AS c ON s.course_id = c.id;
上述例子中,
students
表被赋予了别名s
,courses
表被赋予了别名c
。 -
为字段取别名 在查询结果中,可以为字段设置别名,使其在输出时显示为更容易理解和识别的名称。
SELECT first_name AS 'First Name', last_name AS 'Last Name' FROM employees;
在这个例子中,
first_name
和last_name
列分别被赋予了别名'First Name'
和'Last Name'
。
十三、表的关联关系
-
关联查询 关联查询(JOIN)用于结合多个表中的数据,基于它们之间的关联关系生成查询结果。
SELECT s.sid, s.sname, t.score FROM students AS s JOIN scores AS t ON s.sid = t.student_id;
上述查询语句展示了如何通过
JOIN
将students
表和scores
表关联起来,基于它们共享的sid
(学生ID)字段。 -
关于关联关系的删除数据 删除关联数据涉及到对多个表的操作,尤其是存在外键约束的情况下。在删除与其它表有关联的数据时,通常需要采取如下措施之一:
CASCADE删除 :如果设置了外键约束的 ON DELETE CASCADE
,那么当主表中的记录被删除时,所有从表中与之关联的记录也会被自动删除。
显式删除:首先手动删除或更新与被删除记录有关联的从表数据,然后再删除主表记录。
禁用外键约束:在删除数据之前临时禁用外键约束,删除数据后再启用约束。但这可能导致数据不一致,应当谨慎操作。
在执行关联数据的删除操作时,需要确保考虑到数据完整性以及业务逻辑的需求。在实际操作中,应尽量避免直接删除关联数据,而是采用合适的数据更新或迁移策略。例如,在删除一个用户账户时,可能不是直接删除用户表中的记录,而是标记其状态为"已删除"或将其转移到归档表中。
十四、多表连接查询
-
交叉连接查询(CROSS JOIN) 交叉连接(也称笛卡尔积)返回两个表的所有行的组合。没有指定任何连接条件,每个表的每一行与其他表的每一行都会匹配形成结果集。
SELECT A.*, B.* FROM TableA AS A CROSS JOIN TableB AS B;
这种类型的连接通常在特定分析场景下使用,但在日常的数据库操作中并不常见,因为它可能会生成非常大的结果集,尤其是在表很大的情况下。
-
内连接查询(INNER JOIN) 内连接只返回两个表中满足连接条件的行。它基于两个表间的公共列(关联列)来匹配数据。
SELECT A.column1, B.column2 FROM TableA AS A INNER JOIN TableB AS B ON A.common_column = B.common_column;
上述示例中,只有当
TableA
和TableB
的common_column
列值相等时,才会在结果集中包含对应的行。 -
外连接查询 外连接除了返回内连接的结果外,还会包含至少一个表中未找到匹配项的那些行。
左(外)连接查询(LEFT JOIN 或 LEFT OUTER JOIN) 左外连接会返回左表的所有行,即使右表中没有匹配的行。对于这些没有匹配的行,右表的列将显示为NULL。
SELECT A.column1, B.column2
FROM TableA AS A
LEFT JOIN TableB AS B ON A.common_column = B.common_column;
右(外)连接查询(RIGHT JOIN 或 RIGHT OUTER JOIN) 右外连接则会返回右表的所有行,即使左表中没有匹配的行。此时,左表中没有匹配的列将显示为NULL。
SELECT A.column1, B.column2
FROM TableA AS A
RIGHT JOIN TableB AS B ON A.common_column = B.common_column;
总结来说,外连接查询使得我们能够查看一个表中所有记录的同时,也能获取到另一个表中与之匹配的记录(如果有),并且包括那些没有匹配记录的信息。左连接和右连接的区别在于参照的对象不同,即哪一侧的表数据不会被过滤掉。在某些数据库系统中,全外连接(FULL OUTER JOIN)也是可用的,它会返回左右两表中所有记录的并集,并且两边未匹配的记录都用NULL填充。
十五、子查询
子查询是在一个SQL语句中嵌套执行的SELECT语句,用于从一个或多个表中获取数据,然后将结果作为外部查询的一部分使用。以下是四种常见的子查询类型:
-
带比较运算符的子查询 在这种类型的子查询中,内部查询的结果会被用来和外部查询的某个字段进行比较。例如,查找比某个部门所有员工平均工资更高的员工信息:
SELECT * FROM Employees AS E1 WHERE E1.Salary > (SELECT AVG(Salary) FROM Employees AS E2 WHERE E2.DepartmentID = E1.DepartmentID);
在这个例子中,外部查询依赖于内部查询计算出的每个部门的平均工资。
-
带 EXISTS 关键字的子查询 EXISTS 子查询主要用于检查是否存在满足特定条件的数据行,而不关心具体的值。如果存在,则外部查询的条件为真。
SELECT * FROM Customers AS C WHERE EXISTS (SELECT 1 FROM Orders AS O WHERE O.CustomerID = C.CustomerID AND O.TotalAmount > 1000);
此处的子查询检查每个客户是否有订单金额超过1000的订单,若有,则该客户会在结果集中出现。
-
带 ANY 或 SOME 关键字的子查询 ANY 和 SOME 是同义词,在比较表达式中,它们表明外部查询中的值需要与子查询返回的任意一行的相应值满足给定的比较条件。
SELECT ProductName FROM Products WHERE Price > ANY (SELECT MAX(Price) FROM Products AS P2 GROUP BY CategoryID);
这个查询将找出价格高于其所在类别中任意产品最高价格的所有产品的名称。
-
带 ALL 关键字的子查询 当使用 ALL 时,外部查询中的值需要与子查询返回的所有行的相应值满足比较条件。
SELECT ProductName FROM Products WHERE Price >= ALL (SELECT MIN(Price) FROM Products AS P2 WHERE P2.CategoryID = Products.CategoryID);
此查询返回的是每个类别中最贵的产品(或者说是价格等于类别中最低价格的产品)。这意味着该产品在其类别中的价格大于或等于所有其他产品的价格。
MySQL基础操作及查询汇总
-
SQL简述
- SQL用于操作和查询MySQL数据库,主要包括数据定义(DDL)、数据操作(DML)和数据控制(DCL)语句。
-
数据库和数据表操作
- 创建数据库:
CREATE DATABASE db_name;
- 创建数据表:
CREATE TABLE table_name (column1 datatype, column2 datatype, ...);
- 查看数据库:
SHOW DATABASES;
- 查看数据表结构:
DESCRIBE table_name;
- 修改数据表:
ALTER TABLE table_name ...;
- 删除数据库:
DROP DATABASE db_name;
- 删除数据表:
DROP TABLE table_name;
- 创建数据库:
-
数据类型
- 整数类型(如
INT
、TINYINT
) - 浮点数和定点数类型(如
FLOAT
、DECIMAL
) - 字符串类型(如
VARCHAR
、TEXT
) - 日期与时间类型(如
DATE
、TIME
、DATETIME
、TIMESTAMP
) - 二进制类型(如
BINARY
、VARBINARY
)
- 整数类型(如
-
数据表约束
- 主键约束(
PRIMARY KEY
) - 非空约束(
NOT NULL
) - 默认值约束(
DEFAULT
) - 唯一性约束(
UNIQUE
) - 外键约束(
FOREIGN KEY
)
- 主键约束(
-
插入数据
- 插入所有字段数据:
INSERT INTO table_name VALUES (...);
- 插入指定字段数据:
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
- 批量插入数据:
INSERT INTO table_name (...) VALUES (...), (...), ...;
- 插入所有字段数据:
-
更新数据
- 更新部分数据:
UPDATE table_name SET column1 = value1 WHERE condition;
- 更新全部数据(慎用):
UPDATE table_name SET column1 = value1;
- 更新部分数据:
-
删除数据
- 删除部分数据:
DELETE FROM table_name WHERE condition;
- 删除全部数据(慎用):
DELETE FROM table_name;
- 快速清空表:
TRUNCATE TABLE table_name;
- 删除部分数据:
-
函数
- 聚合函数:
COUNT()
,MAX()
,MIN()
,SUM()
,AVG()
- 时间函数:
NOW()
,DATE_SUB()
, 等 - 字符串函数:
CONCAT()
,LEFT()
, 等 - 数学函数:
ABS()
,CEILING()
,ROUND()
, 等
- 聚合函数:
-
条件查询
- 关系运算符查询
IN
关键字查询BETWEEN AND
查询- 空值查询
AND
、OR
关键字查询LIKE
关键字查询(含通配符%
和_
)LIMIT
关键字限制查询结果数量GROUP BY
进行分组查询并结合聚合函数ORDER BY
对查询结果排序
-
别名设置
- 为表设置别名:
SELECT * FROM table_name AS alias;
- 为字段设置别名:
SELECT column1 AS alias FROM table_name;
- 为表设置别名:
-
表的关联查询
- 内连接查询(
INNER JOIN
) - 左外连接查询(
LEFT JOIN
或LEFT OUTER JOIN
) - 右外连接查询(
RIGHT JOIN
或RIGHT OUTER JOIN
)
- 内连接查询(
-
子查询
- 带比较运算符的子查询
- 带
EXISTS
关键字的子查询 - 带
ANY
或SOME
关键字的子查询 - 带
ALL
关键字的子查询
掌握以上知识点,基本可以应对MySQL数据库的各种常规操作与查询需求。在实际应用中,还需结合具体业务场景,灵活运用SQL语句。