【数据库】CRUD&&常用函数&&UNION 和 UNION ALL
文章目录
一、CRUD
CRUD 是指数据库操作的四个基本动作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。这四个操作对应了数据库中的数据管理和维护的基本需求。下面是 MySQL 中实现 CRUD 操作的语法及其含义:
-
创建(Create) - 插入数据到表中:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
table_name
是要插入数据的表名。column1, column2, column3, ...
是要插入数据的列名。value1, value2, value3, ...
是要插入的具体数值。
-
读取(Read) - 查询数据:
-
查询所有列的所有行:
SELECT * FROM table_name;
-
查询特定列的所有行:
SELECT column1, column2, ... FROM table_name;
-
带条件查询:
-
-- 选择所有列或特定字段(用 <column> 替换)
SELECT *|<column>
-- 从一个或多个表中选择数据(用 <column1>,<column2> 替换)
FROM <table_name1>, <table_name2>, ...
-- 可选:指定筛选条件
WHERE <表达式>
-- 可选:对结果进行分组(用 <group by definition> 替换)
GROUP BY <group by definition>
-- 可选:对分组结果进行过滤条件判断(用 <expression> 替换)
HAVING <expression> [{<operator> <expression>} ...]
-- 可选:对结果进行排序(用 <order by definition> 替换)
ORDER BY <order by definition>
-- 可选:限制结果集的行数,可包括偏移量(用 <offset> 和 <row count> 替换)
LIMIT [<offset>] <row count>;
-
更新(Update) - 更新表中的数据:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
- 更新指定列的值,可以同时更新多个列。
condition
是指定要更新的行的条件。
-
删除(Delete) - 从表中删除数据:
DELETE FROM table_name WHERE condition;
- 删除满足条件的行,如果不指定条件,则会删除表中所有数据。
二、函数
2.1 字符函数 (Character Functions):
-
LOWER(): 转小写 - 将字符串中的字母全部转换为小写。
SELECT LOWER('SQL Course'); -- 输出 'sql course'
-
UPPER(): 转大写 - 将字符串中的字母全部转换为大写。
SELECT UPPER('SQL Course'); -- 输出 'SQL COURSE'
-
CONCAT(): 拼接 - 将多个字符串连接在一起。
SELECT CONCAT('Hello','World'); -- 输出 'HelloWorld'
-
SUBSTRING(): 截取 - 从字符串中获取指定位置和长度的子串。
SELECT SUBSTRING('HelloWorld', 1, 5); -- 输出 'Hello'
-
LENGTH(): 长度 - 返回字符串的长度。
SELECT LENGTH('HelloWorld'); -- 输出 10
-
INSTR(): 字符出现索引值 - 返回指定字符在字符串中第一次出现的位置。
SELECT INSTR('HelloWorld','W'); -- 输出 6
-
TRIM(): 字符截取后半段 - 从字符串开头去掉指定字符。
SELECT TRIM('H' FROM 'HelloWorld'); -- 输出 'elloWorld'
-
REPLACE(): 字符替换 - 将字符串中的指定字符替换为另一个字符。
SELECT REPLACE('abcd','b','m'); -- 输出 'amcd'
2.2 数字函数 (Numeric Functions):
-
ROUND(): 四舍五入 - 将数字四舍五入到指定的小数位数。
SELECT ROUND(88.886, 2); -- 输出 88.89
-
TRUNCATE(): 截断 - 截断数字到指定的小数位数。
SELECT TRUNCATE(88.886, 2); -- 输出 88.88
-
MOD(): 求余 - 返回两个数相除的余数。
SELECT MOD(1600, 300); -- 输出 100
2.3 日期函数 (Date Functions):
-
NOW(): 获取当前日期和时间。
SELECT NOW(); -- 返回当前日期和时间
-
STR_TO_DATE( ): 将日期格式的字符转换成指定格式的日期。
SELECT STR_TO_DATE('9-18-1997', '%m-%d-%Y'); -- 输出 '1997-09-18'
-
DATE_FORMAT(): 将日期转换成字符,指定格式。
SELECT DATE_FORMAT('2020/1/1', '%Y年%m月%d日'); -- 输出 '2020年01月01日'
2.4 流程控制函数:
-
CASE WHEN … THEN … ELSE … END: 类似于编程语言中的
switch
语句。SELECT CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END AS grade FROM student_scores;
-
IF(condition, true_value, false_value): 条件判断函数。
SELECT IF(score >= 60, 'Pass', 'Fail') AS result FROM student_scores;
2.5 聚合函数:
-
SUM(column): 求和 - 计算指定列的总和。
SELECT SUM(sales) FROM sales_data;
-
AVG(column): 平均值 - 计算指定列的平均值。
SELECT AVG(price) FROM product_prices;
-
MAX(column): 最大值 - 获取指定列的最大值。
SELECT MAX(temperature) FROM weather_data;
-
MIN(column): 最小值 - 获取指定列的最小值。
SELECT MIN(quantity) FROM inventory;
-
COUNT(column): 计算个数 - 统计指定列的非空值数量。
SELECT COUNT(customer_id) FROM customers;
三、UNION 和 UNION ALL
UNION
和 UNION ALL
是 SQL 中用于合并两个或多个查询结果的操作符。它们主要用于合并具有相似结构的多个查询的结果集。下
3.1 UNION:
-
去重:
UNION
操作符会合并两个查询的结果集,并且会自动去除重复的行,确保最终的结果集中不包含重复的行。 -
语法:
SELECT column1, column2, ... FROM table1 WHERE condition UNION SELECT column1, column2, ... FROM table2 WHERE condition;
-
示例:
SELECT city FROM customers WHERE country = 'USA' UNION SELECT city FROM suppliers WHERE country = 'USA';
上述示例将返回所有来自
customers
和suppliers
表中位于美国的城市,并确保每个城市只出现一次。
3.2 UNION ALL
-
不去重:
UNION ALL
同样合并两个查询的结果集,但不去除重复的行,即它保留所有的行,包括重复的。 -
语法:
SELECT column1, column2, ... FROM table1 WHERE condition UNION ALL SELECT column1, column2, ... FROM table2 WHERE condition;
-
示例:
SELECT city FROM customers WHERE country = 'USA' UNION ALL SELECT city FROM suppliers WHERE country = 'USA';
上述示例将返回所有来自 customers 和 suppliers 表中位于美国的城市,包括重复的行。
3.3 注意事项
-
UNION
和UNION ALL
要求两个查询的结果集具有相同的列数和相似的数据类型。 -
UNION
的性能可能会稍逊于UNION ALL
,因为它需要额外的步骤去重。 -
如果你确定结果集不包含重复行,或者你希望保留重复行,可以使用
UNION ALL
来获得更好的性能。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!