利用SQL語言實現關係代數操作

2022-09-20 11:54:13 字數 2290 閱讀 4171

目錄: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...