1. 程式人生 > >基礎知識------SQL練習

基礎知識------SQL練習

我在網上找到這樣的一道sql基礎知識的練習題,想通過這次分享來讓我更加熟練的掌握sql語句的基礎知識下面為題目:

表結構如下:

CREATE TABLE STUDENT
(SNO VARCHAR(3) NOT NULL, 
SNAME VARCHAR(4) NOT NULL,
SSEX VARCHAR(2) NOT NULL, 
SBIRTHDAY DATETIME,
CLASS VARCHAR(5))

CREATE TABLE COURSE
(CNO VARCHAR(5) NOT NULL, 
CNAME VARCHAR(10) NOT NULL, 
TNO VARCHAR(10) NOT NULL)

CREATE TABLE SCORE 

(SNO VARCHAR(3) NOT NULL, 
CNO VARCHAR(5) NOT NULL, 
DEGREE NUMERIC(10, 1) NOT NULL) 

CREATE TABLE TEACHER 
(TNO VARCHAR(3) NOT NULL, 
TNAME VARCHAR(4) NOT NULL, TSEX VARCHAR(2) NOT NULL, 
TBIRTHDAY DATETIME NOT NULL, PROF VARCHAR(6), 
DEPART VARCHAR(10) NOT NULL)

INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'曾華' 

,'男' ,1977-09-01,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'匡明' 
,'男' ,1975-10-02,95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'王麗' 
,'女' ,1976-01-23,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'李軍' 
,'男' ,1976-02-20,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'王芳' 

,'女' ,1975-02-10,95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'陸君' 
,'男' ,1974-06-03,95031);

INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-105' ,'計算機導論',825);
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-245' ,'作業系統' ,804);
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('6-166' ,'資料電路' ,856);
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('9-888' ,'高等數學' ,100);

INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-245',86);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-245',75);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-245',68);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-105',92);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-105',88);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-105',76);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'3-105',64);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'3-105',91);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'3-105',78);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'6-166',85);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'6-106',79);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'6-166',81);

INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) 
VALUES (804,'李誠','男','1958-12-02','副教授','計算機系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) 
VALUES (856,'張旭','男','1969-03-12','講師','電子工程系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (825,'王萍','女','1972-05-05','助教','計算機系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) 

VALUES (831,'劉冰','女','1977-08-14','助教','電子工程系');

1、查詢Student表中的所有記錄的Sname、Ssex和Class列。

select * from student

2、查詢教師所有的單位即不重複的Depart列。

select distinct depart from teacher  

ps:這道題主要考察的是對distinct關鍵字的使用,能夠排除重複項。

3、查詢Student表的所有記錄。

select * from student

4、查詢Score表中成績在60到80之間的所有記錄。

select * from score where degree between 60 and 80  

ps:這道題主要考察的是between關鍵字用法的使用,在a與b之間格式為 between  a and b 。 

5、查詢Score表中成績不等於88的所以記錄

select * from score where degree <> 88


6、查詢Score表中成績為85,86或88的記錄。

select * from score where degree in (85, 86, 88)  

ps:考察in關鍵字的使用,其格式為 in ( a, ..., c )


7、查詢Student表中“95031”班或性別為“女”的同學記錄。

select * from student where class='95031' or ssex='女'


8、以Class降序查詢Student表的所有記錄。

select * from student order by class desc 

ps:考察order by 的排序, 預設為升序排列 asc  ,降序為desc


9、以Cno升序、Degree降序查詢Score表的所有記錄。

select * from score order by cno,degree desc 

結果如下圖:


ps:考察多個欄位同時升降排序,格式為 order by a (asc/desc),..., a (asc/desc) ,還有一點需要注意的是在我測試的時候,欄位的排序是從左到右的,先找到第一個對應的排序欄位,排序之後再找表的下一個,如果下一個在已排序欄位的左側則排序無效,如果我寫成了 select * from score order by degree desc ,cno 則會得到 degree 排序,而cno不排序的結果

結果如下:



10、查詢“95031”班的學生人數。

select count(*) from student where class='95031' 

11、查詢Score表中的最高分的學生學號和課程號。

a.select sno,cno from score where degree= (select max(degree) from score)

b.select sno,cno from score where degree >= all(select degree from score)

ps:這裡考察的是子查詢,連線的子查詢語句直接連線則只能有一條資料否則報錯,多條資料需要與any或者all連線使用。


12、查詢‘3-105’號課程的平均分。

select avg(degree) from score where cno='3-105'

select avg(degree) from score group by cno having cno='3-105'


13、查詢Score表中至少有5名學生選修的並以3開頭的課程的平均分數。

select cno, avg(degree) from score where cno like '3%' group by cno having count(sno)>=5

ps:這裡考察的是group by和聚合函式的使用,以及聚合函式之後的篩選條件是用having 而不是where。

14、查詢最低分大於70,最高分小於90的Sno列。

select sno from score  group by sno having min(degree)>70 and max(degree)<90


15、查詢所有學生的Sname、Cno和Degree列。

select a.sname, a.cno, b.degree from student a left join  score b on a.sno=b.sno


16、查詢所有學生的Sno、Cname和Degree列。

select a.sno, b.cname, c.degree from ((student a  join  score c on a.sno=c.sno)  join course b on c.cno=b.cno)

select a.sno, b.cname, c.degree from student a  join ( score c,  course b) on a.sno=c.sno and  c.cno=b.cno

17、查詢所有學生的Sname、Cname和Degree列。

寫法1:

select a.sname, c.cname, b.degree from (student as a  join score b on a.sno=b.sno)

join course as c on c.cno=b.cno

寫法2:

SELECT A.SNAME,B.CNAME,C.DEGREE FROM STUDENT A JOIN (COURSE B,SCORE C)

ON A.SNO=C.SNO AND B.CNO =C.CNO;


18、查詢“95033”班所選課程的平均分。

SELECT AVG(A.DEGREE) FROM SCORE A JOIN STUDENT B ON A.SNO = B.SNO WHERE B.CLASS='95033';

19、查詢選修“3-105”課程的成績高於“109”號同學成績的所有同學的記錄。

寫法1:

select * from score where cno='3-105' and degree>(select max(degree) from score where sno='109')

寫法2:

select * from score where cno='3-105' and degree>all(select degree from score where sno='109')

寫法3(自連線):

SELECT A.* FROM SCORE A JOIN SCORE B WHERE A.CNO='3-105' AND A.DEGREE>B.DEGREE AND 
B.SNO='109' AND B.CNO='3-105'


20、查詢score中選學一門以上課程的同學中分數為非最高分成績的記錄。

select * from score  group by SNO having count(cno)>'1' and degree<MAX(degree)


21、查詢成績高於學號為“109”、課程號為“3-105”的成績的所有記錄。

select * from score where degree> all(select degree where sno='109' and cno='3-105')


22、查詢和學號為108的同學同年出生的所有學生的Sno、Sname和Sbirthday列。

select sno, sname, sbirthday from student where sbirthday = (select sbirthday from student where sno='108') 


23、查詢“張旭“教師任課的學生成績。

select * from teacher a join  course c on a.tno=c.tno join score s where s.cno=c.cno where a.tname = '張旭'


24、查詢選修某課程的同學人數多於5人的教師姓名。

select t.tname from teacher t join course c on t.tno=c.tno join score s on s.cno=c.cno group by c.cno having COUNT(sno)>5

25、查詢存在有85分以上成績的課程Cno.

select cno from score group by cno having max(degree)>85


26、查詢出“計算機系“教師所教課程的成績表。

select s.* from score s join (course c ,teacher t) on c.cno=s.cno and t.tno=c.tno where t.depart='計算機系'


27、查詢“計算機系”與“電子工程系“不同職稱的教師的Tname和Prof。


28、查詢選修編號為“3-105“課程且成績至少高於選修編號為“3-245”的同學的Cno、Sno和Degree,並按Degree從高到低次序排序。

select cno, sno, degree from score where CNO='3-105' and degree > any(select degree from score where cno='3-245') order by degree desc

相關推薦

基礎知識------SQL練習

我在網上找到這樣的一道sql基礎知識的練習題,想通過這次分享來讓我更加熟練的掌握sql語句的基礎知識下面為題目: 表結構如下: CREATE TABLE STUDENT(SNO VARCHAR(3) NOT NULL, SNAME VARCHAR(4) NOT NULL,S

Java基礎知識綜合練習_簡單的銀行賬戶作業系統

使用java實現一個簡單的銀行賬戶類, 其中包括: 賬戶資訊: 賬號、 姓名、 開戶時間、 身份證號碼、 賬戶上的金額 等成員。有: 存款方法、 取款方法、 顯示開戶時間的方法、 獲得賬上的金額的方法 等。 並編寫測試類。   賬戶類: 1 public class TestDay1

oracle基礎知識,oracle sql練習

本案例用的是oracle資料庫。 一、建表 --dept職位表 drop table dept_test; --刪除語句 create table dept_test( deptno number(2) , dname char(20) , loca

第16講++T-SQL基礎知識

from logs http splay msg 分享 ++ sel 學生表 分別定義一個整型變量和兩個字符型變量。 declare @name varchar(10) declare @age smallint , @msg

sql server使用的相關基礎知識

nbsp png idt 知識 p s 開頭 gin mage num 1、表的管理--表和列的命名 必須以字母開頭 長度不能超過128字符 不要使用sql server的保留字 只能使用如下字符A-Z,a-z,0-9,$,#,_等等 2、表的管理--支持的數據類型

SQL數據庫基礎知識-鞏固篇<一>

公司 index 取數 數字 strong esc 返回 例子 delete SQL數據庫基礎知識-鞏固篇<一>、、、 首先展示兩款我個人很喜歡的數據庫-專用於平時個人SQL技術的練習<特點:體積小,好安裝和好卸載,功能完全夠用了> MyS

SQL】- 基礎知識梳理(四) - 存儲過程

var isp spl 更改 option fault 結果 特定 num 存儲過程的概念 存儲過程Procedure是一組為了完成特定功能的SQL語句集合,經編譯後存儲在數據庫中,用戶通過指定存儲過程的名稱並給出參數來執行 存儲過程的好處 A、 存儲過程允許標準組件式編

SQL】- 基礎知識梳理(六) - 遊標

test 觸發器 刪除 管理系統 一支 spa eal har str 遊標的概念 結果集,結果集就是select查詢之後返回的所有行數據的集合。 遊標(Cursor): 是處理數據的一種方法。 它可以定位到結果集中的某一行,對數據進行讀寫。 也可以移動遊標定位到你需要的

SQL】- 基礎知識梳理(八) - 事務與鎖

隔離性 rep del 數據表 訪問 關系 snapshot 轉換 pro 事務的概念 事務:若幹條T-SQL指令組成的一個操作數據庫的最小執行單元,這個整體要麽全部成功,要麽全部失敗。(並發控制) 事務的四個屬性:原子性、一致性、隔離性、持久性。稱為事務的ACID特性。

sql sever 基礎知識及詳細筆記

false 關系型數據庫 保存 ner 影響 平均值 code framwork 綁定 第六章:程序數據集散地:數據庫 6.1:當今最常用的數據庫 sql server:是微軟公司的產品 oracle:是甲骨文公司的產品 DB2:數據核心又稱DB2通用服務器

MySQL中關於SQL註入的相關需要的基礎知識

img 3.1 lock 默認 nts 3.4 不同 constrain 拼接 零、緒論:   文章部分整理來源於公司同事,特此鳴謝!!! 一、關於註入點在KEY上的註入: 我們來看一個查詢,你的第一個字段是過濾器(filter)第二個字段是查詢的關鍵字,例如查詢ip ==

Sql-基礎知識

order creat esc ins 自動 into 類型 屬性 年齡 -- 數據庫(database):存儲數據的倉庫,-- 數據庫(database)--數據表(table)--列名(字段-field)--數據(值-value)--創建表--(在sqlite數據庫中創

Python編程之基礎知識練習_002

tar time imp roc 魔術方法 class sta family 函數實現 練習內容: (1)函數裝飾器。 (2)使用魔術方法__call__,將一個類實現為裝飾器。 (3)使用魔術方法__enter__與__exit__,實現一個類,使其能為函數提供上下文管

Python編程之基礎知識練習_006

python ORC 閉包函數 dct size class TE end return 練習內容:使用閉包函數模擬類實例 1 __author__ = ‘Orcsir‘ 2 class ClosureInstance: 3 def __init__(sel

Python編程之基礎知識練習_009

ret per 使用 sel pass lambda self val self. 練習內容:使用兩種方式實現字典訪問屬性化:用一個類包裝字典,讓這個字典不使用[]訪問元素,使用.點號訪問元素,如同屬性一樣訪問。 方式一:在__init__中直接操作實例字典 1 __a

Java基礎知識練習02

over 代碼 add lis ble edi java基礎知識 println 字符 1 最小年齡的3個職工 題目描述: 職工有職工號,姓名,年齡.輸入n個職工的信息,找出3個年齡最小的職工打印出來。 輸入描述: 輸入第一行包括1個整數N,1<=N<=30,代

PL/SQL程式設計基礎知識(一)

--PL/SQL變數的宣告和賦值 declare v_ename varchar2(30);--定義變數 begin v_ename:='&請輸入名字';--接受鍵盤輸入 dbms_output.put_line(v_ename); end; --put_line :列印換行

SQL與NoSQL資料庫入門基礎知識詳解

SQL與NoSQL資料庫入門基礎知識詳解 這幾年的大資料熱潮帶動了一激活了一大批hadoop學習愛好者。有自學hadoop的,有報名培訓班學習的。所有接觸過hadoop的人都知道,單獨搭建hadoop裡每個組建都需要執行環境、修改配置檔案測試等過程。對於我們這些入門級新手來說簡直每個都是坑。

SQL sever基礎知識及詳情筆記

右擊 程序 eve 自動 指定 數據庫文件 部分 文件組 完整 第六章:程序數據集散地:數據庫 6.1:當今最常用的數據庫 sql server:是微軟公司的產品 oracle:是甲骨文公司的產品 DB2:數據核心又稱DB2通用服務器 Mysql:是一種開