1.用一條SQL 語句 查詢出每門課都大於80 分的學生姓名
name kecheng fenshu
張三 語文 81
張三 數學 75
李四 語文 76
李四 數學 90
王五 語文 81
王五 數學 100
王五 英語 90
select distinct name from table where name not in (select distinct name from table where fenshu<=80)
或者
select name from table group by name having min(fenshu)>80
學生表 如下:
自動編號 學號 姓名 課程編號 課程名稱 分數
1 2005001 張三 0001 數學 69
2 2005002 李四 0001 數學 89
3 2005001 張三 0001 數學 69
刪除除了自動編號不同, 其他都相同的學生冗餘信息
delete tablename where 自動編號 not in(select min( 自動編號) from tablename group by學號, 姓名, 課程編號, 課程名稱, 分數)
3.一個叫 team 的表,裡面只有一個欄位name, 一共有4 條紀錄,分別是a,b,c,d, 對應四個球對,現在四個球對進行比賽,用一條sql 語句顯示所有可能的比賽組合.
你先按你自己的想法做一下,看結果有我的這個簡單嗎?
答:select a.name, b.name
from team a, team b
where a.name < b.name
4.請用SQL 語句實現:從TestDB 數據表中查詢出所有月份的發生額都比101 科目相應月份的發生額高的科目。請注意:TestDB 中有很多科目,都有1 -12 月份的發生額。
AccID :科目代碼,Occmonth :發生額月份,DebitOccur :發生額。
資料庫名:JcyAudit ,數據集:Select * from TestDB
答:select a.*
from TestDB a
,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b
where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur
5.面試題:怎麼把這樣一個表兒
year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成這樣一個結果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4
select year,
(select amount from aaa m where month=1 and m.year=aaa.year) as m1,
(select amount from aaa m where month=2 and m.year=aaa.year) as m2,
(select amount from aaa m where month=3 and m.year=aaa.year) as m3,
(select amount from aaa m where month=4 and m.year=aaa.year) as m4
from aaa group by year
說明:複製表( 只複製結構, 源表名:a新表名:b)
SQL: select * into b from a where 1<>1 (where1=1,拷貝表結構和數據內容)
Oracle:create table b
As
Select * from a where 1=2
[<>(不等於)(SQL Server Compact)
比較兩個表達式。 當使用此運算符比較非空表達式時,如果左操作數不等於右操作數,則結果為 TRUE。 否則,結果為 FALSE。]
說明:拷貝表( 拷貝數據, 源表名:a目標表名:b)
SQL: insert into b(a, b, c) select d,e,f from a;
說明:顯示文章、提交人和最後回復時間
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
說明:外連接查詢( 表名1 :a表名2 :b)
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUTER JOIN b ON a.a = b.c
ORACLE:select a.a, a.b, a.c, b.c, b.d, b.f from a ,b
where a.a = b.c(+)
說明:日程安排提前五分鐘提醒
SQL: select * from 日程安排 where datediff('minute',f 開始時間,getdate())>5
說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
SQL:
Delete from info where not exists (select * from infobz where info.infid=infobz.infid )
12.有兩個表A 和B ,均有key 和value 兩個欄位,如果B 的key 在A 中也有,就把B 的value 換為A 中對應的value
這道題的SQL 語句怎麼寫?
update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);
13 觸發器的作用?
答:觸發器是一中特殊的存儲過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護數據的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的數據操作,而該操作又會導致該表觸發器被觸發。
14 什麼是存儲過程?用什麼來調用?
答:存儲過程是一個預編譯的SQL 語句,優點是允許模塊化的設計,就是說只需創建一次,以後在該程序中就可以調用多次。如果某次操作需要執行多次SQL ,使用存儲過程比單純SQL 語句執行要快。可以用一個命令對象來調用存儲過程。
15 索引的作用?和它的優點缺點是什麼?
答:索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數據。索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增加了資料庫的尺寸大小。
16 什麼是內存洩漏?
答:一般我們所說的內存洩漏指的是堆內存的洩漏。堆內存是程序從堆中為其分配的,大小任意的,使用完後要顯示釋放內存。當應用程式用關鍵字new 等創建對象時,就從堆中為它分配一塊內存,使用完後程序調用free 或者delete 釋放該內存,否則就說該內存就不能被使用,我們就說該內存被洩漏了。
17 維護資料庫的完整性和一致性,你喜歡用觸發器還是自寫業務邏輯?為什麼?
答:我是這樣做的,儘可能使用約束,如check, 主鍵,外鍵,非空欄位等來約束,這樣做效率最高,也最方便。其次是使用觸發器,這種方法可以保證,無論什麼業務系統訪問資料庫都可以保證數據的完整新和一致性。最後考慮的是自寫業務邏輯,但這樣做麻煩,編程複雜,效率低下。
18 什麼是事務?什麼是鎖?
答:事務就是被綁定在一起作為一個邏輯工作單元的SQL 語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID 測試,即原子性,一致性,隔離性和持久性。
鎖:在所以的 DBMS中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和並發性。與現實生活中鎖一樣,它可以使某些數據的擁有者,在某段時間內不能使用某些數據或數據結構。當然鎖還分級別的。
19 什麼叫視圖?遊標是什麼?
答:視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表查詢。
遊標:是對查詢出來的結果集作為一個單元來有效的處理。遊標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用遊標,但是需要逐條處理數據的時候,遊標顯得十分重要。
20 為管理業務培訓信息,建立3個表:
S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學號,學員姓名,所屬單位,學員年齡
C(C#,CN)C#,CN分別代表課程編號,課程名稱
SC(S#,C#,G) S#,C#,G分別代表學號,所選的課程編號,學習成績
(1)使用標準SQL嵌套語句查詢選修課程名稱為』稅收基礎』的學員學號和姓名?
答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=』稅收基礎』)
(2) 使用標準SQL嵌套語句查詢選修課程編號為』C2』的學員姓名和所屬單位?
答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=』c2』
(3) 使用標準SQL嵌套語句查詢不選修課程編號為』C5』的學員姓名和所屬單位?
答:select sn,sd from s where s# not in(select s# from sc where c#=』c5』)
(4)查詢選修了課程的學員人數
答:select 學員人數=count(distinct s
(5) 查詢選修課程超過5門的學員學號和所屬單位?
答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)
原文連結:
https://www.cnblogs.com/diffrent/p/8854995.html
數據人才(ID:datarencai)
(一個幫助數據人才找工作,
幫助數據公司招人才的公眾號,
也分享數據人才學習和生活的有趣事情。)
歡迎關注和隨喜分享。