bitsCN.com
1.from 字句 SELECT的查询对象由FROM子句指定,其格式为: FROM 表名1 [ , 表名2] … 其中,表名: tbl_name [ [AS] 表别名 ] [{USE | ignore | force} index (key_list)] /*查询表*/ | join_table /*连接表*/ 说明:表名指出了要查询的表或视图。 ● 表别名主要用在相关子查询及连接查询中。如果FROM子句指定了表别名,这条SELECT语句中的其他子句都必须使用表别名来代替原始的表名。当同一个表在SELECT语句中多次被提到的时候,就必须要使用表别名来加以区分。 ● {USE | IGNORE | FORCE} INDEX:USE INDEX告知MySQL选择一个索引来查找表中的行,IGNORE INDEX告知MySQL不要使用某些特定的索引,FORCE INDEX的作用接近USE INDEX(key_list),只有当无法使用一个给定的索引来查找表中的行时,才使用表扫描。 2.表名中可以包含一个或多个表: ● 引用一个表: 可以用两种方式引用一个表,第一种方式是使用USE语句让一个数据库成为当前数据库,在这种情况下,如果在FROM子句中指定表名,则该表应该属于当前数据库。第二种方式是指定的时候在表名前带上表所属数据库的名字。例如,假设当前数据库是db1,现在要显示数据库db2里的表tb的内容,使用如下语句: SELECT * FROM db2.tb; 当然,在SELECT关键字后指定列名的时候也可以在列名前带上所属数据库和表的名字,但是一般来说,如果选择的字段在各表中是唯一的,就没有必要去特别指定。 ● 引用多个表: 如果要在不同表中查询数据,则必须在FROM子句中指定多个表。指定多个表时就要使用到连接。当不同列的数据组合到一个表中叫做表的连接。 3.连接的方式有以下三种。 高级查询 (多表查询:数据源是多个表) 做多表连接:要找到连接的条件,2个表的公共字段(属性) 分析:1.考虑数据源 :xs:学号 姓名; xs_kc:课程号 成绩 2.连接条件:两表的学号相等 xs.学号=xs_kc.学号 当查看的列在多个表中都存在的话,必须在字段名前加上表名进行限制。 1). 全连接 连接的第一种方式是将各个表用逗号分隔,这样就指定了全连接。FROM子句产生的中间结果是一个新表,新表是每个表的每行都与其他表中的每行交叉以产生所有可能的组合,列包含了所有表中出现的列,也就是笛卡儿积。这样连接表潜在地产生数量非常大的行,因为可能得到的行数为每个表中行数之积。在这样的情形下,通常要使用WHERE子句设定条件来将结果集减少为易于管理的大小,这样的连接即为等值连接。 例: 查找XSCJ数据库中所有学生选过的课程名和课程号。 SELECT DISTINCT KC.课程名,XS_KC.课程号 FROM KC, XS_KC WHERE KC.课程号=XS_KC.课程号; 2). JOIN连接 语法格式如下: 表名1 inner join 表名2 [join_condition] | 表名1{ left | right } [outer]JOIN表名2 join_condition | 表名1 natural [ {RIGHT |LEFT} [OUTER] ] JOIN表名2 | 表名1 cross join 表名2 [join_condition] | 表名1 straight_join表名2 [ON condition_exp] 其中,join_condition 代表: ON 连接条件 | using(column_list) 使用JOIN关键字的连接主要分为三种: A.内连接(指定了inner关键字的连接是内连接)。 内连接是系统默认的,可以省略INNER关键字。使用内连接后,FROM子句中ON条件主要用来连接表,其他并不属于连接表的条件可以使用WHERE子句来指定。 作为特例,可以将一个表与它自身进行连接,称为自连接。若要在一个表中查找具有相同列值的行,则可以使用自连接。使用自连接时需为表指定两个别名,且对所有列的引用均要用别名限定。 例:查找XSCJ数据库中课程不同、成绩相同的学生的学号、课程号和成绩。 SELECT a.学号,a.课程号,b.课程号,a.成绩 FROM XS_KC AS a JOIN XS_KC AS b ON a.成绩=b.成绩 AND a.学号=b.学号 ANDa.课程号!=b.课程号; 如果要连接的表中有列名相同,并且连接的条件就是列名相等,那么ON条件也可以换成USING子句。
USING(column_list)子句用于为一系列的列进行命名。这些列必须同时在两个表中存在。其中column_list为两表中相同的列名。 例: 查找KC表中所有学生选过的课程名。 SELECT 课程名 FROM KC INNER JOIN XS_KC USING (课程号); 说明:查询的结果为XS_KC表中所有出现的课程号对应的课程名。 B.外连接(指定了OUTER关键字的连接为外连接。) 外连接包括: ● 左外连接(LEFT OUTER JOIN):结果表中除了匹配行外,还包括左表有的但右表中不匹配的行,对于这样的行,从右表被选择的列设置为NULL。 ● 右外连接(RIGHT OUTERJOIN):结果表中除了匹配行外,还包括右表有的但左表中不匹配的行,对于这样的行,从左表被选择的列设置为NULL。 ● 自然连接(NATURAL JOIN):自然连接还有自然左外连接(NATURAL LEFT OUTER JOIN)和自然右外连接(NATURALRIGHT OUTER JOIN)。NATURAL JOIN的语义定义与使用了ON条件的INNER JOIN相同。 其中的OUTER关键字均可省略。 例: 查找所有学生情况及他们选修的课程号,若学生未选修任何课,也要包括其情况。 SELECT XS.* , 课程号 FROM XS LEFT OUTER JOIN XS_KC ON XS.学号 =XS_KC.学号; 说明:若本例不使用LEFT OUTER JOIN,则结果中不会包含未选任何课程的学生信息。使用了左外连接后,本例结果中返回的行中有未选任何课程的学生信息,相应行的课程号字段值为NULL。 例: 使用自然连接实现例4.22中相同的结果。 SELECT DISTINCT 课程名, XS_KC.课程号 FROM KC NATURAL JOIN XS_KC; 说明:SELECT语句中只选取一个用来连接表的列时,可以使用自然连接代替内连接。用这种方法,可以用自然左外连接来替换左外连接,自然右外连接替换右外连接。(用的不多,容易出错,因为是让系统自动找相同的条件,找不到时会报错) 注意:外连接只能对两个表进行。 C.交叉连接(指定了CROSS JOIN关键字的连接是交叉连接。) 在不包含连接条件,交叉连接实际上是将两个表进行笛卡儿积运算,结果表是由第一个表的每行与第二个表的每一行拼接后形成的表,因此结果表的行数等于两个表行数之积。 在MySQL中,CROSS JOIN从语法上来说与INNER JOIN等同,两者可以互换。 例: 列出学生所有可能的选课情况。 SELECT 学号, 姓名, 课程号, 课程名 FROM XS CROSS JOIN KC; 另外,STRAIGHT_JOIN连接用法和INNERJOIN连接基本相同。不同的是,STRAIGHT_JOIN后不可以使用USING子句替代ON条件。 例: 使用STRAIGHT_JOIN连接实现例4.22中相同的结果。 SELECT DISTINCT 课程名, XS_KC.课程号 FROM KC STRAIGHT_JOIN XS_KC ON (KC.课程号=XS_KC.课程号); 4.几种连接的举例比较: 要求:查询每个学生的姓名,专业名,课程名,成绩 数据源:xs:姓名,专业名; kc:课程名 ; xs_kc :成绩 连接条件:xs.学号=xs_kc.学号 and kc.课程号=xs_kc.课程号 (1) 全连接(等值连接) 例1: select 姓名,专业名,课程名,成绩 from xs,kc,xs_kc where xs.学号=xs_kc.学号 and kc.课程号=xs_kc.课程号; 例2: select 姓名,专业名,课程名,成绩 fromxs,kc,xs_kc where xs.学号=xs_kc.学号 and kc.课程号=xs_kc.课程号 and 课程名='计算机基础' and 成绩>=80 order by 成绩 desc; (2) 内连接 例1: select xs.学号,姓名,课程号,成绩 from xs inner join xs_kc on xs.学号=xs_kc.学号; 例2: select 姓名,专业名,课程名,成绩 from xs inner join xs_kc on xs.学号=xs_kc.学号 inner join kc on xs_kc.课程号=kc.课程号 where 课程名='计算机基础' and 成绩>=80; 5.连接多表(如果是三张表) 1).Join连接: from 表1 inner join 表2 on 条件1 inner join 表3 on 条件2 2).全连接: from 表1,表2,表3 where条件1 and 条件2 3).给表加别名:from 表名 as 别名 注意:如果给表加了别名,以后的使用必须用别名,不能再使用原表名 作者 tianyazaiheruan bitsCN.com
0
0
相关文章
mysql慢查询日志显示慢但执行很快怎么办_mysql日志问题分析
mysql如何使用DATEDIFF计算日期差_mysql天数间隔获取
mysql如何实现在线清空从库数据重新同步_mysql重置从库步骤
mysql如何启用SSL加密连接_mysql安全证书配置方法
mysql如何用mysql实现后台审核功能_mysql数据审核系统
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。
26
2026.03.13
本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。
46
2026.03.12
本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。
178
2026.03.11
本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。
51
2026.03.10
本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。
92
2026.03.09
本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。
102
2026.03.06
本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。
227
2026.03.05
本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。
532
2026.03.04
2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!
171
2026.03.04
热门下载
相关下载
精品课程
最新文章
