做 AI 应用开发,要学会与数据打交道,而SQL是管理数据库的有效工具,所以有了后面的一系列文章,近3到5天时间中,我将以菜鸟教程狂神说Java介绍的SQL为基础,分享我关于SQL的学习历程。
因为文章为学习笔记,所以尽量通俗易懂,困难的地方要详细介绍,简单的地方要一笔带过,主要记录一些重要的概念,SQL公式,要多写多练。也会使用llm来辅助学习。


SQL:结构化查询语言,能够访问和处理数据库。

RDBMS:关系型数据库管理系统

SQL 对大小写不敏感:SELECT 与 select 是相同的。

分号:一句SQL最后使用,一些数据库强制要求使用分号。一个字:尽量使用分号。

使用 菜鸟教程 的SQL在线测试工具中 字段和表要使用小写!

1、取数据

select 字段 from 表;

SELECT 字段 FROM 表;

全部字段:*,

select * from 表;

2、取不同数据

有点模糊,解释清楚:有一列数据:1 1 1 2 2 2 3,返回:1 2 3。

select distinct 字段 from 表;

SELECT DISTINCT 字段 FROM 表;

注:大小写都可以使用,因为过于简单,所以后面将使用大写(一个例子)

3、选择数据

符合条件的数据

SELECT 字段 FROM 表 WHERE 条件;

本内容最最重要的是条件的使用。
需要某值为多少时使用:=
例如:国家为中国的数据:country='CN' 字符串使用单引号,数字不需要单引号。

其他运算符:
=,>,<,<>,>=,<=:表示范围,简单,不多介绍。

重点讲下面特殊的符号:

  1. 空值:is null 例子:SELECT 字段 FROM 表 WHERE 字段 is null
  2. 之间的值:SELECT 字段 FROM 表 WHERE 字段 BETWEEN 1 AND 4 包括1和4
  3. 在某某中的值:in(1,2,3,4,5)

LIKE,模糊搜索。难,复杂,要重点理解。
Select * from emp where ename like 'M%';

  • % 表示多个字值,_ 下划线表示一个字符;
  • M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
  • %M% : 表示查询包含M的所有内容。
  • %M_ : 表示查询以M在倒数第二位的所有内容。

3.1 LIKE

LIKE 操作符确实是 SQL 中一个强大但有时也令人困惑的部分,因为它允许我们基于模式(pattern)而不是精确值来搜索字符串数据。这在处理不完全确定的文本数据时非常有用。关键在于理解两个主要的通配符:

  1. % (百分号): 代表零个、一个或多个任意字符。
  2. _ (下划线): 代表正好一个任意字符。

为了更好地说明,我们假设有一个 emp (员工) 表,其中包含一个 ename (员工姓名) 列,数据如下:

ename
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
MARY
CHAMP

现在,我们来逐一解释并举例说明你提到的几种模式:

1. 模式:'M%'

  • 解释: 这个模式表示查找所有以大写字母 ‘M’ 开头的 ename
    • M: 精确匹配字符 ‘M’。
    • %: 匹配 ‘M’ 后面的零个或多个任意字符。
  • SQL 语句:
    SELECT ename FROM emp WHERE ename LIKE 'M%';
    
  • 例子:
    根据我们假设的 emp 表数据,这条 SQL 语句会返回:
    • MARTIN (M 开头,后面有 ARTIN)
    • MILLER (M 开头,后面有 ILLER)
    • MARY (M 开头,后面有 ARY)
  • 为什么返回这些? 因为这些名字都严格以 ‘M’ 开始,% 通配符匹配了名字中 ‘M’ 之后的所有剩余部分(或者没有剩余部分,如果名字就是 ‘M’ 的话,虽然我们例子里没有)。SMITH 不行因为它不以 M 开头。

2. 模式:'%M%'

  • 解释: 这个模式表示查找所有包含大写字母 ‘M’ 的 ename,无论 ‘M’ 出现在开头、中间还是结尾。
    • 第一个 %: 匹配 ‘M’ 前面的零个或多个任意字符。
    • M: 精确匹配字符 ‘M’。
    • 第二个 %: 匹配 ‘M’ 后面的零个或多个任意字符。
  • SQL 语句:
    SELECT ename FROM emp WHERE ename LIKE '%M%';
    
  • 例子:
    根据我们假设的 emp 表数据,这条 SQL 语句会返回:
    • SMITH (M 在中间)
    • MARTIN (M 在开头)
    • ADAMS (M 在中间)
    • JAMES (M 在中间)
    • MILLER (M 在开头)
    • MARY (M 在开头)
    • CHAMP (M 在中间)
  • 为什么返回这些? 因为这些名字中都至少包含一个 ‘M’。第一个 % 允许 M 前面有任意字符(或没有字符,如 MARTIN),第二个 % 允许 M 后面有任意字符(或没有字符)。

3. 模式:'%M_'

  • 解释: 这个模式表示查找所有以 ‘M’ 加上后面正好一个任意字符结尾的 ename。换句话说,‘M’ 必须是倒数第二个字符。

    • %: 匹配 ‘M’ 前面的零个或多个任意字符。
    • M: 精确匹配字符 ‘M’。
    • _: 匹配 ‘M’ 后面的正好一个任意字符,并且这个字符是字符串的最后一个字符。
  • SQL 语句:

    SELECT ename FROM emp WHERE ename LIKE '%M_';
    
  • 例子:
    根据我们假设的 emp 表数据,这条 SQL 语句会返回:

    • ADAMS
    • CHAMP
  • 为什么返回这些?

    • ADAMS: % 匹配 ADAM 匹配 M_ 匹配最后一个字符 S。符合模式(M 是倒数第二个字符)。
    • CHAMP: % 匹配 CHAM 匹配 M_ 匹配最后一个字符 P。符合模式(M 是倒数第二个字符)。
    • 其他名字如 JAMES,M 后面是 ES(两个字符),不符合 _(一个字符)。SMITH 的 M 后面是 ITH(三个字符)。MARTIN 的 M 后面是 ARTIN(五个字符)。

总结与重点理解:

  • LIKE 用于模式匹配,不是精确等于。
  • % 是非常灵活的,可以代表任意长度的字符序列(包括空序列)。
  • _ 是精确的,只代表一个任意字符。
  • 组合使用 %_ 可以构建非常复杂的搜索模式。
  • LIKE 通常是大小写敏感的,但这取决于具体的数据库系统和其配置(例如,MySQL 默认可能不敏感,而 PostgreSQL 默认敏感)。如果需要不区分大小写,可能需要使用数据库特定的函数(如 LOWER()UPPER())或特定的操作符(如 ILIKE 在 PostgreSQL 中)。
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐