`

MySQL联结表

阅读更多
1. 联结表

创建联结,有where子句
SQL> select vend_name, prod_name, prod_price from vendors, products where vendors.vend_id = products.vend_id order by vend_name, prod_name;

创建联结,没有where子句,返回的结果并不匹配
SQL> select vend_name, prod_name, prod_price from vendors, products order by vend_name, prod_name;

内部联结
SQL> select vend_name, prod_name, prod_price from vendors inner join products on vendors.vend_id = products.vend_id;

联结多个表(非常耗费资源)
SQL> select prod_name, vend_name, prod_price, quantity from orderitems, products, vendors where products.vend_id = vendors.vend_id and orderitems.prod_id = products.prod_id and order_num = 20005;

子查询与联结查询
SQL> select cust_name, cust_contact from customers where cust_id in (select cust_id from orders where order_num in (select order_num from orderitems where prod_id = 'TNT2'));

1. 外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表直接的关系。
2. 笛卡儿积:由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。
3. 内部联结:inner join ... on ...
    基于两个表之间的相等测试,叫做等值联结。也叫做内部联结。


2. 高级联结

使用表别名
SQL> select concat(rtrim(vend_name), '(', rtrim(vend_country), ')') as vend_title from vendors order by vend_name;
SQL> select cust_name, cust_contact from customers as c, orders as o, orderitems as oi where c.cust_id = o.cust_id and oi.order_num = o.order_num and prod_id = 'TNT2';

使用不同类型的联结

子查询自联结
SQL> select prod_id, prod_name from products where vend_id = (select vend_id from products where prod_id = 'DTNTR');
自联结
SQL> select p1.prod_id, p1.prod_name from products as p1, products as p2 where p1.vend_id = p2.vend_id and p2.prod_id = 'DTNTR';

自然联结
SQL> select c.*, o.order_num, o.order_date, oi.prod_id, oi.quantity, oi.item_price from customers as c, orders as o, orderitems as oi where c.cust_id = o.cust_id and oi.order_num = o.order_num and prod_id = 'FB';

外部联结
SQL> select customers.cust_id, orders.order_num from customers left outer join orders on customers.cust_id = orders.cust_id;
SQL> select customers.cust_id, orders.order_num from customers right outer join orders on customers.cust_id = orders.cust_id;

使用带聚集函数的联结
SQL> select customers.cust_name, customers.cust_id, count(orders.order_num) as num_ord from customers inner join orders on customers.cust_id = orders.cust_id group by customers.cust_id;

1. 使用表别名 orders as o
2. 自然联结:排除多次出现,使每个列只返回一次。
3. 外部联结 left/right outer join ... on ...
4. 使用联结和联结条件
    注意所使用的联结类型,一般我们使用内部联结,是使用外部联结也是有效的;
    保证使用正确的联结条件,否则将返回不正确的数据;
    应该总是提供联结条件,否则会得出笛卡儿积;
    在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。虽然这样做是合法的,一般也很有用,但应该在一起测试它们前,分别测试每个联结。这将使故障排除更为简单;
分享到:
评论

相关推荐

    详解MySQL子查询(嵌套查询)、联结表、组合查询

    MySQL 4.1版本及以上支持子查询 子查询:嵌套在其他查询中的查询。 子查询的作用: 1、进行过滤: 实例1:检索订购物品TNT2的所有客户的ID = + 一般,在WHERE子句中对于能嵌套的子查询的数目没有限制,不过在...

    基于JAVA的mysql数据库管理软件

    基于JAVA的mysql数据库管理软件,可以做毕业设计,有专门论文,如果需要另行联系,实现可视化的mysql数据库操作,以及对数据库服务器的监控,界面友好

    《MySQL必知必会》高清PDF

    书中继承了《MySQL必知必会》的优点,没有过多阐述数据库基础理论,而是紧贴实战需要,直接从数据检索开始,逐步深入各种复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、...

    mysql查询优化的若干

    mysql_查询语句优化.MySQL怎样优化LEFT JOIN 在MySQL中,A LEFT JOIN B实现如下: ...4、进行所有标准的联结优化,除了一个表总是在所有它依赖的表之后被读取。如果有一个循环依赖,MySQL将发出一个错误。

    MySQL必知必会.高清文字版.带书签目录.pdf

    书中继承了《MySQL必知必会》的优点,没有过多阐述数据库基础理论,而是紧贴实战需要,直接从数据检索开始,逐步深入各种复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、...

    浅谈mysql中多表不关联查询的实现方法

    大家在使用MySQL查询时正常是直接一个表的查询,要不然也就是多表的关联查询,使用到了左联结(left join)、右联结(right join)、内联结(inner join)、外联结(outer join)。这种都是两个表之间有一定关联,也就是...

    MySQL必知必会

    《MySQL必知必会》中继承了《SQL必知必会》的优点,没有过多阐述数据库基础理论,而是紧贴实战需要,直接从数据检索开始,逐步深入各种复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程...

    MySQL必知必会.pdf

    书从简单的数据 检索开始,逐步进入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。 通过重点突出的章节,条理清晰、系统而扼要地让读者学到应该学...

    MySQL必知必会(文字版)_MYSQL_

    书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者...

    MySQL学习笔记:高级联结(重要)

    本文为本人学习书籍《MySQL必知必会》笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~ 16 高级联结 16.1 使用表别:可以缩短语句,单条SELECT多次使用相同表 SELECT p.Name AS p_name, c.Name AS c_...

    mysql必知必会

    书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者...

    MySQL必知必会 中文版 带目录结构

    书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者...

    Mysql中的join操作

    1. 内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。 2. 外联结:分为外左联结和外右联结。 案例背景 create table java (name varchar(255)); insert into java values ('java1...

    MySQL入门到进阶sql脚本案例资源合集.zip

    这些案例旨在帮助读者熟悉和理解MySQL的高级特性和技术,如复杂的查询语句、联结查询、子查询、触发器、存储过程等。通过学习和实践这些案例,读者可以深入了解MySQL数据库的各个方面,并掌握高级SQL编程的技巧。 ...

    [MySQL必知必会].Ben.Forta.扫描版[www.guai.so].pdf

    书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者...

    MySQL学习笔记2-高级查询与存储.md

    本文首先介绍了MySQL中的几种高级查询方法,包括子查询、联结、聚合函数、排序和限制等,并给出了示例代码。然后重点讲解了MySQL存储过程的创建、调用、参数、条件和循环语句等知识,同时提供了详细的代码示例进行解释...

    MySQL数据库知识整理

    MySQL数据库知识整理,增删改查基础,以及约束,多表,联结

Global site tag (gtag.js) - Google Analytics