数据库单表查询 - 简单筛选查询

简介: 数据库单表查询 - 简单筛选查询

之前我们已经了解了SQL语言的分类,可以划分为:DDL(数据定义语言)、DML(数据操纵语言)、DQL(数据查询语言)、DCL(数据控制语言)、TPL(事务处理语言)、CCL(指针控制语言),本文将介绍DQL。

一、单表查询

单表查询指的是所需要查询的数据都包含在一个表中,我们只需要对一张表进行操作就可以完成查询,属于比较简单的查询。本文使用的测试数据表结构如下:

1. 语法结构

在进行查询时,需要用到的主要关键字包括:SELECT、FROM、WHERE。

  • SELECT:指定要查询的列,会直接影响结果表的列的个数
  • FROM:指定要查询的表
  • WHERE:[可选],在需要进行数据筛选时使用,用于引导查询条件

在使用表名和列名时,为了防止和关键字冲突,可以使用反引号,语法结构如下:

SELECT `列名`,`列名`,... FROM `表名` WHERE 查询条件;

2. 全字段查询

全字段查询代表直接查询出表中所有的列,我们可以直接用*号代表,会按照定义数据表时指定的字段顺序,顺次罗列出数据表的所有列,我们也可以手动写出每个列的名称来进行顺序的调整。

SELECT * FROM student;

3. 部分列查询

部分列查询指的是只需要显示表中的某几列,此时需要罗列出每个列的名称,用逗号隔开,所声明的列的名称必须与表中已经定义的列名相同。

SELECT S_no,S_name,S_sex FROM Student;

4. 别称的使用

如果在进行数据查询时,我们想要自定义结果表所显示的列名(表头),可以使用AS关键字(多数情况下可省略)。同时,别称还能方便的代替表名或某些表达式(避免重复计算)。

SELECT S_no AS `学号`,S_name AS `姓名`,S_sex AS `性别` FROM Student;

二、简单筛选

如果说SELECT后面的字段个数影响了查询结果的列,那么数据筛选(或称条件查询)就会影响到查询结果的行,有很多不符合条件的数据会被过滤掉。

在进行数据筛选时,会直接用某个列的列名来做为参照,该列下的每个数据都会和给定的条件进行比较,如果满足就会被取出,在进行比较时一定要注意数据类型的匹配

1. 简单运算符

最简单的运算符其实就是和是否相等,是否大于或小于相关的符号:

  • 等于(=)
SELECT S_no AS `学号`,S_name AS `姓名`,S_sex AS `性别` 
FROM Student
WHERE S_sex = '男';

  • 不等于(<>)
SELECT S_no AS `学号`,S_name AS `姓名`,S_sex AS `性别` 
FROM Student
WHERE S_sex <> '男';

  • 大于
SELECT * FROM Choice
WHERE Score > 80;

  • 小于
SELECT * FROM Choice
WHERE Score < 80;

  • 小于等于
SELECT * FROM Course
WHERE Course_score <= 5;

  • 大于等于
SELECT * FROM Course
WHERE Course_score >= 3;

2. 范围查询

如果我们需要查找的数据在某一个区间内,并且两边都是闭区间,这个时候可以使用BETWEEN xxx AND xxx。

SELECT * FROM Course
WHERE Course_score BETWEEN 5 AND 8;

3. 空值判断

在数据库中存在一个特殊的数据类型,用于标记未存入任何数据,用NULL表示。需要注意的是空字符串并不等同于NULL

  • IS NULL:为空判断
SELECT * FROM Choice
WHERE Score IS NULL;

  • IS NOT NULL:非空判断
SELECT * FROM Choice
WHERE Score IS NOT NULL;

4. 模糊查询

在有些时候我们只模糊记得数据的部分信息,或在商城中需要做根据部分名称来查询商品的功能,这个时候据需要使用LIKE关键字。使用LIKE时,需要和通配符一同使用,经常与LIKE搭配的通配符如下:

  • %:任意个数的任意字符,包括0个字符
  • _:任意的单个字符
SELECT * FROM Teacher
WHERE T_name LIKE '王%';

SELECT * FROM Teacher
WHERE T_name LIKE '%一%';

5. 去重查询

在进行数据查询时,如果某一列存在重复的数据,而我们只需要知道都有哪些数据出现过,这个时候就可以使用去重,将重复的数据过滤掉。需要注意的是:去重查询相当于是一种查询模式,与具体的列无关。默认查询时,在SELECT关键字省略了ALL,意为全量数据查询模式,在使用DISTINCT时要紧跟SELECT关键字。

  • 查询单列

如果只查询一列的数据,得到的就是这一列去重后的结果:

SELECT DISTINCT Course_no 
FROM Choice;

  • 查询多列

如果查询的列有多个,将会显示这两个列的唯一组合,也就是说如果单独看某一列数据,很有可能会有重复数据,但这些列的数据的组合一定是唯一的。

SELECT DISTINCT Course_no,S_no
FROM Choice;

6. 多值匹配

如果想要表达某个值可能是一组值中的一个,这样的逻辑,可以使用关键字IN。在IN之后使用一对括号,其中罗列多个值,如果列中的数据在这些值中出现,则代表匹配。

SELECT S_no,Class_no,S_name,S_sex 
FROM Student
WHERE Class_no IN ('js0001','js0002');

三、条件运算

1. AND

在WHERE中可以使用AND连接两个条件,代表同时成立。

2. OR

在WHERE中可以使用OR连接两个条件,代表成立其一即取出数据。

3. NOT

在WHERE中可以使用NOT(条件)来表达反向的逻辑。

目录
相关文章
|
29天前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
29 6
|
27天前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
31 0
|
2月前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
41 2
|
2月前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
2月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
2月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
343 1
|
2月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
131 0
|
11天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
38 3
|
11天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
38 3
|
11天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
52 2