sql 连接查询
来源:互联网 发布:动态表情图片制作软件 编辑:程序博客网 时间:2024/05/14 00:59
(sql新手上路,请多多指教。第一次写博客!!!)
连接查询:涉及两个以上的表的查询。常见连接查询:
(1)等值与非等值连接查询
(2)自然连接查询
(3)自身连接查询
(4)外连接查询
(5)复合条件连接查询
测试表:
(1)persons
(2)orders
1. 等值与非等值连接查询
连接查询的where子句中用来连接两个表的条件称为连接条件/连接谓语,基本格式:
[<表名1>.]<列名1> <比较运算符> [<表名2>.]< 列名2>
当比较运算符为‘=’时是等值连接,其它运算符为非等值连接。如:
select * from persons p, orders o where p.p_id = o.p_id;
连接条件中,各字段类型必须是可比的,字段名称不一定相同。
2. 自然连接查询
是一种特殊的等值连接,要求两个关系比较的分量必须是相同的属性组,并且将结果集中重复的属性列去掉(保留一个)。
实现方式:
(1)上述等值连接中去除重复列(明确返回字段)
select p.p_id,first_name,last_name,adress,city,o_id,order_no from persons p, orders o where p.p_id = o.p_id;
(2)natural join (oracle)
不需要手动进行匹配,如果两个关系中有一个或多个相同名称的分量时,oracle会自动匹配这些分量。如:
select * from persons natural join orders;
注意:
如果两个关系中的分量名称一样,但是类型不一样,同时也不能隐式转换,那么就会报错;如果可以进行隐式转换(转换成功),则连接成功。
建议:
具有相同含义的字段,不要设计为不同类型。
(3)join using
和(2)中的natural join相对,natural join不能指定连接分量(即两个关系有多个相同的分量时,会根据所有相同分量进行连接),join using可以指定其中的某个或多个作为连接分量。
select * from persons join orders using(p_id);
如果指定多个相同分量的话,可以在括号中添加,用‘,’做分隔符。
注意:
如果在select返回列表中明确连接分量,则不能指定该分量属于那个表,即:
select persons.p_id from persons join orders using(p_id);
提示如下错误:
natural 和 using是不能同时出现的。
3. 自身连接查询
除了两个不相同的表可以连接之外,也可以和自身连接。如:
select * from tablename t1, tablename t2 where t1.col1=t2.col2;
4. 内连接
普通连接,会从结果集中删除与其他被连接表不匹配的行,也就是说内连接可能会丢失连接表信息。(只有满足连接条件的元组才会输出)
select * from persons p inner join orders o on p.p_id=o.p_id;
或
select * from persons p join orders o on p.p_id=o.p_id;
persons表中id=2的元组和orders表中没有匹配,被丢弃。
5. 外连接(可以使用using,简化join on)
(1)左外连接
从结果集中保留左表的所有元组(即使与被连接表不匹配的元组,也保留),不匹配的元组,右表字段值为null。
select * from persons left join orders on persons.p_id=orders.p_id;
(2)右外连接
从结果集中保留右表的所有元组(即使与连接表不匹配的元组,也保留),不匹配的元组,左表字段值为null。
select * from persons right join orders on persons.p_id=orders.p_id;
(3)全量连接
结果集中保留两个连接表的所有元组。
select * from persons full join orders on persons.p_id=orders.p_id;
6. 复合条件连接查询
在上面的where子句中只有一个连接条件。where子句可以有多个连接条件,即复合条件连接,连接条件之间通过and关键字连接。除了两个表连接,自身连接,还可以两个以上的表进行连接,后者通常称为多表连接。
- SQL查询--连接查询
- SQL查询中的连接
- SQL查询中的连接
- Sql连接查询
- SQL连接查询
- SQL连接查询类型
- sql连接查询
- SQL查询中的连接
- Sql连接查询
- SQL查询连接实例
- Sql连接查询
- sql表连接查询
- Sql连接查询
- sql查询字段连接
- sql连接查询大全
- SQL连接查询
- SQL自连接查询
- SQL连接查询(汇总)
- Objective-c - NSObject万能指针
- Redis 配置
- eclipse中NodeList出现The method getTextContent() is undefined for the type Node
- 二分图的最大匹配、完美匹配和匈牙利算法
- SMS短信PDU编码详细解析
- sql 连接查询
- Struts2 零配置xml,已验证可用
- 使用SQL命令查看MYSQL数据库大小
- 线程数究竟设多少合理
- Perl fork
- 被swap坑了
- js中的定时器和计时器使用
- 现在的网页该不该兼容IE6/7
- [Android自定义控件] Android自定义控件