《MySQL必知必会》学习笔记八(自/外联结)------掌握部分
来源:互联网 发布:网络漏洞扫描工具 编辑:程序博客网 时间:2024/04/20 23:20
MySQL必知必会知识预览
第一章——了解SQL
第二章——MySQL简介
第三章——使用MySQL
第四章——检索数据
第五章——排序检索数据
第六章——过滤数据
第七章——数据过滤
第八章——用通配符进行过滤
第九章——用正则表达式进行搜索
第十章——创建计算字段
第十一章——使用数据处理函数
第十二章——汇总数据
第十三章——分组数据
第十四章——使用子查询
第十五章——联结表
第十六章——创建高级联结
第十七章——组合查询
第十八章——全文本搜索
第十九章——插入数据
第二十章——更新和删除数据
第二十一章——创建和操纵表
第二十二章——使用视图
第二十三章——使用储存过程
第二十四章——使用游标
第二十五章——使用触发器
第二十六章——管理事务处理
第二十七章——全球化和本地化
第二十八章——安全管理
第二十九章——数据库维护
第三十章——改善性能
————————————– 华丽的分隔符 ————————————————–
第十六章
使用表别名:缩短SQL语句,允许在单条select语句中多次使用相同的表,表别名只是在查询中使用,与列别名不一样的是,列别名可以在客户机进行查询使用。
select cust_name,cust_contact from customers as cu ,orders as ord,orderitems as ort where cu.cust_id =ord.cust_id and ord.order_num =ort.order_num and ort.prod_id=’tnt2’
应该注意: 表别名只在查询中使用,与列别名不一样,表列名不返回到客户机。
自联结
思考: 如果 商品(其ID为DTNTR)有问题,因此想要知道生产该产品的供应商的其他产品是否也存在这些问题。
————————————–————————————–————————————–
首先找到ID为DTNTR的供应商,然后再查找该供应商的其他产品信息。
子查询实现:
select prod_name,prod_id from products where vend_id =(select vend_id from products where prod_id=’DTNTR’);
自联结查询实现:
select p1.prod_name,p1.prod_id from products as p1 , products as p2 where p1.vend_id = p2.vend_id and p2.prod_id=’DTNTR’;
注意:
用自联结而不用子查询:自联结通常作为外部语句用来代替从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的,但有时候处理联结远比处理子查询快得多。多试,看看哪种性能更好
外部联结
联结包含了那些在相关表中没有关联行的行,这种类型的链接称为外部联结。
使用outer join 语法时,必须使用right 或left 关键字进行指定包括其所有行的表。
左联结:查询各表中满足条件相同的行,并且查询出左表的所有信息行。
右联结:查询各表中满足条件相同的行,并且查询出右表的所有信息行。
select customers.cust_id,orders.order_num from customers left outer join orders on orders.cust_id = customers.cust_id;
select customers.cust_id,orders.order_num from customers right outer join orders on orders.cust_id = customers.cust_id;
注意: 图中的数据一个是6条数据,一个是5条数据。在左联结查询时,会将左表的所有信息给查询出来,而有些数据在右表不存在,从而连带出空数据。而在右联结查询时,则是将右表的数据查询出来,然后连带出左表的部分数据,
MySQL不支持简化字符” *= ”和” =* ”的使用 ,但是这种操作符在其他DBMS中很是流行。
带聚集函数的联结
聚集函数用来汇总数据。也可以与联结进行使用。
select customers.cust_name,customers.cust_id, count(orders.order_num) as n
um_ord from customers inner join orders on customers.cust_id = orders.cust_id gr
oup by customers.cust_id;
select 语句使用Inner Join 将customers和orders表相互关联。group by 子句按客户分组数据,因此,函数调用count对每个客户的订单计数,然后返回。
使用联结的要点:
一般我们是使用内部联结,但是使用外部联结也是有效的。
保证使用正确的联结条件,否则将返回不正确的结果。
应该提供有效的联结条件,否则将会产生笛卡儿积。
在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。但是应该在一起测试他们之前,分别测试每个联结。
- 《MySQL必知必会》学习笔记八(自/外联结)------掌握部分
- 《MySQL必知必会》学习笔记二------掌握部分
- 《MySQL必知必会》学习笔记三------掌握部分
- 《MySQL必知必会》学习笔记四(正则表达式)------掌握部分
- 《MySQL必知必会》学习笔记五(数据处理函数)------掌握部分
- 《MySQL必知必会》学习笔记七(复杂查询)------掌握部分
- 《MySQL必知必会》学习笔记十一(操作表)------掌握部分
- 《MySQL必知必会》学习笔记十二(视图)------掌握部分
- 《MySQL必知必会》学习笔记十三(存储过程)------掌握部分
- 《MySQL必知必会》学习笔记十五(触发器)------掌握部分
- 《MySQL必知必会》学习笔记十六(事务处理)------掌握部分
- 《MySQL必知必会》学习笔记六(数据汇总&分组顺序)------掌握部分
- 《MySQL必知必会》学习笔记九(组合查询&全文本搜索)------掌握部分
- 《MySQL必知必会》学习笔记十(增删改语句使用)------掌握部分
- 数据库学习纪要(二十七):MySQL-7-外联接、自联接与联合
- 《MySQL必知必会》学习笔记一------了解部分
- MySQL学习笔记(八)
- MYSQL学习笔记(八)
- Android自动发送短信
- leecode 解题总结:71. Simplify Path
- 重新认识java(九) ---- 内部类
- 2015蓝桥杯省赛B组C/C++
- sqlmap表找不到
- 《MySQL必知必会》学习笔记八(自/外联结)------掌握部分
- 欢迎使用CSDN-markdown编辑器
- Q_ASSERT
- shrink_page_list(
- C# OleDbConnection操作access出现System.Data.OleDb.OleDbException其他信息: 未指定的错误
- 春节
- L6218E: Undefined symbol __BASEPRICONFIG
- android 导入项目 项目中文字乱码问题
- 【南阳理工OJ】2--括号配对问题(栈与队列)