`

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. 使用联结和联结条件
    注意所使用的联结类型,一般我们使用内部联结,是使用外部联结也是有效的;
    保证使用正确的联结条件,否则将返回不正确的数据;
    应该总是提供联结条件,否则会得出笛卡儿积;
    在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。虽然这样做是合法的,一般也很有用,但应该在一起测试它们前,分别测试每个联结。这将使故障排除更为简单;
分享到:
评论

相关推荐

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

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

    mysql查询优化的若干

    以上总结了MySQL查询优化的一些关键知识点,包括LEFT JOIN的优化策略、常数表达式的处理、WHERE与HAVING子句的优化、常数表的读取、联结表的最佳组合、临时表的使用、DISTINCT和ORDER BY的优化、索引的选择以及使用...

    mysql高级.pdf

    此外,优化还包括合理选择索引、避免在WHERE子句中使用函数或表达式、优化联结查询、使用子查询替代临时表等策略。 在Linux环境下安装MySQL时,可以通过一系列的命令来完成,例如使用rpm命令来安装或卸载MySQL,...

    mysql常用语法命令函数,emp&dept;表和相关练习

    10. 连接查询:`JOIN`语句用于将多个表的数据联结在一起,如`INNER JOIN`, `LEFT JOIN`, `RIGHT JOIN`, `FULL OUTER JOIN`。 "MYSQL_EMP_DEPT_TABLES_练习题.txt"提供了90多道与"emp"和"dept"表相关的练习题,这些...

    《MySQL必知必会》高清PDF

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

    mysql必知必会中文版(高清PDF)

    它涵盖了如何使用联结、子查询、正则表达式以及基于全文本的搜索,还包括了存储过程、游标、触发器、表约束等高级主题。本书的目标是帮助读者不仅理解基本的SQL语句,还要掌握高级SQL特性,从而在实际工作中应用自如...

    Mysql中的join操作

    例如,当我们在`java`表和`mysql`表之间执行内联结,基于`name`字段相等时,只有`blue`这一行会被返回,因为它是唯一一个在两个表中都存在的名字。内联结的几种语法形式包括: 1. `SELECT * FROM java, mysql WHERE...

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

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

    mysql大纲资料.txt

    - 联结查询包括内联结、左联结、右联结和全联结,用于将不同表中的数据结合在一起。 - 子查询是嵌套在SELECT、INSERT、UPDATE或DELETE语句中的查询,可以是相关子查询或非相关子查询。 - 聚合函数如COUNT、SUM、AVG...

    MySQL多表查询详解上

    - **自联结**:一个表与自身进行连接,通常用于查找关联信息,如员工的上下级关系。 2. **外连接**: - **左外连接**:返回左表所有记录及右表符合条件的记录,若右表无匹配项,则显示NULL。 - **右外连接**:...

    datawhale-mysql整合版1

    - 集合运算:`UNION`, `INTERSECT`, `EXCEPT`操作表的加减法和联结。 - 联结:内联结(`INNER JOIN`), 外联结(`LEFT JOIN`, `RIGHT JOIN`), 交叉联结(`CROSS JOIN`)。 - 子查询:在查询中嵌套查询,如关联子查询、...

Global site tag (gtag.js) - Google Analytics