SQL基础学习7

来源:互联网 发布:外墙线条展开面积算法 编辑:程序博客网 时间:2024/06/05 01:56

表的加减法

何为集合运算:对满足同一规则的记录进行的加减等“四则运算”,以行方向为单位进行操作(即导致行数的增减)

表的加法——UNION(并集):

<pre name="code" class="sql">SELECT name,priceFROM ShopUNIONSELECT name,priceFROM Shop1;

解释:将表Shop与表Shop1进行并集运算;结果中会除去重复的记录

P.S:作运算对象的记录的列数必须相同、列的类型必须一致;可以使用任何SELECT语句,但ORDER BY子句只能在最后使用一次

包含重复行的集合运算——ALL选项:对所有的集合运算符都适用

SELECT name,priceFROM ShopUNION <span style="color:#ff0000;">ALL</span>SELECT name,priceFROM Shop1;
解释:在UNION后加ALL关键字,就可以实现在集合运算中保留重复行的效果

选取表中的公共部分——INTERSECT:应用于两张表,选取出它们当中的公共记录

SELECT name,priceFROM ShopINTERSECTSELECT name,priceFROM Shop1;

记录的减法——EXCEPT:两张表的差集

SELECT name,priceFROM ShopEXCEPTSELECT name,priceFROM Shop1;
解释:由表Shop的记录减去表Shop1记录的剩余部分

P.S:当减数和被减数的位置不同时,所得到的结果是不同的


联结(以列为单位对表进行联结)

何为联结:将其它表中的列添加进来,进行“添加列”的运算

内联结——INNER JOIN:应用最广泛的联结运算

对于两张满足以下条件的表:1.两张表中都包含的列;2.只存在于一种表内的列

联结运算:以条件1的列作为桥梁,将条件2中满足同样条件的列汇集到同一结果之中

SELECT S1.code,S1.shopname,S.name,S.priceFROM Shop1 AS S1 <span style="color:#ff0000;">INNER JOIN</span> Shop AS S<span style="color:#ff0000;">ON </span>S1.name=S.name;
P.S:在FROM子句中使用INNER JOIN将两张表联结在一起,注意别名不是必须的;ON子句后面所记载的是联结条件,即指定两张表联结所使用的列(联结键),ON必须写在FROM和WHERE之间;在SELECT子句中需要按照“表的别名.列名”的格式进行书写,以防在两个表的同名列之间产生混乱;

将表联结起来后,可以使用WHERE、GROUP BY、HAVING、ORDER BY等子句;

联结起来的表只在SELECT语句执行期间存在,SELECT语句执行之后就会小時。若希望继续使用这张表,则应将其创建成视图

外联结——OUTER JOIN:也是通过ON子句使用联结键将两张表进行联结

SELECT S1.code,S1.shopname,S.name,S.priceFROM Shop1 AS S1 <span style="color:#ff0000;">RIGHT OUTER JOIN</span> Shop AS S<span style="color:#ff0000;">ON</span> S1.name=S.name;
P.S:选取出单张表中全部的信息(内联结只能选取出同时存在于两张表中的数据,而只要数据存在于某一张表中,通过外联结就能够读取出来);通过使用LEFTRIGHT来指定哪张表为主表(最终结果包含主表内所有的数据)

3张以上表的联结:原则上联结表的数量并没有限制

SELECT S1.code,S1.shopname,S.name,S.priceFROM Shop1 AS S1 INNSR JOIN Shop AS SON S1.name=S.name<span style="color:#ff0000;">INNER JOIN Producer AS P</span> --第3张表ON S1.name=P.name;
交叉联结——CROSS JOIN(笛卡尔积):所有联结运算的基础,但在实际业务中并没有使用过(原因1:其结果没有实用价值;原因2:结果行数太多,需要大量的运算时间与高性能设备的支持)

内联结可以理解为“包含在交叉联结结果中的部分”;外联结可以理解为“交叉联结结果之外的部分”

SELECT S1.code,S1.shopname,S.name,S.priceFROM Shop1 AS S1 CROSS JOIN Shop AS SON S1.name=S.name;









0 0
原创粉丝点击