SQL 必知必会·笔记<10>联结表

简介:

可伸缩(scale)

能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序 称为可伸缩性好(scale well)。

联结(JOIN)

联结(JOIN)是一种机制,用来在一条SELECT 语句中关联表,因此称为联结

 

创建联结

创建联结非常简单,指定要联结的所有表以及关联它们的方式即可:

1 SELECT vend_name, prod_name, prod_price
2 FROM Vendors, Products
3 WHERE Vendors.vend_id = Products.vend_id;

 

警告:完全限定列名

在引用的列可能出现歧义时,必须使用完全限定 列名(用一个句点分隔表名和列名)。如果引用一个没有用表名限制的 具有歧义的列名,大多数DBMS 会返回错误。

 

1. WHERE子句的重要性

使用WHERE 子句建立联结关系似乎有点奇怪,但实际上是有个很充分的 理由的。要记住,在一条SELECT 语句中联结几个表时,相应的关系是 在运行中构造的

 

笛卡儿积(cartesian product)

由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目 将是第一个表中的行数乘以第二个表中的行数。

 

注意:不要忘了WHERE 子句

要保证所有联结都有WHERE 子句,否则DBMS 将返回比想要的数据多 得多的数据。同理,要保证WHERE 子句的正确性。不正确的过滤条件 会导致DBMS 返回不正确的数据。

 

提示:叉联结

有时,返回笛卡儿积的联结,也称叉联结(cross join)。

 

2. 内联结

基于两个表之间的相等测试的等值联接。这种联结也称为内联结(inner join

 

和之前简单等值语法相同的内联查询:

1 SELECT vend_name, prod_name, prod_price
2 FROM Vendors INNER JOIN Products
3 ON Vendors.vend_id = Products.vend_id;

 

3. 联结多个表

SQL 不限制一条SELECT 语句中可以联结的表的数目。创建联结的基本 规则也相同。首先列出所有表,然后定义表之间的关系。例如:

1 SELECT prod_name, vend_name, prod_price, quantity
2 FROM OrderItems, Products, Vendors
3 WHERE Products.vend_id = Vendors.vend_id
4 AND OrderItems.prod_id = Products.prod_id
5 AND order_num = 20007;

 

注意:性能考虑

DBMS 在运行时关联指定的每个表,以处理联结。这种处理可能非常 耗费资源,因此应该注意,不要联结不必要的表。联结的表越多,性 能下降越厉害。

提示:多做实验

可以看到,执行任一给定的SQL 操作一般不止一种方法。很少有绝对 正确或绝对错误的方法。性能可能会受操作类型、所使用的DBMS、 表中数据量、是否存在索引或键等条件的影响。因此,有必要试验不 同的选择机制,找出最适合具体情况的方法。

分类:  SQL, 读书笔记
本文转自gyzhao博客园博客,原文链接:http://www.cnblogs.com/IPrograming/p/3297373.html ,如需转载请自行联系原作者
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
36 1
|
3月前
|
SQL 监控 关系型数据库
PolarDB产品使用问题之SQL防火墙怎么拦截没有指定WHERE条件的特定表的SQL语
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
SQL 分布式计算 DataWorks
MaxCompute操作报错合集之使用sql查询一个表的分区数据时遇到报错,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
4月前
|
SQL 存储 测试技术
|
3月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
4月前
|
SQL 存储 数据库
SQL 撤销索引、撤销表以及撤销数据库
SQL 撤销索引、撤销表以及撤销数据库
56 4
|
4月前
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
42 1
|
4月前
|
SQL 存储 缓存
揭秘SQL中的公用表表达式:数据查询的新宠儿
揭秘SQL中的公用表表达式:数据查询的新宠儿
51 2
|
4月前
|
SQL 存储 关系型数据库
技术笔记:MYSQL常用基本SQL语句总结
技术笔记:MYSQL常用基本SQL语句总结
32 0
|
5月前
|
SQL 关系型数据库 MySQL
sql怎么创建数据库表,SQL(Struct
SQL是管理关系型数据库的标准语言,用于创建、维护和查询数据库表。创建表的基本步骤包括:选择数据库(如MySQL等),使用CREATE TABLE语句定义表结构,指定字段属性和数据类型,设置约束(如主键、唯一键),创建索引以提升查询性能,最后以分号结束语句完成创建。此外,还可使用ALTER TABLE修改表,DROP TABLE删除表,以及其他SQL语句进行查询、插入、更新和删除操作,有效管理数据库。
55 3
下一篇
无影云桌面