MySQl心得4--3--数据库查询3--from字句_MySQL
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

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在ReactQuery中实现数据库查询的错误处理机制ReactQuery是一个用于管理和缓存数据的库,它在前端领域越来越受欢迎。在应用程序中,我们经常需要与数据库进行交互,而数据库查询可能会出现各种错误。因此,实现一个有效的错误处理机制对于保证应用程序的稳定性和用户体验至关重要。第一步是安装ReactQuery。使用以下命令将其添加到项目中:n

Laravel中间件:为应用程序添加数据库查询和性能监控导言:在开发Web应用程序时,数据查询和性能监控是非常重要的。Laravel提供了一种方便的方式来处理这些需求,即中间件。中间件是在请求和响应之间进行处理的一种技术,它可以在请求到达控制器之前或响应返回给用户之后执行一些逻辑。本文将介绍如何使用Laravel中间件来实现数据库查询和性能监控。一、创建中间

Java开发中如何解决数据库查询数量溢出问题标题:Java开发中如何解决数据库查询数量溢出问题摘要:随着互联网的发展和数据量的逐渐增大,数据库查询的数量也越来越大。在Java开发中,由于内存的限制,可能会遇到数据库查询数量溢出的问题。本文将介绍几种解决这个问题的方法。正文:优化数据库查询语句首先,我们可以从优化数据库查询语句的角度来解决这个问题。我们可以使用

PHP数据库查询技巧:如何使用mysqli_query函数执行SQL查询在开发PHP应用程序时,与数据库的交互是一个非常重要的部分。对于查询操作,PHP提供了一些内置的函数来执行SQL语句。本文将重点介绍mysqli_query函数的使用方法,帮助开发者更好地进行数据库查询操作。一、mysqli_query函数介绍mysqli_query函数是PHP的内置函

标题:MySQL中查看表的数据的语句及具体代码示例MySQL是一种开源的关系型数据库管理系统,它被广泛应用于各种规模的应用程序中。在MySQL中,查看表的数据是一个非常基础的操作,下面将介绍如何通过具体的语句和代码示例实现这一操作。首先,我们将介绍通过MySQL命令行工具查看表的数据的语句及具体代码示例。假设我们有一个名为“employees”的表,以下是通

在当前互联网时代,随着数据的爆炸式增长,数据库成为了一个服务的核心。数据库的性能和速度更是直接影响了网站及其应用的用户体验和可用性,因此如何优化数据库查询是开发人员需要着重研究的一个问题。而在PHP语言中,通过对数据库查询语句的优化,可以提高程序的性能,减少服务器的负担,提高服务的稳定性。本文将从以下几个方面,介绍如何优化数据库查询:一、使用索引在进行查询时

随着互联网技术的不断发展,数据量的爆炸式增长和各种文本数据的广泛应用,全文检索成为了一项非常重要的技术。全文检索是一种能够快速、准确地查找文本数据的方法,广泛应用于搜索引擎、论坛、博客、电商网站等应用场景中。在PHP编程中,如何实现全文检索呢?一、什么是全文检索?在传统的关系型数据库中,我们通常会使用SQL语句进行模糊查询,但是当数据量较大时,这种查询方法会
