目錄:1.並交差的處理
2.舉例
3.空值的處理
4.內連線和外連線
1.並-交-差
(1)sql語言:union,intersect,except
(2)語法格式:子查詢1
通常情況下自動刪除重複元組,不帶all;若要保留重複元組,則要帶 all
(3)假設子查詢1 的乙個元組出現 m 次,子查詢2 的乙個元組出現 n 次,則該元組在:
1)子查詢1 union all 子查詢2 **現 m+n 次
2)子查詢1 intersect all 子查詢2 **現 min(m,n)次
3)子查詢1 except all 子查詢2 **現 max(0, m-n)次
2.舉例
(1)sql並運算:求學過001 號課的同學或學過 003 號課的同學學號
select s# from sc where c# = '001'
union
select s# from sc where c# = '003';
第二種表示方式:select s# from sc where c# = '001' or c3 = '003';
(2)sql並運算:一直兩個表customers(cid, cname, city, discnt), agents(aid, aname, city, percent),求客戶或者**商所在的城市
select city from customers union select city from agents;
(3)sql交運算:求既學過002號課程,又學過003號課程的同學
select s# from sc where c# = '002'
intersect
select s# from sc where c# = '003';
第二種表達方式:select s# from sc where c# = '002' and s# in (select s# from sc where c# = '003');
(4)sql差運算:假定所有同學都有選課,求沒學過 002 號課程的學生學號
select distinct s# from sc //所有同學
except //減去
select s# from sc where c# = '002'; //學過002號課程的同學
第二種表達方式:select s# from sc sc1
where not exists (select * from sc where c# = '002' and sc1.s# = s#);
3.空值的處理
(1)sql語言用 null 來標記空值
(2)空值檢測函式
is [not] null
(3)現行dbms對空值的處理
1)null參與算術運算:表示式的值為null
2)null參與比較運算:結果為false 或 unknown
3)null參與聚集運算:除 count(*)外,其他函式忽略null
(4)舉例
1)找出年齡值為空的學生姓名
select sname from student where sage is null;
注:where sage = null 是錯誤的,空值不能進行運算
4.內連線與外連線
(1)sql語言的 select - from - where
select 列名 [[,列名] ... ]
from 表名1,表名2,...
where 檢索條件;
(2)「from 表名1,表名2」 相當於關係代數中的乘積操作
(3)sql高階語法
select 列名 [[, 列名] ... ]
from 表名1 [natural]
[ inner | [outer] ] join 表名2
) }[where 檢索條件] ...;
(4)解釋:連線運算由連線型別和連線條件構成
1)連線型別(四選一)
2)連線條件(三選一)
(5)舉例:求所有教師的任課情況並按教師號排序(沒有任課的教師也需列在表中)
select teacher.c#, tname, cname
from teacher left outer join course
on teacher.t# = course.t#
order by teacher.c# asc;
第7講 SQL語言關係代數實現
1 sql語言集合運算,並union,交intersect,差except 基本語法 子查詢1 通常下,刪除重複元組不帶all,若要保留重複元素就要帶all 子查詢1的乙個元組出現m次,子查詢2的乙個元組出現n次在,在結果中 1 子查詢1 union all 子查詢2 出現m n次 2 子查詢1 i...
利用C語言實現折半查詢
折半查詢,顧名思義,就是一組有順序的數,按照比較大小的方法找出某乙個數,類似二分法 如下 include includevoid find int arr1,int key,int right else if key arr1 mid left mid 1 else right mid 1 if l...
利用C語言實現自殺環
執行環境 win10,vs2013 約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始從1報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到剩餘乙個人 linklist.c include i...