《数据库系统与应用技术》课件 第2章 MySQL数据库与SQL基础_第1页
《数据库系统与应用技术》课件 第2章 MySQL数据库与SQL基础_第2页
《数据库系统与应用技术》课件 第2章 MySQL数据库与SQL基础_第3页
《数据库系统与应用技术》课件 第2章 MySQL数据库与SQL基础_第4页
《数据库系统与应用技术》课件 第2章 MySQL数据库与SQL基础_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MySQL数据库与SQL基础主讲:何广赢时间:2026/01/01CONTENTS目录2.1MySQL数据库操作环境MySQL简介·核心特点·技术优势·安装与工具2.2SQL概述及功能数据库语言演进·SQL诞生与发展·五大特点·三级模式·四大功能2.3MySQL数据类型数值类型·字符类型·二进制类型·日期类型2.4MySQL运算符和表达式算术运算符·比较运算符·逻辑运算符·非符号运算符·优先级2.5MySQL常用函数比较函数·数值函数·字符函数·日期函数2.6本章小结知识回顾·最佳实践·学习路径·案例分析2.1MySQL数据库操作环境01MYSQLOVERVIEWMySQL数据库简介核心定位MySQL是当前非常流行的开源关系数据库管理系统,使用C语言和C++开发,采用CMake编译。作为Web应用中最广泛使用的数据库之一,MySQL以其高性能、高可靠性和易用性著称。开发与维护现由Oracle公司开发、发布及提供支持,确保产品的持续更新与技术支持。MariaDB分支MariaDB是MySQL的一个分支,由开源社区维护,采用GPL授权许可,保持与MySQL的API和命令行兼容。版本获取MySQL最新版本可以从官方网站下载:教学版本本书以MySQL8.0社区版本为例进行数据库应用知识的讲解,该版本功能完善、稳定可靠。KEYCHARACTERISTICSMySQL的核心特点01数据库管理系统MySQL是一个完整的数据库管理系统(DBMS),提供数据存储、管理、查询等全方位功能,确保数据的安全性、完整性和一致性。02关系型数据库MySQL采用关系型数据模型,数据以表格形式组织,支持SQL(结构化查询语言)进行数据操作,表与表之间可以建立关联关系。03开源免费MySQL遵循GPL协议,开源且免费获取,用户可根据需要修改源代码。商业许可:如需规避GPL约束或商业应用,可向Oracle购买商业许可04灵活的部署模式MySQL既可以在客户机/服务器模式下使用,支持远程访问和并发处理;也可以嵌入到应用系统中,作为轻量级数据库解决方案。核心特点总结DBMS数据库系统RDBMS关系型OpenSource开源免费Multi-mode多模式部署TECHNICALADVANTAGESMySQL的技术优势跨平台支持MySQL支持多种主流服务器平台,包括Windows、Linux、macOS等,具有良好的跨平台特性。优势:应用系统可以在不同操作系统间无缝迁移,无需修改数据库代码SQL标准化MySQL支持结构化查询语言SQL,这是关系数据库的标准语言,降低了学习成本。优势:只要会用SQL,就能快速掌握MySQL,技能可迁移到其他关系数据库成本优势MySQL是开源免费的数据库系统,用户可以免费获取和使用,极大降低了开发成本。优势:特别适合中小企业和个人开发者,减少软件采购成本高并发处理MySQL支持客户机/服务器模式,能并发处理多用户访问,提供高性能的并发服务。优势:通过优化的存储引擎和查询缓存,支持数千个并发连接多语言支持MySQL支持多种开发语言,包括C++、Java、PHP、Python等。优势:提供丰富的API接口和驱动库,无缝集成各类应用开发框架性能与扩展MySQL采用优化的存储引擎架构(如InnoDB),支持事务处理、行级锁定、外键约束等高级特性。优势:支持主从复制、分区表、查询优化等高可用和扩展方案INSTALLATION&TOOLSMySQL数据库的安装安装步骤1从官网下载MySQL8.0社区版安装包2运行安装向导,选择安装类型(开发者/服务器/自定义)3配置服务器实例(端口、服务名、字符集等)4设置root用户密码,创建用户账户5完成安装,启动MySQL服务配置要点默认端口:3306字符集推荐:utf8mb4存储引擎:InnoDB安全配置:设置强密码,限制远程访问常用图形化管理工具图形化管理工具让用户通过图形化界面进行数据库管理,包括创建数据库、创建数据表、修改数据库、删除数据表、数据查询等操作,极大提高了工作效率。MySQLWorkbench官方出品,功能强大,支持数据库设计、开发、管理一体化Navicat界面友好,支持多种数据库,商业软件功能全面SQLyog轻量级工具,启动快速,适合日常查询和维护工具选择建议初学者:推荐使用MySQLWorkbench,免费且功能完整,文档丰富企业用户:推荐Navicat,支持团队协作,提供高级功能2.2SQL概述及功能02LANGUAGEEVOLUTION数据库语言的演进发展历程早期的数据库系统直接面向终端用户,为了方便操作,系统提供了一套操作指令集。随着数据库技术的发展,这些指令集逐渐演化为了操作数据库的语言。数据库语言主要包括数据定义和数据操纵两大核心功能模块。现代演进随着数据库系统成为应用系统的数据存储组件,开始出现操作数据库的调用接口API(ApplicationProgrammingInterface,应用程序接口)。虽然有些数据库系统提供调用接口支持,但大部分依然提供对SQL的支持,如NoSQL数据库也逐渐增加SQL接口。1.数据定义子语言(DDL)数据定义子语言(DataDefinitionLanguage)用来定义数据库模式,包括数据库模式定义、存储结构和存取方法定义,以及数据库模式的修改和删除功能。处理流程:DDL处理程序接收用DDL表示的数据模式定义,转换为内部表示形式,存储到数据字典中,并在存储设备上创建相关的数据库文件,建立物理数据库。2.数据操纵子语言(DML)数据操纵子语言(DataManipulationLanguage)用来表示用户对数据库的操作请求,通常包括查询、插入、删除、修改四种核心操作。过程性语言要求说明需要什么数据和怎样搜索数据非过程性语言只需说明需要什么数据,无需说明搜索过程特点对比:非过程性语言比过程性语言易学易懂,但产生的处理程序代码效率相对较低。DML的核心是数据查询,因此有时也称为数据查询语言。SQLHISTORYSQL的诞生与发展1974SEQUEL诞生IBM公司的研究员Boyce和Chamberlin开发了SEQUEL(StructuredEnglishQueryLanguage),并在IBM研发的关系数据库管理系统SystemR上成功实现。SEQUEL是SQL的前身,奠定了结构化查询语言的基础。后续SQL正式发布在SEQUEL基础上推出了SQL(StructuredQueryLanguage,结构化查询语言),将数据定义和数据操纵功能集成为一体的典型数据库语言。SQL语言设计简洁、功能强大,迅速获得了业界的认可。1986美国标准美国国家标准局(ANSI)批准将SQL作为关系数据库语言的美国标准,同年公布了SQL标准文本(SQL-86)。SQL-86的发布标志着SQL语言正式成为美国国家标准。1987-1989国际标准与完善1987年,国际标准化组织(ISO)也通过了SQL标准,使其成为国际标准。1989年发布的SQL-89对SQL进行了进一步修改和完善。SQL-89的发布标志着SQL在推动数据库技术发展中的重要地位。SQLCHARACTERISTICSSQL的五大特点01功能综合风格统一SQL集数据定义DDL、数据操纵DML、数据查询DQL和数据控制DCL功能于一体,语言风格统一,可独立完成数据库生命周期的所有活动。02高度非过程化SQL是高度非过程化语言,进行数据操作时只需指出想要的结果,无需给出操作处理过程。存取路径的选择和SQL的操作过程由数据库系统自动完成,提高了数据独立性。03面向集合的操作方式SQL采用集合操作方式,不仅操作对象、查找结果可以是记录的集合,而且插入、删除、修改操作的对象也可以是记录的集合,支持批量数据处理。04两种使用方式一种方式是用户直接通过命令行窗口或图形化管理工具使用SQL对数据库进行操作(自含式语言);另一种方式是将SQL语言嵌入到高级语言程序中(嵌入式语言)。05语言简洁、易学易用SQL虽然功能强大,但只用了9个核心动词,语言简洁明了,易于学习和使用。主要分为数据查询、数据定义、数据操纵、数据控制四类。数据查询SELECT数据定义CREATEDROPALTER数据操纵INSERTUPDATEDELETE数据控制GRANTREVOKETHREE-LEVELSCHEMASQL的三级模式结构外外模式用户视图层对应组件VIEW(视图)视图是从基本表或其他视图中导出的表,本身不独立存储在数据库中,数据库中只存放视图的定义而不存放视图对应的数据。核心特性视图是一个虚表,数据仍存放在导出视图的基本表中,用户可以像操作基本表一样对视图进行查询。概模式逻辑结构层对应组件BASETABLE(基本表)基本表是独立存在的,在关系数据库管理系统中一个关系就对应一个基本表,一个或多个基本表对应一个存储文件。核心特性基本表是独立存在的关系,用户可以对其执行查询、插入、更新、删除等各种操作。内内模式物理存储层对应组件STOREDFILE(存储文件)存储文件的逻辑结构和物理结构组成了关系数据库的内模式,一个表可以带若干索引,索引也存放在存储文件中。核心特性存储文件的物理结构由数据库管理系统设计确定,对用户透明,用户无需关心底层存储细节。核心要点:用户可以用SQL对视图和基本表进行查询。在用户眼中,视图和基本表都是关系,用户可以在视图上再定义视图,形成多层次的数据抽象体系。SQLFUNCTIONSSQL四大功能分类数据查询DQLDataQueryLanguage核心动词SELECT用于数据表记录的查询,提供强大的数据查询功能,是SQL中使用频率最高的语言。支持单表查询、多表连接查询支持条件筛选、排序、分组统计支持子查询、聚合函数、窗口函数数据定义DDLDataDefinitionLanguage核心动词CREATEDROPALTER用来定义数据库模式、表、视图、索引等数据库对象,建立数据库的整体结构。CREATE:创建数据库、表、视图、索引DROP:删除数据库、表、视图、索引ALTER:修改表结构(增加、删除、修改列)数据操纵DMLDataManipulationLanguage核心动词INSERTUPDATEDELETE用于对数据库中数据的添加、删除、修改等操作,管理表中的数据记录。INSERT:向表中插入新的数据记录UPDATE:修改表中已有数据记录DELETE:从表中删除数据记录数据控制DCLDataControlLanguage核心动词GRANTREVOKE用于对数据库中用户的授权和权限回收操作,控制用户对数据库资源的访问权限。GRANT:授予用户特定权限REVOKE:回收用户特定权限保证数据库安全性,防止未授权访问2.3MySQL数据类型03NUMERICTYPES数值类型概览数值类型说明MySQL支持标准SQL类型,同时提供自己专用的数据类型。为了方便数据迁移到其他数据库,建议优先使用标准SQL中的数据类型。数值类型中常用的类型有整数类型INT、小数类型DECIMAL等,数据类型不区分大小写。表2.1常用的数值类型类型大小(字节)说明INT4取值范围[-2,147,483,648,2,147,483,647]BIGINT8取值范围[-2^63,2^63],存放较大整数值SMALLINT2取值范围[-32,768,32,768],存放较小整数值FLOAT4单精度浮点数DOUBLE8双精度浮点数,存储高精度小数值NUMERIC(p,d)4定点数,p位数字,小数点后d位DECIMAL(p,d)4同NUMERIC,定点数,精度更高类型选择建议整数类型根据数值范围选择INT、BIGINT或SMALLINT金额计算推荐使用DECIMAL,避免浮点数精度问题科学计算使用FLOAT或DOUBLE,精度要求高用DOUBLE注意事项超出取值范围会报错或截断UNSIGNED可扩大正数范围ZEROFILL可填充前导零INTEGERTYPES整数类型详解INT整数类型存储空间4字节(32位)占用4个字节(32位),是比较常用的数据类型,适合存储一般大小的整数。取值范围最小值-2,147,483,648~最大值2,147,483,647应用场景用户ID、订单号、年龄、数量等常规整数BIGINT大整数类型存储空间8字节(64位)占用8个字节(64位),也称长整型,用来存储较大的整数。取值范围最小值-2^63~最大值2^63应用场景大数据量表的自增ID、时间戳、统计计数SMALLINT小整数类型存储空间2字节(16位)占用2个字节(16位),也称短整型,用来存储较小的整数,节省存储空间。取值范围最小值-32,768~最大值32,768应用场景状态标识、性别、小范围计数、节省存储空间选择原则:根据实际数据范围选择合适类型,既要满足需求又要节省空间。INT是最常用的整数类型,BIGINT适合大数据场景,SMALLINT适合小范围数据。FLOATINGPOINT&DECIMAL浮点数与定点数FLOAT存储空间4字节(32位)精度类型单精度约7位有效数字单精度浮点数,占用4个字节(32位),适合存储精度要求不高的小数。DOUBLE存储空间8字节(64位)精度类型双精度约15位有效数字双精度浮点数,占用8个字节(64位),与FLOAT相比可以存储具有更高精度的小数值。NUMERIC(p,d)参数说明p:总位数(不包括符号、小数点)d:小数点后的位数定点数,占用4个字节(32位),提供精确的数值表示,适合金额计算场景。DECIMAL(p,d)与NUMERIC关系与NUMERIC类似,也是定点数,由p位数字组成,小数点后面有d位数字,占用4个字节(32位)。在MySQL中,NUMERIC和DECIMAL实现相同的功能,建议统一使用DECIMAL。重要提示:浮点数存在精度误差,不适合金额等精确计算场景。DECIMAL是精确表示,推荐用于财务数据。FLOAT适合科学计算,DOUBLE适合高精度数值。CHARACTERTYPES字符类型概览表2.2常用的字符类型类型大小(字节)说明CHAR(n)n固定长度为n的字符串,n取值[0,255]VARCHAR(n)n可变长度为n的字符串,n最大取65535TEXT-可变长度字符串,最大长度65535定CHAR(n)固定长度字符串,可以包含字符、数字和特殊字符,n表示最大长度。存储特性不足长度用空格填充,可能造成空间浪费变VARCHAR(n)可变长度字符串,可以存储长度可变的字符串,没有填充。存储特性存储大小等于实际长度,空间效率高长TEXT长文本字符串,最大长度65535字节,适合存储大段文本。存储特性可变长度,适合文章内容、描述等推荐使用VARCHAR由于其大小可变的特性,虽然性能略低于CHAR,但存储空间较小,在实际工作中比较常用。空间利用率高灵活性好适用场景广泛选择建议定长数据如邮政编码、身份证号,用CHAR变长数据如姓名、地址、邮箱,用VARCHAR长文本如文章内容、评论,用TEXTCHARVSVARCHARCHARvsVARCHAR深度对比定CHAR(n)固定长度字符串存储机制固定长度字符串,无论实际内容长度如何,都会占用n个字节的存储空间。示例:CHAR(10)存储'abc',实际占用10字节,后7字节用空格填充性能特点由于长度固定,性能优于VARCHAR,不需要计算实际长度和额外的长度存储开销,适合频繁更新的场景。空间效率如果存储不定长度的数据会导致空间浪费,因为不足长度的部分会用空格填充。适用场景长度固定的数据(如身份证号、邮政编码)频繁更新的表,减少碎片产生对查询性能要求高的场景变VARCHAR(n)可变长度字符串存储机制可变长度字符串,存储大小等于字符串的实际长度,最多可以存储n个字符。示例:VARCHAR(10)存储'abc',实际占用3字节(或加上长度字节)性能特点由于长度可变,性能不如CHAR,需要额外的1-2字节存储长度信息,更新时可能产生碎片。空间效率存储空间较小,按实际长度存储,没有空间浪费,特别适合存储长度不确定的数据。适用场景长度可变的数据(如姓名、地址、邮箱)对存储空间敏感的场景大多数业务字段(在实际工作中最常用)TEXTTYPETEXT长文本类型TEXT类型长文本字符串最大长度65,535字节用于存储可变长度的长字符串,最大长度为65,535字节,适合存储大段文本内容。存储机制TEXT类型采用可变长度存储,实际占用空间等于内容长度加上少量额外开销,与VARCHAR类似但支持更长的文本。典型应用场景文章内容博客文章、新闻内容、产品介绍等大段文字评论内容用户评论、留言、反馈等文本信息详细描述商品详情、项目描述、用户简介等代码/配置存储JSON、XML、HTML等格式数据TEXTvsVARCHARVARCHAR优势支持索引,查询性能好,可设置默认值TEXT优势支持更长文本(65,535字节),不受行大小限制选择建议一般文本用VARCHAR,超长文本用TEXTBINARYTYPES二进制类型概览表2.3二进制类型类型大小(字节)说明BINARY(n)n固定长度的二进制数据类型VARBINARY(n)n类似于VARCHAR,但只接受二进制数据BLOB(n)n二进制大对象,存储较长二进制字符串BINARY(n)类似于CHAR数据类型,但只接受二进制字符串或二进制数据,固定长度n个字节。应用场景存储图像、文件或序列化对象VARBINARY(n)类似于VARCHAR数据类型,但只接受二进制字符串或二进制数据,可变长度。优势空间效率高,按实际长度存储BLOB(n)二进制大对象(BinaryLargeObject),用来存储较长的二进制字符串。典型应用存储图像、音频、PDF等二进制文件使用建议BINARY/VARBINARY可以用于存储图像、文件或任何序列化对象,但不建议将这些文件以二进制类型存放到数据库中。推荐方案建议以单独的文件存放到磁盘上,数据库中只存储文件路径,方便查找和读取。BLOB类型说明适合场景BLOB适合在数据库里存储二进制媒体文件,比如图像和mp3,但在开发时文件一般单独存放。实际应用该字段很少使用,现代应用通常采用文件服务器存储二进制文件。BLOBAPPLICATIONBLOB类型的应用建议BLOB类型特性BinaryLargeObject定义与用途BLOB是二进制大对象,用来存储较长的二进制字符串。BLOB适合在数据库里存储二进制媒体文件,比如图像、mp3音频文件、PDF文档等。技术特点:BLOB类型可以存储大量二进制数据,最大支持64KB(不同数据库可能有所差异)实际使用情况虽然在技术上可行,但在实际开发时文件一般单独存放,不存放到数据库中,所以该字段很少使用。不推荐方案不建议将大文件以二进制类型直接存放到数据库中性能问题大文件会占用大量数据库存储空间,影响查询性能备份困难数据库备份文件会变得非常庞大,备份和恢复时间长访问不便文件内容需要应用程序处理,不能直接访问推荐方案建议以单独的文件存放到磁盘上,数据库中只存储文件路径性能优势数据库存储小,查询速度快,系统响应好便于管理文件可直接访问,支持CDN加速,方便查找易于扩展可使用专门的文件服务器或对象存储服务DATE&TIMETYPES日期类型概览表2.4日期类型类型大小格式说明DATE3YYYY-MM-DD存储年、月、日的值TIME3HH:MM:SS存储小时、分、秒的值DATETIME8YYYY-MM-DDHH:MM:SS存储完整日期和时间DATE存储空间3字节日期类型,只存放日期,不存放时间,存储年、月、日的值。TIME存储空间3字节时间类型,只存放时间,存储小时、分、秒的值。DATETIME存储空间8字节既存放日期又存放时间,存储完整日期时间信息。选择建议仅需要日期使用DATE,如生日、节假日仅需要时间使用TIME,如营业时间、时长需要日期和时间使用DATETIME,如创建时间、订单时间注意事项MySQL5.6+支持毫秒级精度考虑时区问题,必要时使用TIMESTAMP日期函数可方便进行计算和格式化APPLICATIONSCENARIOS日期类型的应用场景DATE仅日期生日用户生日、公司成立纪念日等节假日法定节假日、特殊纪念日计划日期项目开始日期、截止日期历史日期事件发生日期、记录日期TIME仅时间营业时间商店开门时间、关门时间持续时间任务预计耗时、活动时长计时数据比赛成绩、执行时间统计提醒时间每日提醒时间、定时任务DATETIME日期+时间创建时间用户注册时间、记录创建时间订单时间订单创建时间、支付时间更新时间记录最后修改时间、日志时间交易时间转账时间、交易完成时间2.4MySQL运算符和表达式04ARITHMETICOPERATORS算术运算符总览算术运算符说明算术运算符主要用于数学运算,可以直接对数据库表中的字段值进行算术运算,实现数据的计算和处理。包括加、减、乘、除、取模五种基本运算,运算符的优先级决定了表达式中计算的先后顺序。表2.5算术运算符运算符名称说明+加计算两个值或表达式的和-减计算两个值或表达式的差*乘计算两个值或表达式的乘积/除计算两个值或表达式的商%求余/求模计算两个值或表达式的余数加法运算用于数值相加,字符串会尝试转换为数值进行运算,NULL参与运算结果为NULL。减法运算用于数值相减,可用于日期计算(如计算两个日期间隔天数)。乘法运算用于数值相乘,适合计算总金额、统计汇总等场景。重要提示:在SQL中,"+"只表示加运算符,会将字符串转换为数值进行运算,没有字符串连接功能。两个字符串相连接需要使用CONCAT()函数。ADDITION&SUBTRACTION加减运算规则加法运算规则规则1:整数±整数=整数SELECT5+3;结果为8整数类型值对整数进行加法,结果还是整数规则2:整数±浮点数=浮点数SELECT5+3.14;结果为8.14整数类型值对浮点数进行加法,结果是浮点数规则3:字符串自动转换SELECT5+'5';结果为10字符串'5'转换为整数5参与运算规则4:NULL参与运算SELECT5+NULL;结果为NULLNULL参与任何运算,结果都是NULL减法运算规则减法运算遵循与加法相同的规则,优先级相同,都是从左到右依次计算。实际应用示例UPDATEdoctorSETWorkingYears=WorkingYears+1;将doctor表中所有人的工作年限加1注意事项优先级加法和减法优先级相同,低于乘除类型转换非数字字符串转换为0参与运算字符串连接SQL中不能使用+连接字符串MULTIPLICATION,DIVISION&MODULO乘除与求模运算乘法运算规则一个数乘以浮点数1后变成浮点数,结果的数据类型取决于操作数类型。SELECT5*1.0;结果为5.0整数乘以浮点数结果为浮点数优先级乘法和除法的优先级相同,高于加减法,低于括号。除法运算规则一个数除以整数后,不管是否能除尽,结果都为一个浮点数。SELECT10/4;结果为2.5整数除以整数结果为浮点数特殊处理一个数除以0结果为NULL,避免了数学上的除零错误。求模运算定义求模就是求余数,返回第一个操作数除以第二个操作数后的余数。SELECT10MOD3;结果为110除以3余数为1应用常用于判断奇偶性、循环分组、分页计算等场景。实用技巧:乘除运算优先级高于加减,可以使用括号改变运算顺序。求模运算可以用MOD函数或%运算符,两者功能相同。COMPARISONOPERATORS比较运算符总览表2.6比较运算符运算符名称说明=等于运算符判断两个值或表达式是否相等<>或!=不等于运算符判断两个值或表达式是否不相等<小于运算符判断前面的值是否小于后面的值<=小于等于运算符判断前面的值是否小于等于后面的值>大于运算符判断前面的值是否大于后面的值>=大于等于运算符判断前面的值是否大于等于后面的值返回结果说明1比较结果为真0比较结果为假NULL其他情况主要应用比较运算符经常被用在SELECT查询语句的条件中,返回符合条件的结果记录,是数据筛选的核心工具。典型场景精确匹配查询范围筛选查询不等值排除查询NULL处理核心规则如果比较的两边有任意一个为NULL,或者两边都为NULL,比较结果为NULL,而不是TRUE或FALSE。EQUALOPERATOR等于运算符的匹配规则=等于运算符等号运算符等号运算符(=)判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回0。1字符串比较规则如果等号两边都为字符串,则MySQL会按照字符串进行比较,比较的是每个字符的编码。2整数比较规则如果等号两边都是整数,则MySQL会按照整数来比较两个值的大小。3混合类型比较如果一边是整数,另一边是字符串,则MySQL会将字符串转化为数字进行比较。4NULL值处理如果等号两边有一个为NULL,则比较结果为NULL。查询示例示例1:数值相等查询SELECT*FROMdoctorWHEREWorkingYears=1;查询工作年限为1年的医生信息示例2:字符串相等查询SELECT*FROMdoctorWHEREGender='男';查询性别为"男"的医生信息SELECT*说明SELECT*表示选出某表中的所有字段注意事项字符集影响字符串比较结果'5'和5在比较时会被视为相等避免使用=判断NULL值OTHERCOMPARISONOPERATORS不等于、大于、小于运算符<>不等于运算符不等号运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。示例1:数值不等查询SELECT*FROMdoctorWHEREWorkingYears!=1;查询工作年限不为1的医生的所有信息示例2:字符串不等查询SELECT*FROMdoctorWHEREGender!='男';查询性别不为"男"的医生的所有信息>大于运算符判断前面的值、字符串或表达式是否大于后面的值、字符串或表达式,经常用于数值和日期的范围筛选。示例:大于查询SELECT*FROMdoctorWHEREWorkingYears>1;查询工作年限大于1的医生的所有信息大于等于查询SELECT*FROMdoctorWHEREWorkingYears>=1;查询工作年限大于等于1的医生的所有信息<小于运算符判断前面的值、字符串或表达式是否小于后面的值、字符串或表达式,与大于运算符配合使用实现范围查询。示例:小于查询SELECT*FROMdoctorWHEREWorkingYears<10;查询工作年限小于10的医生的所有信息小于等于查询SELECT*FROMdoctorWHEREWorkingYears<=10;查询工作年限小于等于10的医生的所有信息组合应用:不等于运算符不能判断NULL值,如果两边有NULL则结果为NULL。大于小于运算符经常与等于运算符配合实现区间查询,如WorkingYears>=3ANDWorkingYears<=10。LOGICALOPERATORS逻辑运算符总览表2.7逻辑运算符运算符名称说明NOT或!逻辑非不满足条件时为真AND或&&逻辑与多个表达式的值同时满足条件,则结果为真OR或||逻辑或多个表达式的值有一个满足即可返回结果说明在MySQL中,逻辑运算符的返回结果为1、0或者NULL,分别对应真、假和未知状态。1TRUE0FALSENULLUNKNOWN应用场景组合条件查询使用AND、OR组合多个查询条件条件取反使用NOT实现条件的反向筛选复杂逻辑构建多层次的查询逻辑优先级说明优先级顺序NOT>AND>OR,使用括号可以改变优先级,建议复杂逻辑明确使用括号。NOT&AND逻辑非与逻辑与运算!逻辑非运算符NOT或!逻辑非(NOT或!)运算符表示当给定的值为0时返回1;当给定的值为非0值时返回0。当给定的值为NULL时,返回NULL。真值表输入0返回1输入非0值返回0输入NULL返回NULL查询示例SELECT*FROMdoctorWHEREGender!='男';从doctor表中选出所有性别不等于"男"的医生&&逻辑与运算符AND或&&逻辑与(AND或&&)运算符是当给定的多个表达式的所有值均为非0值,并且都不为NULL时,返回1;当给定的一个值或者多个值为0时则返回0;否则返回NULL。真值表全为非0值返回1有0值返回0其他情况返回NULL查询示例SELECT*FROMdoctorWHEREgender='男'ANDWorkingYears>3;从doctor表选出性别为"男"且工作年限大于3的医生OROPERATOR逻辑或运算||逻辑或运算符OR或||逻辑或(OR或||)运算符是当给定的多个表达式的值有任何一个值为非0值时,返回1,否则返回0。当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;当两个值都为NULL时,返回NULL。真值表有非0值返回1全为0返回0含NULL特殊情况见说明查询示例SELECT*FROMdoctorWHEREWorkingYears<3||WorkingYears>10;查找工作年限小于3,或者工作年限大于10的医生的所有信息ORvsAND对比AND同时满足条件更严格结果集更小OR满足其一条件更宽松结果集更大使用技巧多条件组合OR适合实现多值匹配,如多个状态、多个类型范围查询配合比较运算符实现区间外查询优先级注意OR优先级低于AND,必要时使用括号NON-SYMBOLOPERATORS非符号运算符总览表2.8非符号运算符运算符名称说明ISNULL为空运算符判断值、字符串或表达式是否为空ISNOTNULL不为空运算符判断值、字符串或表达式是否不为空BETWEENAND两值之间的运算符判断一个值是否在两个值之间NOTBETWEENAND不在两值之间的运算符判断一个值是否不在两个值之间IN属于运算符判断一个值是否为列表中的任意一个值NOTIN不属于运算符判断一个值是否不是列表中的任意一个值LIKE模糊匹配运算符判断一个值是否符合模糊匹配规则特点说明非符号运算符提供了更直观、更易读的条件判断方式,相比符号运算符语义更明确,代码可维护性更好。包括NULL判断、区间判断、多值判断、模糊匹配等常用功能。优势特点可读性强语义清晰,代码更易理解功能强大涵盖常用查询场景易于维护逻辑清晰,修改方便使用建议NULL判断优先使用ISNULL/ISNOTNULL区间查询BETWEENAND比>=AND<=更简洁多值匹配IN比多个OR条件更优雅NULLOPERATORSNULL与NOTNULL运算符ISNULLISNULL为空运算符空运算符(ISNULL或ISNULL)判断一个值是否为NULL,如果为NULL则返回1,否则返回0。查询示例1SELECT*FROMdoctorWHEREWorkingYearsISNULL;查询工作年限为NULL的医生的所有信息查询示例2SELECT*FROMdoctorWHEREDoctorNameISNULL;查询医生姓名为NULL的医生的所有信息应用场景用于数据完整性检查,找出缺失数据的记录,进行数据清洗和补充。ISNOTNULLISNOTNULL不为空运算符非空运算符(ISNOTNULL)判断一个值是否不为NULL,如果不为NULL则返回1,否则返回0。查询示例1SELECT*FROMdoctorWHEREWorkingYearsISNOTNULL;查询工作年限不为NULL的医生的所有信息查询示例2SELECT*FROMdoctorWHEREDoctorNameISNOTNULL;查询医生姓名不为NULL的医生的所有信息应用场景筛选出数据完整的记录,确保关键字段都有值,保证业务数据的完整性。重要区别:判断NULL值不能使用=或!=,必须使用ISNULL或ISNOTNULL。=NULL的结果永远是NULL,不会返回TRUE或FALSE。这是SQL处理NULL值的标准行为。BETWEENOPERATORBETWEEN与NOTBETWEEN运算符BETWEENBETWEENAND两值之间的运算符BETWEENAND运算符判断一个值是否在两个值之间,包含边界值。如果值在指定范围内则返回1,否则返回0。查询示例SELECT*FROMdoctorWHEREWorkingYearsBETWEEN3AND10;查询工作年限在3和10之间的医生的所有信息(包含3和10)等效表达式WorkingYears>=3ANDWorkingYears<=10BETWEENAND等价于大于等于和小于等于的组合NOTBETWEENNOTBETWEEN不在两值之间的运算符NOTBETWEENAND运算符判断一个值是否不在两个值之间,是BETWEENAND的取反操作。如果值不在指定范围内则返回1,否则返回0。查询示例SELECT*FROMdoctorWHEREWorkingYearsNOTBETWEEN3AND10;查询工作年限不在3和10之间的医生的所有信息等效表达式WorkingYears<3ORWorkingYears>10NOTBETWEENAND等价于小于或大于的组合包含边界BETWEENAND是包含边界值的,与数学上的闭区间[a,b]等价。性能对比BETWEENAND的性能与>=AND<=相同,但可读性更好。适用类型适用于数值、日期、字符串等多种数据类型的区间查询。INOPERATORIN与NOTIN运算符ININ运算符属于运算符IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。如果给定的值为NULL,或者IN列表中存在NULL,则结果为NULL。示例1:数值列表查询SELECT*FROMdoctorWHEREWorkingYearsIN(3,5,10);查询工作年限为3、5或10的医生的所有信息示例2:字符串列表查询SELECT*FROMdoctorWHERESpecializationIN('外科','内科');查询专业为外科或内科的医生的所有信息等效表达式WorkingYears=3ORWorkingYears=5ORWorkingYears=10IN等价于多个等于条件的或组合,但写法更简洁NOTINNOTIN运算符不属于运算符NOTIN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一个值,则返回1,否则返回0。示例1:数值排除查询SELECT*FROMdoctorWHEREWorkingYearsNOTIN(3,5,10);查询工作年限不是3、5和10的医生的所有信息示例2:字符串排除查询SELECT*FROMdoctorWHERESpecializationNOTIN('外科','内科');查询专业不是外科和内科的医生的所有信息等效表达式WorkingYears!=3ANDWorkingYears!=5ANDWorkingYears!=10NOTIN等价于多个不等于条件的与组合NULL值处理:如果IN列表中存在NULL,或者给定的值为NULL,则结果为NULL。NOTIN在遇到NULL时也会返回NULL,使用时需要特别注意。LIKEOPERATORLIKE模糊匹配运算符LIKE运算符模糊匹配运算符LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。通配符说明%百分号匹配0个或多个字符_下划线匹配任意单个字符示例说明a%b:可以是aab、acccb、anotherhoob等a_b:只能是aab、abb、acb、adb等(长度为3)匹配模式前缀匹配'陈%'匹配以"陈"开头的任意字符串后缀匹配'%伟'匹配以"伟"结尾的任意字符串包含匹配'%科技%'匹配包含"科技"的任意字符串固定长度匹配'陈_'匹配"陈"开头且长度为2的字符串使用技巧LIKE匹配区分大小写(取决于字符集)通配符在开头会导致索引失效模糊查询性能较差,谨慎使用LIKEEXAMPLESLIKE运算符实战案例1精确匹配SELECT*FROMdoctorWHERESpecializationLIKE'内科';查询专业为"内科"的医生的所有信息SELECT*FROMdoctorWHEREGenderLIKE'男';查询性别为"男"的医生的所有信息2前缀匹配SELECT*FROMdoctorWHEREDoctorNameLIKE'陈%';查询姓名以"陈"开头的医生的所有信息匹配示例陈明、陈医生、陈主任等%通配符匹配0个或多个字符,适合实现前缀搜索功能3后缀匹配SELECT*FROMdoctorWHEREDoctorNameLIKE'%伟';查询姓名以"伟"结尾的医生的所有信息匹配示例李伟、张伟、陈伟等%通配符放在前面,实现后缀搜索功能4固定长度匹配SELECT*FROMdoctorWHEREDoctorNameLIKE'陈_';查询姓名以"陈"开头且姓名为两个字的医生的所有信息匹配示例陈明、陈华、陈刚等(仅匹配2个字)_通配符只匹配单个字符,适合实现固定长度搜索OPERATORPRECEDENCE运算符优先级规则表2.9运算符的优先级(按从高到低排列)优先级1(最高)!优先级2-(负号)~(按位取反)优先级3^优先级4*/DIV%MOD优先级5-+优先级6<<>>优先级7&优先级8|优先级9=>=><=<<>!=ISLIKEREGEXPIN优先级10BETWEENCASEWHENTHENELSE优先级11NOT优先级12&&AND优先级13XOR优先级14||OR优先级15(最低)=(赋值)优先级规则说明默认顺序级别高的运算符优先计算,同级别从左到右括号优先可以使用括号改变默认优先级建议用法复杂表达式建议使用括号明确优先级实用建议不确定优先级时,使用括号最保险括号使计算过程更清晰,提高可读性团队协作中,明确优先级很重要PARENTHESESUSAGE括号改变优先级括号的作用在无法确定优先级的情况下,可以使用圆括号"()"来改变优先级,并且这样会使计算过程更加清晰,提高表达式的可读性。示例1:改变运算顺序5+3*2=11默认:乘法优先,5+6=11(5+3)*2=16加括号:加法优先,8*2=16示例2:复杂条件组合WHERE(AORB)AND(CORD)明确OR和AND的优先级关系使用建议明确优先级即使知道优先级,也建议用括号明确表达意图提高可读性括号让代码更易理解,减少误解团队协作统一编码风格,方便他人维护避免错误减少因优先级理解错误导致的bug最佳实践复杂表达式总是使用括号多层嵌套时配对使用括号不要过度使用,保持简洁2.5MySQL常用函数05COMPARISONFUNCTIONS比较函数应用表2.10比较函数函数名称说明LEAST返回一组值中的最小值GREATEST返回一组值中的最大值STRCMP比较两个字符串,相等返回0,小于返回-1,大于返回1LEAST函数返回一组值中的最小值,可以用于数值和字符串比较。SELECTLEAST(WorkingYears)FROMdoctor;查询doctor表中工作年限最小的值GREATEST函数返回一组值中的最大值,与LEAST函数功能相反。SELECTGREATEST(WorkingYears)FROMdoctor;查询doctor表中工作年限最大的值STRCMP函数比较两个字符串,返回0(相等)、-1(小于)、1(大于)。SELECTSTRCMP('book','book');返回0SELECTSTRCMP('book1','book2');返回-1SELECTSTRCMP('book3','book2');返回1NUMERICFUNCTIONS数值型函数总览(一)表2.11数值型函数(部分)函数名称说明ABS求绝对值SQRT求二次方根MOD求余数RAND生成一个0~1之间的随机数ROUND对所传参数进行四舍五入ABS函数求绝对值,返回非负数SELECTABS(-1);结果为1SQRT函数求二次方根SELECTSQRT(16);结果为4MOD函数求余数,同%运算符SELECTMOD(10,3);结果为1RAND函数生成0~1之间的随机数SELECTRAND();结果如0.123456ROUND函数对参数进行四舍五入SELECTROUND(3.14);结果为3AGGREGATEFUNCTIONS数值型函数总览(二)表2.11数值型函数(续)函数名称说明MAX查询指定列的最大值MIN查询指定列的最小值COUNT统计查询结果的行数SUM求和,返回指定列的总和AVG求平均值,返回指定列数据的平均值MAX函数查询指定列的最大值SELECTMAX(WorkingYears)FROMdoctor;MIN函数查询指定列的最小值SELECTMIN(WorkingYears)FROMdoctor;COUNT函数统计查询结果的行数SELECTCOUNT(*)FROMdoctor;SUM函数求和,返回指定列的总和SELECTSUM(WorkingYears)FROMdoctor;AVG函数求平均值SELECTAVG(WorkingYears)FROMdoctor;AGGREGATEFUNCTIONSEXAMPLES聚合函数实战案例MAX函数应用SELECTMAX(WorkingYears)FROMdoctor;查询doctor表中工作年限最大的值应用场景找出最有经验的医生、最高价格、最大数值COUNT函数应用SELECTCOUNT(*)FROMdoctor;查询doctor表中记录的行数应用场景统计总记录数、数据量统计、分页查询SUM函数应用SELECTSUM(WorkingYears)FROMdoctor;查询doctor表中所有人工作年限的总和应用场景计算总销售额、总库存、累计值AVG函数应用SELECTAVG(WorkingYears)FROMdoctor;查询doctor表中所有人工作年限的平均值应用场景计算平均工资、平均成绩、均值分析重要特性:聚合函数(除了COUNT(*))会忽略NULL值。COUNT(*)统计所有行,COUNT(column)忽略该列的NULL值。聚合函数通常与GROUPBY子句配合使用,实现分组统计功能。STRINGFUNCTIONS字符型函数总览表2.12字符型函数函数名称说明LENGTH计算字符串长度函数,返回字符串的字节长度CONCAT合并字符串函数,返回结果为连接参数产生的字符串LOWER将字符串中的字母转换为小写UPPER将字符串中的字母转换为大写LEFT从左侧截取字符串,返回字符串左边的若干个字符RIGHT从右侧截取字符串,返回字符串右边的若干个字符TRIM删除字符串左右两侧的空格REPLACE字符串替换函数,返回替换后的新字符串SUBSTRING截取字符串,返回从指定位置开始的指定长度的字符串REVERSE字符串反转(逆序)函数字符串函数特点字符串函数是MySQL中最常用的函数类别之一,涵盖了长度计算、字符串连接、大小写转换、子串截取、空格处理、内容替换、顺序反转等多种功能,在数据处理和格式化输出中广泛应用。常用场景数据验证使用LENGTH检查密码长度、手机号长度字符串处理使用CONCAT拼接全名、地址等信息数据清洗使用TRIM去除空格、UPPER统一大小写内容截取使用SUBSTRING、LEFT、RIGHT获取部分内容注意事项LENGTH返回字节长度,不是字符数字符串位置从1开始计数,不是从0中文字符在UTF-8下占3个字节STRINGFUNCTIONSCONCAT与LENGTH函数应用CONCAT函数合并字符串函数CONCAT函数用于连接多个字符串,返回结果为连接参数产生的字符串。参数可以是一个或多个,是SQL中实现字符串连接的标准方式。查询示例SELECT*FROMdoctorWHEREDoctorName=CONCAT('李','明');查询名字为李明的医生的所有信息重要提示两个字符串相连接,在SQL语句中不能使用加号,要使用CONCAT()函数。这是SQL与编程语言的重要区别。LENGTH函数计算字符串长度LENGTH函数计算字符串的字节长度,返回字符串占用的字节数,而不是字符数。对于多字节字符集(如UTF-8),一个字符可能占用多个字节。查询示例SELECT*FROMdoctorWHERELENGTH(Password)<6;查询所有密码长度小于6字节的医生的所有信息注意事项UTF-8编码下,中文字符通常占3个字节。如果需要按字符数判断,应使用CHAR_LENGTH()函数。STRINGPROCESSING字符串处理函数LOWER/UPPERLOWER将字符串转换为小写,UPPER转换为大写。SELECTLOWER('Hello');结果helloSELECTUPPER('Hello');结果HELLOLEFT/RIGHT从左侧或右侧截取字符串指定长度。SELECTLEFT('abcdef',3);结果abcSELECTRIGHT('abcdef',3);结果defTRIM删除字符串左右两侧的空格。UPDATEdoctorSETDoctorName=TRIM(DoctorName);将DoctorName的值去除左右两侧空格后重新保存REPLACE字符串替换函数。SELECTREPLACE('abcabc','a','x');结果:xbcxbcSUBSTRING截取字符串,从指定位置开始指定长度。SELECTSUBSTRING('abcdef',2,3);结果:bcd(从第2个开始取3个字符)REVERSE字符串反转(逆序)函数。SELECTREVERSE('abc');结果cbaADVANCEDSTRINGFUNCTIONS字符串截取与替换SUBSTRING函数截取字符串SUBSTRING函数用于截取字符串,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论