MySQL 基础知识记录

  1. 使用*代表表中的所有字段,但不建议这样做,因为它会导致全表扫描。
  2. 等于运算符可以写作=<=>(相等或不区分大小写比较)。
  3. 运算符优先级为:NOT > AND > OR > XOR。
  4. 判断字段是否为NULL时使用IS NULL表达式。
  5. MySQL的字符串匹配默认是左向匹配。
  6. 字符串LIKE 'w%'会检索以字母w开头、后面跟随任意数量字符(0个或多个)的字符串,例如wwaaaawb
  7. 默认情况下,字符串的LIKE模式匹配不区分大小写。
  8. ORDER BY子句默认按照升序排列(asc)。
  9. LIMIT 3, 5表示从第三个记录开始取五个记录,即偏移量为3,限制结果数量为5。
  10. CONCATCONCAT_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;
  1. LOCATE(字符串1, 字符串2)返回字符串1字符串2中的位置索引,如果不存在则返回0。
# LOCATE 找出顾客姓名中包含空格的记录
SELECT CustomerName 
FROM Customers
WHERE LOCATE(' ', CustomerName) <> 0;
  1. IF函数判断条件是否成立,并根据条件执行不同的计算。
# IF 判断客户是否为美国人,输出“美国人”或“非美国人”
SELECT 
 CustomerName,
    IF(Country = 'USA''美国人''非美国人'AS '是否美国人'
FROM Customers;
  1. CASE WHEN结构用于多条件分支判断,但在简化场景下尽量避免过度使用。
  2. COUNT函数内部表达式为 NULL 不会列入计数。
  3. GROUP_CONCAT结合DISTINCT可以将某个字段内不同值合并为一个字符串,由指定分隔符隔开。
# GROUP_CONCAT 找出所有来自美国的客户的唯一城市名并用 , 分隔
SELECT 
    GROUP_CONCAT(DISTINCT City order by City asc SEPARATOR ',')
FROM Customers
WHERE Country = 'USA';
  1. GROUP BY进行分组计算
# Group By 按CategoryID统计不同分类的商品总价。
SELECT 
 CategoryID,
 SUM(Price) AS TotalPrice
FROM Products
GROUP BY CategoryID;
  1. 结合WITH ROLLUP可以在GROUP BY基础上增加汇总行,生成类似透视表的效果,展示每组及其合计。
# WITH ROLLUP 不仅显示每个类别的总价格,还增加一行展示所有类别总价格之和。
SELECT 
 CategoryID,
 SUM(Price) AS TotalPrice
FROM Products
GROUP BY CategoryID WITH ROLLUP;
  1. GROUP BY语句后不能直接跟WHERE子句过滤数据,而应使用HAVING子句。

  2. GROUP BY配合HAVING可以实现对分组后的筛选。

# HAVING 仅保留分组总价格大于200的记录
SELECT 
 CategoryID,
 SUM(Price) AS TotalPrice
FROM Products
GROUP BY CategoryID
HAVING TotalPrice > 200;
  1. 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;
  1. 使用DESC或者DESCRIBE table_name命令可以查看表的完整结构信息,包括字段名、类型、是否允许NULL值以及键类型等。
  2. 可以结合ON DUPLICATE KEY UPDATE语法避免插入重复记录,当遇到主键或唯一键冲突时,更新已存在记录的某些字段值。
# ON DUPLICATE UPDATE
# 想像有一个公司旅游投票 方案/价格/支持人数,如果还没有人支持就新增,有人支持 counter + 1
INSERT INTO Decisions VALUES ('A''7900'1ON DEPLICATE KEY UPDATE counter = counter + 1;
  1. REPLACE语句用于插入或替换整行数据,如果发现有重复的索引值,则删除原有记录并插入新记录。
# REPLACE 遇到相同的索引值 4 则会修改,否则会新增
REPLACE INTO Shippers VALUES (4, 'SEA''(502) 999-9998');
  1. UPDATEDELETE语句也可以与ORDER BYLIMIT一起使用,限定更新或删除特定范围内的记录。
  2. TRUNCATE TABLE Shippers语句用来清空Shippers表中的所有数据。

原文始发于微信公众号(程序猿技术充电站):MySQL 基础知识记录

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/224751.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!