-
使用 *
代表表中的所有字段,但不建议这样做,因为它会导致全表扫描。 -
等于运算符可以写作 =
或<=>
(相等或不区分大小写比较)。 -
运算符优先级为:NOT > AND > OR > XOR。 -
判断字段是否为NULL时使用 IS NULL
表达式。 -
MySQL的字符串匹配默认是左向匹配。 -
字符串 LIKE 'w%'
会检索以字母w
开头、后面跟随任意数量字符(0个或多个)的字符串,例如w
、waaaa
和wb
。 -
默认情况下,字符串的 LIKE
模式匹配不区分大小写。 -
ORDER BY
子句默认按照升序排列(asc)。 -
LIMIT 3, 5
表示从第三个记录开始取五个记录,即偏移量为3,限制结果数量为5。 -
CONCAT
与CONCAT_WS
函数可用于连接字段值或字符串。
# CONCAT 连接多列 用 , 隔开
SELECT
CustomerName,
CONCAT(Address, ", ", PostalCode, ", ", City) AS Address
FROM Customers
# CONCAT_WS 连接多列 用 , 隔开
SELECT
CustomerName,
CONCAT_WS(', ', Address, PostalCode, City) AS Address
FROM Customers;
-
LOCATE(字符串1, 字符串2)
返回字符串1
在字符串2
中的位置索引,如果不存在则返回0。
# LOCATE 找出顾客姓名中包含空格的记录
SELECT CustomerName
FROM Customers
WHERE LOCATE(' ', CustomerName) <> 0;
-
IF
函数判断条件是否成立,并根据条件执行不同的计算。
# IF 判断客户是否为美国人,输出“美国人”或“非美国人”
SELECT
CustomerName,
IF(Country = 'USA', '美国人', '非美国人') AS '是否美国人'
FROM Customers;
-
CASE WHEN
结构用于多条件分支判断,但在简化场景下尽量避免过度使用。 -
COUNT
函数内部表达式为 NULL 不会列入计数。 -
GROUP_CONCAT
结合DISTINCT
可以将某个字段内不同值合并为一个字符串,由指定分隔符隔开。
# GROUP_CONCAT 找出所有来自美国的客户的唯一城市名并用 , 分隔
SELECT
GROUP_CONCAT(DISTINCT City order by City asc SEPARATOR ',')
FROM Customers
WHERE Country = 'USA';
-
GROUP BY进行分组计算
# Group By 按CategoryID统计不同分类的商品总价。
SELECT
CategoryID,
SUM(Price) AS TotalPrice
FROM Products
GROUP BY CategoryID;
-
结合 WITH ROLLUP
可以在GROUP BY
基础上增加汇总行,生成类似透视表的效果,展示每组及其合计。
# WITH ROLLUP 不仅显示每个类别的总价格,还增加一行展示所有类别总价格之和。
SELECT
CategoryID,
SUM(Price) AS TotalPrice
FROM Products
GROUP BY CategoryID WITH ROLLUP;
-
在
GROUP BY
语句后不能直接跟WHERE
子句过滤数据,而应使用HAVING
子句。 -
GROUP BY
配合HAVING
可以实现对分组后的筛选。
# HAVING 仅保留分组总价格大于200的记录
SELECT
CategoryID,
SUM(Price) AS TotalPrice
FROM Products
GROUP BY CategoryID
HAVING TotalPrice > 200;
-
UNION
操作符用于将两个具有相同列结构的查询结果集合并在一起,提高查询可读性。
# UNION 将两个查询合并,让SQL更好读
SELECT
OrderID,
EmployeeID
FROM Orders
WHERE OrderDate <= '1996-08-17' and ShipperID = 3
UNION
SELECT
OrderID,
EmployeeID
FROM Orders
WHERE OrderDate >= '1996-08-13' and ShipperID = 1;
-
使用 DESC
或者DESCRIBE table_name
命令可以查看表的完整结构信息,包括字段名、类型、是否允许NULL值以及键类型等。 -
可以结合 ON DUPLICATE KEY UPDATE
语法避免插入重复记录,当遇到主键或唯一键冲突时,更新已存在记录的某些字段值。
# ON DUPLICATE UPDATE
# 想像有一个公司旅游投票 方案/价格/支持人数,如果还没有人支持就新增,有人支持 counter + 1
INSERT INTO Decisions VALUES ('A', '7900', 1) ON DEPLICATE KEY UPDATE counter = counter + 1;
-
REPLACE
语句用于插入或替换整行数据,如果发现有重复的索引值,则删除原有记录并插入新记录。
# REPLACE 遇到相同的索引值 4 则会修改,否则会新增
REPLACE INTO Shippers VALUES (4, 'SEA', '(502) 999-9998');
-
UPDATE
和DELETE
语句也可以与ORDER BY
和LIMIT
一起使用,限定更新或删除特定范围内的记录。 -
TRUNCATE TABLE Shippers
语句用来清空Shippers
表中的所有数据。
原文始发于微信公众号(程序猿技术充电站):MySQL 基础知识记录
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/224751.html