SQL SELECT 语句的表连接

我来给大家介绍join(连接)的概念. 为此准备了两个试验用表: album(专辑表) 和 track(曲目表).

  专辑表:包含200首来自Amazon的音乐CD的概要信息。

  album(asin, title, artist, price, release, label, rank)

  曲目表:每张专辑中的曲目(因为是音乐CD,所以也可叫歌曲)的详细信息。

  track(album, dsk, posn, song)

  SQL短语 FROM album JOIN track ON album.asin=track.album 表示连接album和track表。

  其中,album.asin表示专辑的惟一标识号,track.album表示曲目表中和专辑关联的专辑号。

  连接后,得到一个临时表,该临时表中每条记录包含的字段由两部分组成,

  除了专辑表中的对应字段album(title, artist ...),还包含曲目表的所有字段track(album, disk, posn and song)。

  有了这张临时表,很多查询就容易实现了。

  看看一些具体的实例,

  一、列出歌名为'Alison'的专辑名称和作者

复制代码 代码如下:

SELECT title, artist

FROM album JOIN track

ON (album.asin=track.album)

WHERE song = 'Alison'

  显然,歌名、专辑名称和作者分别在两个表中,必需使用表连接来完成这个查询。

  二、哪个artist录制了歌曲'Exodus'

SELECT artist

FROM album JOIN track ON (asin=album)

WHERE song = 'Exodus'

  用作连接的两个字段asin,album因为在两个表中都是惟一的,所以不一定要加表名作为前缀。

  但为了方便理解,建议使用前缀,形如:album.asin=track.album

或者如果表名过长的话,可以用as达到取代作用,如 FROM album as a JOIN track as t ON a.asin=t.album

  三、列出曲目表中所有属于'Blur'专辑的歌曲

复制代码 代码如下:

SELECT song

FROM album JOIN track ON (asin=album)

WHERE title = 'Blur'

  如果我们把 album JOIN track ON (asin=album) 看成一个临时表的话,join的概念就很好理解了。

时间: 2024-10-24 00:18:33

SQL SELECT 语句的表连接的相关文章

SQL Server中多表连接时驱动顺序对性能的影响

原文:SQL Server中多表连接时驱动顺序对性能的影响   本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他)   最近在SQL Server中多次遇到开发人员提交过来的有性能问题的SQL,其表面的原因是表之间去的驱动顺序造成的性能问题,具体表现在(已排除其他因素影响的情况下),存储过程偶发性的执行时间超出预期,甚至在调

利用视图管理器编写高效 SQL SELECT 语句

献给初学者,老鸟别扔砖头 编写 SQL 语句一直都是比较纳闷的事,编写时没有一个良好的检错机制,只能运行时才能发现错误,特别是关联的表一多起来,思绪不免会被搞得晕头转向最后不知迷失在什么地方了.近日偶然发现并不是 M$ 没有提供一个良好的傻瓜化界面给我们这帮懒兄懒弟们使用,而是我们自己视而不见,那就是 SQL Server 中的视图管理器,它不仅可以让我们方便地在多个表中进行查询而不去理会他们之间的关系(当然多个表之间必须存在必要的关系),还可以用它进行别名.排序.条件等的设置,然后自动产生出良

SQL Server 2012 多表连接查询功能实例代码

废话不多说了,直接给大家贴代码了,具体代码如下所示: -- 交叉连接产生笛卡尔值 (X*Y) SELECT * FROM Student cross Join dbo.ClassInfo --另外一种写法 SELECT * FROM Student , ClassInfo -- 内连接 (Inner 可以省略) SELECT * FROM Student JOIN dbo.ClassInfo ON dbo.Student.Class = dbo.ClassInfo.ID; -- Inner Jo

如何用sql=select 语句来调用指定某个区间的文章

问题描述 如何用sql=select 语句来调用指定某个区间的文章 原来的编码是这样的,调用前8条新闻: sql="select top 8 * from Southidc_News where ViewFlag and SortID=2 order by NoticeFlag asc,id desc" 我想调用指定的第2条到第5条(指定区间的文章),该怎么改写啊? 解决方案 说白了,你无非就是需要一个服务器sql分页的代码. 不确定你用的是什么sql ,mysql oracle还是m

Reverse Snowflake Joins 0.49发布 SQL Select语句解析工具

Reverse Snowflake Joins是一款SQL Select语句解析和图表生成工具.图表可以直接显示部分图表中的基本SQL,如 x=30,GROUP BY (year),SUM(profit),HAVING MIN(age). Reverse Snowflake Joins 0.49该版本修复了cast(x as integer) 产生的一个错误. 软件信息:http://sourceforge.net/projects/revj/ 下载地址:http://sourceforge.n

sql select语句的多表查询的使用方法

SELECT 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). SQL SELECT 语法 SELECT 列名称 FROM 表名称以及: SELECT * FROM 表名称注释:SQL 语句对大小写不敏感.SELECT 等效于 select 实例 CREATE TABLE Manufacturers (    ManfID CHAR(8) NOT NULL PRIMARY KEY,    ManfName VARCHAR(30) NOT NULL ) ENGINE=INNODB

MySQL基本SQL查询语句:多表查询和子查询示例

一.简单查询:基本语法:  代码如下 复制代码 SELECT * FROM tb_name; 查询全部  代码如下 复制代码 SELECT field1,field2 FROM tb_name; 投影  代码如下 复制代码 SELECT [DISTINCT] * FROM tb_name WHERE qualification;  选择 说明: FROM子句: 要查询的关系         表.多个表.其它SELECT语句 WHERE子句:布尔关系表达式,主要包含如下这几类表达式: 比较:=.>

oracle sql select语句的使用方法

  select格式: SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,-] FROM <表名1>,<表名2>[,-] [WHERE <筛选择条件表达式>] [GROUP BY <分组表达式> [HAVING<分组条件表达式>]] [ORDER BY <字段>[ASC | DESC]] 语句说明: []方括号为可选项 [GROUP BY <分组表达式> [HAVING&l

sql select 语句用法

select 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). sql select 语法 select 列名称 from 表名称以及: select * from 表名称注释:sql 语句对大小写不敏感.select 等效于 select. sql select 实例 如需获取名为 "lastname" 和 "firstname" 的列的内容(从名为 "persons" 的数据库教程表),请使用类似这样的 select 语句: