sql語言怎麼查詢全部,就是實現關係代數裡的除法,其題目如下 如表中有ABC三列,求至少使用了

時間 2021-10-14 19:03:04

1樓:匿名_熱心網友

and (nf >= (year1 || begin_m) and nf <= (year1 || end_m))

group by city, substr(nf, 1, 4)

union all

select city,

(substr(nf, 1, 4) || begin_m || '-' || end_m) as nf,

sum(sales) /

(select sum(sales)

from nanfang_data tt

where (tt.nf >= year2 || begin_m and tt.nf <= year2 || end_m)

and tt.city = t.city) as sales_all

from nanfang_data t

where pm = pm1

and (nf >= year2 || begin_m and nf <= year2 || end_m)

group by city, substr(nf, 1, 4);

end;

2樓:張愛民_浦東

這個貌似有點難,學習

3樓:匿名使用者

select a.sno

from sc a, sc bwhere a.sno = b.snoand a.cno = c and b.cno = b

4樓:寒之逆極

select all b,c from table where a= a1

5樓:匿名使用者

asdsadasdada

給定三個關係,提出查詢目的,要求分別用:關係代數,關係演算,sql的連續查詢,sql的巢狀查詢寫出式子 5

6樓:有底線的隨心所欲

你能說的清楚點嗎?

看不懂,

如果有關聯的話,你可以用join on

access考試題

資料庫sql語句中 查詢選修了全部課程的學生的學號和姓名 理解

7樓:匿名使用者

這思路是用了個雙重否定來求解的。因為sql中沒有全稱量詞,於是要把題目轉換成等價的存在量詞表達形式。即根據(∀x)p≡¬∃(¬p)來轉化為雙重否定的表達。

同時由於“學生x選修課程y ”

之間是不定的,需要使用兩個exist。

於是“選修了全部課程的學生”等價於“不存在(有他沒選的課的)學生”

使用了兩次not exists來實現雙重否定。

先查詢在課程裡查詢“沒有學生選的課程”,第一次否定,

然後再在學生裡查詢“沒有屬於上面情況的學生”的名字,第二次否定;

結合起來,就是 “沒有(沒選的課程)的學生”了。

好了,從裡到外寫出來,就是

select sname from student where not exists(

select * from course where not exists(

select * from sc where sno=student.sno and cno=course.cno

))這個只不過是逆向思維來解決問題的方法。舉一反三,比如要查“被全部學生都選的課程名”

則是求“不存在有學生沒選它的課程”

select cname from course where not exists(

select * from student where not exists(

select * from sc where sno=student.sno and cno=course.cno

))再如,查“所有人都沒選修的課程”,這個雖然是單次否定了,但仍需要兩個存在量詞表述。

等價於查詢“不存在有學生選了它的課程”。

select cname from course where not exists (

select * from student where exists (

select * from sc where cno=course.cno and sno=student.sno))

8樓:風嘯無名

沒有資料庫難以具體說明,總的來說,就是一個多表查詢包括學生基本資訊表、課程資訊表、成績表等,學號為主鍵,查詢姓名和課程、分數等資訊,總分用sum算。

1 。 exists 子查詢找到的提交

not exists 子查詢中 找不到的提交說明:不要去翻譯為存在和不存在,把腦袋搞暈。

2 。 建立程式迴圈的概念,這是一個動態的查詢過程。如 for迴圈 。

3 。 exists執行的流程exists首先執行外層查詢,再執行記憶體查詢,與in相反。 流程為首先取出外層中的第一元組, 再執行內層查詢,將外層表的第一元組代入,若內層查詢為真,即有結果時。

返回外層表中的第一元 組,接著取出第二元組,執行相同的演算法。一直到掃描完外層整表 。

9樓:月光雪松

樓主彆著急!

為好理解我們先從這條sql語句所要實現的功能入手。

功能:查出選修了全部課程的學資訊。那麼sql在查詢資料的時候的遍歷每一個學生資訊。判斷該學生是否滿足條件。

1 如果存在這麼一條course記錄a(暫命名為a), 則不選擇該學生。否則該學生就被查詢出來

2 那麼記錄a,是怎麼查出來的呢?a查出的條件是:不存在sc記錄b,只要不存在b,就可查出a

3 那麼b記錄是什麼?b記錄是選課資訊表,根據學號和課程號可查出記錄b

如果b為空(該學生有沒有選的課程)也就是不存在,則a就有一條記錄,根據規則2可知:因為有a,所以該學生資訊將不被輸出。

如果在sc中每一個課程編號和該學生編號為條件都能夠查出一條記錄b(也就是該學生選修了全部課程),所以a記錄不存在,則輸出該學生的資訊。

也就是在選課表中,如果學生選了全部課程(也就是滿足select * from sc where sno= student.sno and cno= course.cno)始終存在,當然,課程編號是任意的)。

那麼就輸出該學生的資訊。你不要為理解這條sql而忘記了它本身是要做什麼.

帶著sql的目的(要實現的功能)去理解就好了。

10樓:雨夜的緣分

1,select * from sc where sno= student.sno and cno= course.cno

在sc表中查詢符合sno= student.sno and cno= course.cno這兩個條件的所有資料,

2,select * from course where not exists (select * from sc where sno= student.sno and cno= course.cno);這句的意思是在course表中查詢不滿足1,中的所有資料

3,select sname from student where not exists (select * from course where not exists (select * from sc where sno= student.sno and cno= course.cno));

這整句的意思就是查詢student表中所有不滿足2,資料,就是選修了全部課程的學生了

只所以會有這麼多查詢,可能sno= student.sno and cno= course.cno這兩個條件是是sc表查詢的條件分散在另外兩個表中,引用了雙重否定,也就是肯定的意思,達到可以讓student.

sno ,course.cno,在sc表中作為條件的目的

夠詳細吧!!!!

sql語言多表查詢

查詢有不及格成績的學生姓名 select t stud.studname from t stud inner join t select on t stud.studno t select.studno where t select.score 60 查詢有選課的學生姓名 select studna...

請教要實現這個查詢的SQL語句怎麼寫啊

select 姓名 城市 性別 工資 max 日期 from 表 group by 日期 我tm不管 select a.from 表 a left join select 姓名,城市,max 日期 as 日期 from 表 group by 姓名,城市 b on a.姓名 b.姓名 and a.城市...

sql中怎麼查詢名稱以,SQL中怎麼查詢名稱以 A

海天盛 1 建立測試表,如下圖。create table test col 1 id number,var varchar2 200 create table test col 2 id number,var varchar2 200 2 插入測試資料,如下圖。insert into test co...