0

0

数据库的检索语句

php中文网

php中文网

发布时间:2016-06-07 16:06:20

|

4394人浏览过

|

来源于php中文网

原创

1、select 基本用法 1.1简单的数据检索 1.1.1检索出需要的列 只要执行SELECT * FROM 名即可。SELECT * FROM T_Employee 。SELECT * FROM T_Employee语句会把数据库的所有列的信息从数据库中读出来,缓存到内存中。检索出所有的列的 SQL 语句为SELECT * FROM

1、select 基本用法

1.1简单的数据检索

1.1.1检索出需要的列

只要执行“SELECT * FROM 名”即可。SELECT * FROM T_Employee 。SELECT * FROM T_Employee语句会把数据库的所有列的信息从数据库中读出来,缓存到内存中。检索出所有的列的 SQL 语句为“SELECT * FROM T_Employee” ,其中的星号“*”就意味着“所有列” ,那么我们只要将星号 “*”替换成我们要检索的列名就可以了。如SELECT FNumber FROM T_Employee 。只要在 SELECT 语句后列出各个列的列名就可以了,需要注意的就是各个列之间要用半角的逗号“,”分隔开。比如我们执行下面的 SQL 语句:SELECT FName,FAge FROM T_Employee 。

1.1.2列别名

别名的定义格式为 “列名 AS 别名” , 比如我们要为 FNumber 字段取别名为 Number14
,FName 字段取别名为 Name、FAge 字段取别名为 Age、为 FSalary字段取别名为 Salary,那么编写下面的 SQL 即可:SELECT FNumber AS Number1,FName AS Name,FAge AS Age,FSalary AS Salary FROM
T_Employee 。定义别名的时候“AS”不是必须的,是可以省略的,比如下面的 SQL 也是正确的:
SELECT FNumber Number1,FName Name,FAge Age,FSalary Salary FROM T_Employee 。

1.1.3按条件过滤

由于将表中所有的数据都从数据库中检索出来,所以会有非常大的内存消耗以及网络资源消耗。 需要逐条检索每条数据是否符合过滤条件,所以检索速度非常慢,当数据量大的时候这种速度是让人无法忍受的。无法实现复杂的过滤条件。SELECT FName FROM T_Employee WHERE FSalary25 。使用 WHERE 子句只需指定过滤条件就可以,我们无需关心数据库系统是如果进行查找的,数据库会采用适当的优化算法进行查询,大大降低了 CPU 资源的占用。

SQL 标准中规定了下面几种聚合函数:

\

这几个聚合函数都有一个参数,这个参数表示要统计的字段名。 第一个例子是查询年龄大于 25 岁的员工的最高工资,执行下面的 SQL:
SELECT MAX(FSalary) FROM T_Employee WHERE FAge>25 。

为了方面的引用查询的结果, 也可以为聚合函数的计算结果指定一个别名, 执行下面的 SQL:

SELECT MAX(FSalary) as MAX_SALARY FROM T_Employee WHERE FAge>25 。

SELECT AVG(FAge) FROM T_Employee WHERE FSalary>3800 。

SELECT SUM(FSalary) FROM T_Employee 。

SELECT MIN(FSalary),MAX(FSalary) FROM T_Employee 。

最后一个介绍的函数就是统计记录数量的 COUNT,这个函数有一特别,因为它的即可以像其他聚合函数一样使用字段名做参数, 也可以使用星号 “*” 做为参数。 我们执行下面的 SQL:
SELECT COUNT(*),COUNT(FNumber) FROM T_Employee 。

COUNT(*)统计的是结果集的总条数,而COUNT(FName)统计的则是除了结果集中 FName 不为空值(也就是不等于 NULL)的记录的总条数。

1.1.4排序

SELECT 语句允许使用 ORDER BY 子句来执行结果集的排序方式。ORDER BY 子句位于 SELECT 语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列)还是降序(从大到小排列)。比如下面的 SQL 语句演示了按照年龄排序所有员工信息的列表:
SELECT * FROM T_EmployeeORDER BY FAge ASC 。

ASC 代表升序,升序是默认的排序方式。SELECT * FROM T_Employee ORDER BY FAge 。

如果需要按照降序排列,那么只要将 ASC 替换为 DESC 即可,其中 DESC 代表降序。执行下面的 SQL 语句:SELECT * FROM T_Employee ORDER BY FAge DESC 。

因为 ORDER BY语句允许指定多个排序列,各个列之间使用逗号隔开即可。执行下面的 SQL 语句:
SELECT * FROM T_Employee ORDER BY FAge DESC,FSalary DESC 。 可以看到年龄相同的记录按照工资从高到低的顺序排列了。对于多个排序规则,数据库系统会按照优先级进行处理。数据库系统首先按照第一个排序规则进行排序; 如果按照第一个排序规则无法区分两条记录的顺序, 则按照第二个排序规则进行排序; 如果按照第二个排序规则无法区分两条记录的顺序, 则按照第三个排序规则进行排序; ……以此类推。ORDER BY 子句完全可以与 WHERE 子句一起使用,唯一需要注意的就是 ORDER BY 子句要放到 WHERE 子句之后,不能颠倒它们的顺序。SELECT * FROM T_Employee WHERE FAge>23 ORDER BY FAge DESC,FSalary DESC 。

1.2高级过滤功能

高级数据过滤技巧几乎同样适用于 Update 语句和 Delete 语句中的Where 子句。

1.2.1通配符过滤

SQL 中的通配符过滤使用 LIKE 关键字,是一个二元操作符, 左表达式为待匹配的字段, 而右表达式为待匹配的通配符表达式。

1.2.1.1单字符匹配

“b_d” 匹配第一个字符为 b、第二个字符为任意字符、第三个字符为 d 的字符串。通配符表达式“_oo_”匹配第一个字符为任意字符、第二个字符为 o、第三个字符为 o、第四个字符为任意字符的字符串。

SELECT * FROM T_Employee WHERE FName LIKE '_erry' 。

SELECT * FROM T_Employee WHERE FName LIKE '__n_' 。

1.2.1.2多字符匹配

进行多字符匹配的通配符为半角百分号“%” ,它匹配任意次数(零或多个)出现的任意字符。比如通配符表达式“k%”匹配以“k”开头、任意长度的字符串。SELECT * FROM T_Employee WHERE FName LIKE 'T%' 。

同徽B2C电子商务软件系统
同徽B2C电子商务软件系统

开发语言:java,支持数据库:Mysql 5,系统架构:J2EE,操作系统:linux/Windows1. 引言 32. 系统的结构 32.1 系统概述 33. 功能模块设计说明 43.1 商品管理 43.1.1 添加商品功能模块 53.1.2 商品列表功能模块 83.1.3 商品关联功能模块 93.

下载

SELECT * FROM T_Employee WHERE FName LIKE '%n%'。

字符匹配和多字符匹配还可以一起使用。SELECT * FROM T_Employee WHERE FName LIKE '%n_' 。

1.2.2空值检测

没有添加非空约束列是可以为空值的(也就是 NULL)。待检测字段名IS NULL”,比如要查询所有姓名未知的员工信息,则运行下面的SQL语句:SELECT * FROM T_Employee WHERE FNAME IS NULL 。

如果要检测“字段不为空”,则要使用IS NOT NULL,使用方法为“待检测字段名IS NOT NULL”,比如要查询所有姓名已知的员工信息,则运行下面的SQL语句:SELECT * FROM T_Employee WHERE FNAME IS NOT NULL 。

SELECT * FROM T_Employee WHERE FNAME IS NOT NULL AND FSalary

1.2.3反义运算符

同时SQL提供了通用的表示 “不等于” 的运算符 “” , 这样 “不等于”、“不大于”和“不小于”就分别可以表示成“”、“=”。检索所有年龄不等于22岁并且工资不小于2000元”,我们可以编写下面的SQL语
句:SELECT * FROM T_Employee WHERE FAge22 AND FSALARY>=2000 。

因此要完成下面的功能“检索所有年龄不等于22岁并且工资不小于2000元”,我们可以编写下面的SQL语句:
SELECT * FROM T_Employee WHERE NOT(FAge=22) AND NOT(FSALARY

1.2.4多值检测

可以使用OR语句来连接多个等于判断。SQL语句如下:SELECT FAge,FNumber,FName FROM T_EmployeeWHERE FAge=23 OR FAge=25 OR FAge=28 。

SELECT FAge,FNumber,FName FROM T_Employee WHERE FAge IN(23,25,28) 。

1.2.5范围检测

检索所有年龄介于23岁到27岁之间的员工信息” ,可以使用下面的SQL语
句:SELECT * FROM T_Employee WHERE FAGE>=23 AND FAGE 测的语句“BETTWEEN AND”,它可以用来检测一个值是否处于某个范围中(包括范围的边界值,也就是闭区间)。使用方法如下“字段名 BETTWEEN 左范围值 AND 右范围值”。SELECT * FROM T_Employee
WHERE FAGE BETWEEN 23 AND 27 。

检索所有工资介于2000元到3000元之间以及5000元到8000元的员工信息” ,可以使用下面的SQL语句:
SELECT * FROM T_Employee WHERE (FSalary BETWEEN 2000 AND 3000)OR (FSalary BETWEEN 5000 AND 8000) 。

数据库系统对“BETTWEEN AND”进行了查询优化,使用它进行范围值检测将会得到比其他方式更好的性能,因此在进行范围值检测的时候应该优先使用“BETTWEEN AND”。需要注意的就是“BETTWEEN AND”在进行检测的时候是包括了范围的边界值的(也就是闭区间),如果需要进行开区间或者半开半闭区间的范围值检测的话就必须使用其他的解决方案了。

1.2.6低效的where 1=1

因为使用添加了 “1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描 (也就是全表扫描) 以比较此行是否满足过滤条件, 当表中数据量比较大的时候查询速度会非常慢。 因此如果数据检索对性能有比较高的要求就不要使用这种 “简便” 的方式。

1.3数据分组

SQL语句中使用GROUP BY子句进行分组,使用方式为“GROUP BY 分组字段”。分组语句必须和聚合函数一
起使用,GROUP BY子句负责将数据分成逻辑组,而聚合函数则对每一个组进行统计计算。

SELECT FAge FROM T_Employee GROUP BY FAge。 GROUP BY子句将检索结果划分为多个组,每个组是所有记录的一个子集。GROUP BY子句必须放到SELECT语句的之后,如果SELECT语句有WHERE子句,则GROUPBY子句必须放到WHERE语句的之后。

SELECT FAge FROM T_Employee WHERE FSubCompany = 'Beijing'GROUP BY FAge 需要分组的所有列都必须位于GROUP BY子句的列名列表中,也就是没有出现在GROUP BY子句中的列(聚合函数除外)是不能放到SELECT语句后的列名列表中的。

SELECT FAge,AVG(FSalary) FROM T_Employee GROUP BY FAge 。GROUP BY子句中可以指定多个列,只需要将多个列的列名用逗号隔开即可。指定多个分组规则以后, 数据库系统将按照定义的分组顺序来对数据进行逐层分组, 首先按照第一个分组列进行分组,然后在每个小组内按照第二个分组列进行再次分组……逐层分组,从而实现“组中组”的效果, 而查询的结果集是以最末一级分组来进行输出的。

SELECT FSubCompany,FDepartment FROM T_Employee GROUP BY FSubCompany,FDepartment 。

SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge 。

SELECT FSubCompany,FAge,COUNT(*) AS CountOfThisSubCompAge FROM T_Employee GROUP BY FSubCompany,FAge 。

SELECT FSubCompany,FAge,COUNT(*) AS CountOfThisSubCompAge FROM T_Employee GROUP BY FSubCompany,FAge ORDER BY FSubCompany 。

“COUNT(*)”对每一个分组统计总数,这样就可以统计出每个公司每个年龄段的员工的人数了。SUM、AVG、MIN、MAX也可以在分组中使用。比如下面的SQL可以统计每个公司中的工资
的总值:SELECT FSubCompany,SUM(FSalary) AS FSalarySUM FROM T_Employee GROUP BY FSubCompany 。

1.3.1having子句

有的时候需要对部分分组进行过滤,可以在数据库系统中执行下面的SQL的时候, 数据库系统会提示语法错误, 这是因为聚合函数不能在WHERE语句中使用,必须使用HAVING子句来代替,比如:SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING COUNT(*)>1 。

HAVING语句中也可以像WHERE语句一样使用复杂的过滤条件,比如下面的SQL用来检索人数为1个或者3个的年龄段,可以使用下面的SQL:SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee
GROUP BY FAge HAVING COUNT(*)=1 OR COUNT(*)=3 。

MYSQL中提供了LIMIT关键字用来限制返回的结果集, LIMIT放在SELECT语句的最后位置,语法为 “LIMIT 首行行号,要返回的结果集的最大数目” 。比如下面的SQL语句将返回按照工资降序排列的从第二行开始(行号从0开始)的最多五条记录:SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 2,5 。

DISTINCT关键字是用来进行重复数据抑制的最简单的功能,而且所有的数据库系统都支持DISTINCT,DISTINCT的使用也非常简单,只要在SELECT之后增加DISTINCT即可。 DISTINCT是对整个结果集进行数据重复抑制的, 而不是针对每一个列, 执行下面的SQL语句:SELECT DISTINCT FDepartment,FSubCompany FROM T_Employee 。DISTINCT是对整个结果集进行数据重复抑制的。

联合结果集
有的时候我们需要组合两个完全不同的查询结果集, 而这两个查询结果之间没有必然的联系,只是我们需要将他们显示在一个结果集中而已。在SQL中可以使用UNION运算符来将两个或者多个查询结果集联合为一个结果集中。

只要用UNION操作符连接这两个查询语句就可以将两个查询结果集联合为一个结果集,
SQL语句如下:
SELECT FNumber ,FName,FAge FROM T_Employee
UNION
SELECT FIdCardNumber ,FName,FAge FROM T_T empEmpl oyee 。

联合结果集的原则
联合结果集不必受被联合的多个结果集之间的关系限制,不过使用UNION仍然有两个基本的原则需要遵守:一是每个结果集必须有相同的列数; 二是每个结果集的列必须类型相容。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

616

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

194

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

91

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

54

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

598

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

56

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.3万人学习

Django 教程
Django 教程

共28课时 | 4.4万人学习

Excel 教程
Excel 教程

共162课时 | 17.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号