SQL SELECT 语句怎么用?COMPANY 表查询案例(含条件 / 模糊 / 分页)

在 SQL 操作中,SELECT语句是数据检索的核心,通过它可以从表中精准提取所需信息。本文基于COMPANY表,通过具体案例详解SELECT的常用用法,包括逻辑运算、模糊查询、范围筛选等,覆盖从简单到复杂的查询场景。

一、基础准备:表结构与测试数据

首先创建COMPANY表并插入测试数据,作为后续查询的基础:

1. 表结构设计

sql

复制代码
CREATE TABLE COMPANY(
  ID INT PRIMARY KEY NOT NULL,  -- 员工ID(主键,非空)
  NAME TEXT NOT NULL,           -- 员工姓名(非空)
  AGE INT NOT NULL,             -- 年龄(非空)
  ADDRESS CHAR(50),             -- 地址(可空)
  SALARY REAL                   -- 薪资(可空,浮点型)
);

2. 插入测试数据

sql

复制代码
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES 
  (1, 'Paul', 32, 'California', 20000.00 ),
  (2, 'Allen', 25, 'Texas', 15000.00 ),
  (3, 'Teddy', 23, 'Norway', 20000.00 ),
  (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ),
  (5, 'David', 27, 'Texas', 85000.00 ),
  (6, 'Kim', 22, 'South-Hall', 45000.00 ),
  (7, 'James', 24, 'Houston', 10000.00 );

3. 查看全表数据

执行基础查询,确认数据插入成功:

sql

复制代码
select * from COMPANY;  -- "*" 表示查询所有字段

查询结果(7 条记录):

ID NAME AGE ADDRESS SALARY
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0

二、条件筛选:逻辑运算符的应用

通过WHERE子句结合逻辑运算符,可实现多条件的数据过滤,常用运算符包括ANDOR等。

1. AND:同时满足多个条件

案例 :找出年龄≥25 薪资≥65000 的员工

sql

复制代码
select * from company where age >= 25 and salary >= 65000;

结果(同时满足两个条件的记录):

ID NAME AGE ADDRESS SALARY
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0

2. OR:满足任意一个条件

案例 :找出年龄≥25 或者 薪资≥65000 的员工

sql

复制代码
select * from company where age >= 25 or salary >= 65000;

结果(满足任一条件的记录):

ID NAME AGE ADDRESS SALARY
1 Paul 32 California 20000.0 (年龄≥25)
2 Allen 25 Texas 15000.0 (年龄≥25)
4 Mark 25 Rich-Mond 65000.0 (两者均满足)
5 David 27 Texas 85000.0 (两者均满足)

三、特殊值处理:NULL判断

NULL表示 "未知值"(非空字符串或 0),需用IS NULLIS NOT NULL判断,不可直接用=!=

案例 :找出age字段不为空的员工(本案例中age均非空,故返回全表)

sql

复制代码
select * from company where age is not null;

说明 :若表中存在ageNULL的记录(如INSERT INTO COMPANY VALUES (8, 'Lisa', NULL, 'NY', 50000);),则该记录会被排除。

四、模糊查询:LIKE匹配字符串

LIKE用于按模式匹配字符串,支持两个通配符:

  • %:匹配任意长度的字符(包括 0 个)
  • _:匹配单个字符

1. 匹配前缀

案例 :找出name以 "Pa" 开头的员工

sql

复制代码
select * from company where name like 'Pa%';  -- "Pa%" 表示以Pa开头,后面任意字符

结果

ID NAME AGE ADDRESS SALARY
1 Paul 32 California 20000.0

2. 数值类型的模糊匹配(PostgreSQL 特殊处理)

LIKE仅支持字符串匹配,若需对数值字段(如SALARY)进行模糊查询,需先转换为字符串(PostgreSQL 用::text)。

案例 :找出salary以 "20" 开头的员工

sql

复制代码
select * from company where salary::text like '20%';  -- 将salary转为文本后匹配

结果

ID NAME AGE ADDRESS SALARY
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0

五、集合筛选:INNOT IN

IN用于判断字段值是否在指定集合中,NOT IN则相反。

1. IN:匹配集合中的任意值

案例:找出年龄为 25 或 27 的员工

sql

复制代码
select * from company where age in (25, 27);  -- age是25或27

结果

ID NAME AGE ADDRESS SALARY
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0

2. NOT IN:排除集合中的值

案例:找出年龄不为 25 且不为 27 的员工

sql

复制代码
select * from company where age not in (25, 27);  -- age不是25也不是27

结果

ID NAME AGE ADDRESS SALARY
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0

六、范围查询:BETWEEN

BETWEEN用于匹配 "某个范围内的值",包含边界值(等价于>=<=)。

案例:找出年龄在 25 到 27 之间的员工(包括 25 和 27)

sql

复制代码
select * from company where age between 25 and 27;  -- 等价于 age >=25 and age <=27

结果

ID NAME AGE ADDRESS SALARY
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0

七、结果限制:LIMITOFFSET

LIMIT用于限制返回的记录数,OFFSET用于指定从第几条记录开始(默认从 0 开始),常用于分页查询。

1. LIMIT:取前 N 条记录

案例:列出表中前 3 条记录

sql

复制代码
select * from company limit 3;

结果(前 3 条):

ID NAME AGE ADDRESS SALARY
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0

2. LIMIT + OFFSET:分页查询

案例:列出表中第 4-7 条记录(从第 3 条后开始,取 4 条)

sql

复制代码
select * from company limit 4 offset 3;  -- OFFSET 3 表示跳过前3条,LIMIT 4 表示取4条

结果(第 4-7 条):

ID NAME AGE ADDRESS SALARY
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0

总结:SELECT 检索核心用法速查表

需求场景 关键字 / 语法 示例
多条件同时满足 AND where age>=25 and salary>=65000
多条件满足其一 OR where age>=25 or salary>=65000
判断非空值 IS NOT NULL where age is not null
模糊匹配(字符串) LIKE + %/_ where name like 'Pa%'
匹配集合中的值 IN where age in (25,27)
排除集合中的值 NOT IN where age not in (25,27)
范围查询(包含边界) BETWEEN ... AND ... where age between 25 and 27
限制返回记录数 LIMIT limit 3
分页查询(跳过前 N 条) LIMIT ... OFFSET ... limit 4 offset 3

通过上述案例,可掌握SELECT检索的核心技巧。实际应用中,可根据业务需求组合多种条件,实现精准的数据提取。

相关推荐
浅拾光º2 小时前
mysql字符串截取,如何在MySQL备份文件中安全截取敏感字符串?
数据库·mysql·安全
鸠摩智首席音效师2 小时前
如何删除 MySQL 数据库中的所有数据表 ?
数据库·mysql·oracle
Hey! Hey!3 小时前
DBA 系统学习计划(从入门到进阶)
数据库·学习·dba
leo_yu_yty3 小时前
Mysql DBA学习笔记(客户端常用工具)
学习·mysql·dba
没有bug.的程序员3 小时前
SQL 执行计划解析:从 EXPLAIN 到性能优化的完整指南
java·数据库·sql·性能优化·explain·执行计划
qqxhb3 小时前
系统架构设计师备考第30天——关系数据库
数据库·系统架构·数据库设计·关系模式·范式·关系远算·完整性规则
小心草里有鬼3 小时前
Linux 数据库 Mysql8 主从复制
linux·运维·数据库·sql·mysql
chen_note3 小时前
Keepalived两个集群实验
linux·服务器·数据库·keepalived·高可用集群
笨蛋少年派4 小时前
SQL查询基础常用攻略
sql