Oracle經典練習題(附答案)

来源:https://www.cnblogs.com/yjxt/archive/2018/01/09/8250480.html
-Advertisement-
Play Games

Oracle基礎練習題,採用Oracle資料庫自帶的表,適合初學者,其中包括了一些簡單的查詢,已經具有Oracle自身特點的單行函數的應用 本文使用的實例表結構與表的數據如下: emp員工表結構如下: dept部門表: 提示:工資 = 薪金 + 佣金 emp表的現有數據如下: dept表的現有數據如 ...


Oracle基礎練習題,採用Oracle資料庫自帶的表,適合初學者,其中包括了一些簡單的查詢,已經具有Oracle自身特點的單行函數的應用

本文使用的實例表結構與表的數據如下:

emp員工表結構如下:

  1. Name     Type         Nullable Default Comments   
  2. -------- ------------ -------- ------- --------   
  3. EMPNO    NUMBER(4)                       員工號         
  4. ENAME    VARCHAR2(10) Y                  員工姓名         
  5. JOB      VARCHAR2(9)  Y                  工作         
  6. MGR      NUMBER(4)    Y                  上級編號         
  7. HIREDATE DATE         Y                  雇佣日期         
  8. SAL      NUMBER(7,2)  Y                  薪金         
  9. COMM     NUMBER(7,2)  Y                  佣金         
  10. DEPTNO   NUMBER(2)    Y                  部門編號 

dept部門表:

  1. Name   Type         Nullable Default Comments   
  2. ------ ------------ -------- ------- --------   
  3. DEPTNO NUMBER(2)                         部門編號          
  4. DNAME  VARCHAR2(14) Y                    部門名稱       
  5. LOC    VARCHAR2(13) Y                    地點    

提示:工資 = 薪金 + 佣金

emp表的現有數據如下:

  1. SQL> select * from emp;  
  2.  
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5. 7369  SMITH      CLERK      7902 1980-12-17     800.00               20  
  6. 7499  ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30  
  7. 7521  WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30  
  8. 7566  JONES      MANAGER    7839 1981-4-2      2975.00               20  
  9. 7654  MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30  
  10. 7698  BLAKE      MANAGER    7839 1981-5-1      2850.00               30  
  11. 7782  CLARK      MANAGER    7839 1981-6-9      2450.00               10  
  12. 7788  SCOTT      ANALYST    7566 1987-4-19     4000.00               20  
  13. 7839  KING       PRESIDENT       1981-11-17    5000.00               10  
  14. 7844  TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30  
  15. 7876  ADAMS      CLERK      7788 1987-5-23     1100.00               20  
  16. 7900  JAMES      CLERK      7698 1981-12-3      950.00               30  
  17. 7902  FORD       ANALYST    7566 1981-12-3     3000.00               20  
  18. 7934  MILLER     CLERK      7782 1982-1-23     1300.00               10  
  19. 14 rows selected 

dept表的現有數據如下:

  1. SQL> select * from dept;  
  2.   
  3. DEPTNO DNAME          LOC  
  4. ------ -------------- -------------  
  5. 10   ACCOUNTING     NEW YORK  
  6. 20   RESEARCH       DALLAS  
  7. 30   SALES          CHICAGO  
  8. 40   OPERATIONS     BOSTON  
  9. rows selected 

用SQL完成以下問題列表:

第一篇

  1. 列出至少有一個員工的所有部門。
  2. 列出薪金比“SMITH”多的所有員工。
  3. 列出所有員工的姓名及其直接上級的姓名。
  4. 列出受雇日期早於其直接上級的所有員工。
  5. 列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門
  6. 列出所有“CLERK”(辦事員)的姓名及其部門名稱。
  7. 列出最低薪金大於1500的各種工作。
  8. 列出在部門“SALES”(銷售部)工作的員工的姓名,假定不知道銷售部的部門編號。
  9. 列出薪金高於公司平均薪金的所有員工。
  10. 列出與“SCOTT”從事相同工作的所有員工。
  11. 列出薪金等於部門30中員工的薪金的所有員工的姓名和薪金。
  12. 列出薪金高於在部門30工作的所有員工的薪金的員工姓名和薪金。
  13. 列出在每個部門工作的員工數量、平均工資和平均服務期限。
  14. 列出所有員工的姓名、部門名稱和工資。
  15. 列出所有部門的詳細信息和部門人數。
  16. 列出各種工作的最低工資。
  17. 列出各個部門的MANAGER(經理)的最低薪金。
  18. 列出所有員工的年工資,按年薪從低到高排序。

第二篇

  1. 找出EMP表中的姓名(ENAME)第三個字母是A 的員工姓名。
  2. 找出EMP表員工名字中含有A 和N的員工姓名。
  3. 找出所有有佣金的員工,列出姓名、工資、佣金,顯示結果按工資從小到大,佣金從大到小。
  4. 列出部門編號為20的所有職位。
  5. 列出不屬於SALES 的部門。
  6. 顯示工資不在1000 到1500 之間的員工信息:名字、工資,按工資從大到小排序。
  7. 顯示職位為MANAGER 和SALESMAN,年薪在15000 和20000 之間的員工的信息:名字、職位、年薪。
  8. 說明以下兩條SQL語句的輸出結果:
    1. SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;  
    2. SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL; 
  9. 讓SELECT 語句的輸出結果為
    1. SELECT * FROM SALGRADE;  
    2. SELECT * FROM BONUS;  
    3. SELECT * FROM EMP;  
    4. SELECT * FROM DEPT;  
    5. ……

    列出當前用戶有多少張數據表,結果集中存在多少條記錄。 

  10.判斷SELECT ENAME,SAL FROM EMP WHERE SAL > '1500'是否報錯,為什麼?

 

 

答案:如果需要建表,可以看看這個:http://www.cnblogs.com/yjxt/p/8193801.htm------第一篇

--1.列出至少有一個員工的所有部門。
select dname from dept where deptno in(select deptno from emp group by deptno having count(deptno)>=3); 

--2.列出薪金比“SMITH”多的所有員工。
select * from emp where sal>(select sal from emp where ename='SMITH');

--3.列出所有員工的姓名及其直接上級的姓名。
select a.ename,(select ename from emp b where b.empno=a.mgr) as boss_name from emp a;  

--4.列出受雇日期早於其直接上級的所有員工。
select a.ename from emp a where a.hiredate>(select hiredate from emp b where b.empno=a.mgr);

--5.列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門(left join從左表那裡返回所有的行,即使在右表中沒有匹配的行。)
select a.dname,b.empno,b.ename,b.job,b.mgr,b.hiredate,b.sal,b.deptno from dept a left join emp b on a.deptno=b.deptno;

--6.列出所有“CLERK”(辦事員)的姓名及其部門名稱。(:as 是 alias 的縮寫,是“別名”的意思,後面接中文需要用 "" 。)
select a.ename,(select dname from dept b where b.deptno=a.deptno) as dname from emp a where a.job='CLERK';
select a.ename,b.dname from emp a join dept b on a.deptno=b.deptno and a.job='CLERK';  

--7.列出最低薪金大於1500的各種工作。(distinct 篩選重覆值)
select distinct job from emp group by job having min(sal)>1500;   

--8.列出在部門“SALES”(銷售部)工作的員工的姓名,假定不知道銷售部的部門編號。
select ename from emp where deptno=(select deptno from dept where dname='SALES');

--9.列出薪金高於公司平均薪金的所有員工。
select ename from emp where sal>(select avg(sal) from emp);

--10.列出與“SCOTT”從事相同工作的所有員工。
select ename from emp where job=(select job from emp where ename='SCOTT');

--11.列出薪金等於部門30中員工的薪金的所有員工的姓名和薪金。(in 操作符允許我們在where子句中規定多個值)
select ename,sal from emp where sal in(select sal from emp where deptno=30);

--12.列出薪金高於在部門30工作的所有員工的薪金的員工姓名和薪金。(max() 求最大值)
select ename,sal from emp where sal>(select max(sal) from emp where deptno=30);

--13.列出在每個部門工作的員工數量、平均工資和平均服務期限。(group by+[分組欄位](可以有多個)用於結合合計函數,根據一個或多個列對結果集進行分組。)
select (select b.dname from dept b where b.deptno=a.deptno) 部門, count(deptno) 平均工資,avg(sal) 平均服務期限 from emp a group by deptno;

--14.列出所有員工的姓名、部門名稱和工資
select ename,(select b.dname from dept b where b.deptno= a.deptno) 部門,sal from emp a;

--15.列出所有部門的詳細信息和部門人數。(count(列名)函數返回指定列的值的數目,返回的是一個數字)
select deptno, dname, loc,(select count(deptno) from emp b where b.deptno=a.deptno group by deptno) 部門人數 from dept a;

--16.列出各種工作的最低工資。( min(列名) 求最小值 ;max(列名) 求最大值 )
select job, min(sal+nvl(comm,0) from emp group by job;
select job, min(nvl2(comm,sal+comm,sal)) from
emp group by job; --17.列出各個部門的MANAGER(經理)的最低薪金。 select deptno,(select dname from dept b where b.deptno=a.deptno) 部門,min(sal) from emp a where job='MANAGER' group by deptno; --18.列出所有員工的年工資,按年薪從低到高排序。( nvl(表達式,value):如果表達式計算結果為 null ,則返回 value) select ename,(sal+nvl(comm,0))*12 as salpersal from emp order by salpersal;
select ename,(nvl2(comm,sal+comm, sal))*12 as salpersal from emp order by salpersal;

------第二篇 --1. 找出EMP表中的姓名(ENAME)第三個字母是A 的員工姓名。(like 操作符用於在 where 子句中搜索列中的指定模式。 "%" 可用於定義通配符(模式中缺少的字母)。) select ename from emp where ename like '__A%'; --2. 找出EMP表員工名字中含有A 和N的員工姓名。(and 並且 ; or 或者) select ename from emp where ename like '%A%' and ename like '%N%' --3. 找出所有有佣金的員工,列出姓名、工資、佣金,顯示結果按工資從小到大,佣金從大到小。(order by 預設按照升序排序;order by 列名 desc 降序) select ename,nvl2(comm,sal+comm,sal) as wage,comm from emp order by wage,comm desc; --4. 列出部門編號為20的所有職位。(和第一篇的第七題類似) select distinct job from emp where deptno=20; --5. 列出不屬於SALES 的部門。 --in和exists的區別: --exists(相關子查詢):存在,後面一般都是子查詢,不返回列表的值,只是返回一個ture或false的結果 --in:包含,in()後面的子查詢 是返回結果集的 select distinct * from dept where dname not in('SALES'); select distinct * from dept where exists(select dname from dept where dname='SALES'); --6. 顯示工資不在1000 到1500 之間的員工信息:名字、工資,按工資從大到小排序。(between ... and 會選取介於兩個值之間的數據範圍。) select ename,nvl2(comm,sal+comm,sal) as wage from emp where nvl2(sal,comm+comm,sal) not between 1000 and 1500 order by wage desc; select ename,nvl2(comm,sal+comm,sal) as wage from emp where nvl2(sal,comm+comm,sal)<1000 or sal+comm>1500 order by wage desc; -- 7. 顯示職位為 MANAGER 和 SALESMAN,年薪在15000 和20000 之間的員工的信息:名字、職位、年薪。 select ename 姓名,job 職位,(sal+nvl(comm,0))*12 年薪 from emp where (sal+comm)*12 between 15000 and 20000 and job in('MANAGER','SALESMAN') -- 8. 說明以下兩條SQL語句的輸出結果: -- SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL; -- SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL; -- 答案:IS NULL:是判斷某個‘欄位’是否為空,為空並不等價於為空字元串或為數字0; -- = NULL :是判斷某個‘值’是否等於NULL,NULL=NULL和NULL="" 都返回false。<br=""> --9.讓SELECT 語句的輸出結果為 -- SELECT * FROM SALGRADE;   -- SELECT * FROM BONUS;   -- SELECT * FROM EMP;   -- SELECT * FROM DEPT;   -- …… --列出當前用戶有多少張數據表,結果集中存在多少條記錄。  select * from user_tables; --10.判斷SELECT ENAME,SAL FROM EMP WHERE SAL > '1500'是否報錯,為什麼? --答:不會抱錯,這兒存在隱式數據類型的。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Debian9下載地址 https://www.debian.org/distrib/ Debian9有三個鏡像文件 第一個包含系統2、3兩個主要是一些軟體的安裝包只需下載第一個安裝系統即可 預設安裝完成後在使用apt-get install時會出現更換介質 類似: “更換介質:請把標有“Debia ...
  • 本文記錄阿裡雲ECS申請CA證書流程先到阿裡雲控制台找到CA證書服務,這裡兩台ECS都已經申請簽發了證書,如果是還沒申請的就在“狀態”中點擊補全; 進去後填寫完個人信息後,這裡選擇免費證書; 提交申請後就可以等待審核了,在審核過程中可以點擊“進度”進行查看,在“進度”裡面可以先按操作進行配置,在裡面 ...
  • 系統:CentOS7.2 官網地址:https://www.elastic.co/guide/en/logstash/current/installing-logstash.html#installing-logstash 1. 在/etc/yum.repos.d/下新建logstash.repo ...
  • 什麼是證書? 它是用來證明某某東西確實是某某東西的東西。通俗地說,證書就好比公章。通過公章,可以證明相關文件確實是對應的公司發出的。 理論上,人人都可以找個證書工具,自己做一個證書。 什麼是CA? CA全稱Certificate Authority,也叫“證書授權中心”。它是負責管理和簽發證書的第三 ...
  • 在MySQL的使用過程中,瞭解字元集、字元序的概念,以及不同設置對數據存儲、比較的影響非常重要。不少同學在日常工作中遇到的“亂碼”問題,很有可能就是因為對字元集與字元序的理解不到位、設置錯誤造成的。 本文由淺入深,分別介紹瞭如下內容: 1. 字元集、字元序的基本概念及聯繫 2. MySQL支持的字元... ...
  • 緣由 每天學習一段時間發現,瑣瑣碎碎的學習,對日常的工作幫助很大,避免了之前踩過的各種坑; 但,對於這些坑是如何形成的,深挖一會兒就不行了。 思考之下,發現,平時的所學如同學習如何填坑; 系統性的學習,才是,從斷面看這個坑,時間跨度上看這個坑的形成和填上,也可以說,是升級我們的鏟子; 那句話怎麼說來 ...
  • 視圖是從一個或者多個表中查詢數據的另一種方式。利用視圖可以集中、簡化定製資料庫,同時還能保障安全。 視圖其結構和數據是建立在對應的查詢基礎上的。和表一樣,視圖也是包括幾個被定義的數據列和多個數據行,但本質而言,這些數據列和數據行來源於他所引用的表。所以試圖不是真是存在的基礎表,而是一張虛表。我們也可 ...
  • 問題:mysql不管是用免安裝版的,還是用直接安裝的,還是用phpStudy直接發佈的mysql服務。都只能用localhost登錄,不能用伺服器的ip進行遠程訪問 遇到這個問題。按照網上大家介紹的方法去解決,但是一直不行。後來發現自己的阿裡雲伺服器安全組規則中沒有添加埠號為3306的項,加上之後 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...