數據庫學習7-24


oracle

第四章

練習1  

1.查詢員工姓名中中包含大寫或小寫字母A的員工姓名。

 select ename   from emp  where ename like '%A%' or ename like '%a%';

 2.查詢部門編號為10或20,入職日期在81年5月1日之后,並且姓名中包含大寫字母A的員工姓名,員工姓長度(提示,要求使用INSTR函數,不能使用like進行判斷)

 select ename , LENGTH(ename)  from emp  where deptno in (10,20) and hiredate >'01-5月-81' and INSTR(ename,'A') >0;

 3.寫一個查詢,用首字母大寫,其它字母小寫顯示雇員的 ename,顯示名字的長度,並給每列一個適當的簽,條件是滿足所有雇員名的開始字母是J、A 或 M 的雇員,並對查詢結果按雇員的ename升序排序。(提示使用initcap、length、substr)

 select  initcap(ename),LENGTH(ename)  from emp  where substr(ename,0,1) in ('J','A','M')  order by ename;

 4.查詢每個職工的編號,姓名,工資 – 要求將查詢到的數據按照一定的格式合並成一個字符串. – 前10位:編號,不足部分用*填充,左對齊 – 中間10位:姓名,不足部分用*填充,左對齊 – 后10位:工資,不足部分用*填充,右對齊

 select  concat(lpad(deptno,10,'*'),concat(lpad(ename,10,'*'),rpad(sal,10,'*')))  from emp;

 

練習2

 1.寫一個查詢,分別計算100.456 四舍五入到小數點后第2位,第1位,整數位的值。

 select round(100.456,2),round(100.456,1),round(100.456,0)  from dual;

 2.寫一個查詢,分別計算100.456 從小數點后第2位,第1位,整數位截斷的值。

 select trunc(100.456,2),trunc(100.456,1),trunc(100.456,0)  from dual;

 

練習3

 1.查詢服務器當前時間

 select sysdate  from dual;

 2.查詢部門10,20的員工截止到2000年1月1日,工作了多少個月,入職的月份。(提示使用months_between,extract)

 select months_between('01-1月-00',hiredate) ,extract(month from hiredate)  from emp  where deptno in (10,20);

 3.如果員工試用期6個月,查詢職位不是MANAGER的員工姓名,入職日期,轉正日期,入職日期后的第一個星期一,入職當月的最后一天日期。(提示:使用add_months,next_day,last_day)  

select ename,hiredate,add_months(hiredate,6) new_date,next_day(hiredate,'星期一')

FM,last_day(hiredate) lastday  from emp  where job !='MANAGER';

 

練習4

 1.顯示服務器系統當前時間,格式為2007-10-1217:11:11(提示:使用to_char函數)

 select to_char(sysdate,'yyyy-mm-dd-hh:mm:ss')  from dual;

 2.顯示ename、hiredate 和 雇員開始工作日是星期幾,列標簽DAY(提示:使用to_char函數)  

select ename,hiredate,to_char(hiredate,'day') DAY  from emp;

 3.查詢員工姓名,工資,格式化的工資(¥999,999.99)(提示:使用to_char函數)  

select ename,sal,to_char '¥'||(sal,'999,999.99')  from emp;

4.把字符串2015-3月-18 13:13:13 轉換成日期格式,並計算和系統當前時間間隔多少天。 (提示:使用to_date函數)  

select to_date('2015-3月-18 13:13:13',yyyy-mm-dd-hh:mm:ss) ,months_between(

sysdate,'2015-3月-18 13:13:13')*4*7)  from dual;

 

課后作業[必做題]

1.計算2000年1月1日到現在有多少月,多少周(四舍五入)。

 select round(months_between(sysdate,'01-1月-00'))  months,round(months_between(sysdate,'01-1月-00')*4) week  from dual;  

 --計算天數

 select round((sysdate-to_date('2000-1-1','yyyy-mm-dd')))    from dual;

2.查詢員工ENAME的第三個字母是A的員工的信息(使用2個函數)。

 select *  from emp  where ename like'__A%';

 select *  from emp  where substr(ename,3,1)='A';

3.使用trim函數將字符串‘hello’、‘ Hello ’、‘bllb’、‘ hello ’分別處理得到下列字符串ello、Hello、ll、hello。

 select trim('h' from 'hello'),trim(' Hello '),trim(both 'b'from 'bllb'), trim(' hello')  from dual;

4.將員工工資按如下格式顯示:123,234.00 RMB 。

 select to_char('123,234.00','000,999.00')|| 'RMB' from emp;

5.查詢員工的姓名及其經理編號,要求對於沒有經理的顯示“No Manager”字符串。

 select ename,mgr , NVL(TO_CHAR(mgr),'No Manager')  from   emp  where  mgr is null;

 select ename,  (case when mgr is not null  then to_char(mgr)  else 'No Manager' end) mgr  from emp;

  6.將員工的參加工作日期按如下格式顯示:月份/年份。

 select to_char(hiredate,'mm-yyyy')  from emp;

7.在員工表中查詢出員工的工資,並計算應交稅款:如果工資小於1000,稅率為0,如果工資大於等於1000並小於2000,稅率為10%,如果工資大於等於2000並小於3000,稅率為15%,如果工資大於等於3000,稅率為20%。

 select sal, decode(sign(sal-1000),-1,sal*0,0,sal*0.1,decode(sign(sal-1000),-1,sal*0.1,0,sal*0.15,decode(sign(sal-2000),-1,sal*0.15,0,sal*0.2,decode(sign(sal-3000),-1,sal*0.2))))    from emp;

8.創建一個查詢顯示所有雇員的 ename和 sal。格式化sal為 15 個字符長度,用 $ 左填充,列標簽 SALARY。  

select ename,sal,lpad(sal,15,'*') SALARY  from emp;

 

第六章

練習1

 1.查詢每個部門的部門編號,部門名稱,部門人數,沒有人數的部門也要顯示出來,並按照部門編號升序排序。 

 select emp.deptno,dname,count(ename)  from emp,dept  where emp.deptno=dept.deptno(+)  group by emp.deptno,dname  order by emp.deptno;

 2.查詢部門20的員工,查詢每個月的工資總和及平均工資。

 select sum(sal),avg(sal)  from emp  where deptno=20; 

 3.查詢工作在CHICAGO的員工人數,最高工資及最低工資。

 select count(ename),max(sal),min(sal)  from emp,dept  where emp.deptno=dept.deptno and loc='CHICAGO';

 4.查詢員工表中一共有幾種崗位類型。

 select job  from emp  group by job;

 select distinct job  from emp;

 

練習2  

1.查詢每個部門的部門編號,部門名稱,最高工資,最低工資,工資總和,平均工資。

 select emp.deptno,dname,max(sal),min(sal),sum(sal),avg(sal)  from emp,dept  where emp.deptno=dept.deptno  group by emp.deptno,dname;  

 2.查詢每個部門,每個崗位的部門編號,部門名稱,最高工資,最低工資,工資總和,平均工資。  

select emp.deptno,dname,max(sal),min(sal),sum(sal),avg(sal)  from emp,dept  where emp.deptno=dept.deptno  group by emp.deptno,dname;

 3.查詢每個經理所管理的人數,經理編號,經理姓名,要求包括沒有經理的人員信息。

 select b.empno,b.ename,count(1)  from emp a,emp b  where a.mgr=b.empno(+)and b.job='MANAGER'  group by b.empno,b.ename;

 

練習3

1.查詢部門人數大於2的部門編號,部門名稱,部門人數。

 select emp.deptno,dname,count(ename)  from emp,dept  where emp.deptno=dept.deptno  having count(ename)>2  group by emp.deptno,dname;

 2.查詢部門平均工資大於2000,且人數大於2的部門編號,部門名稱,部門人數,部門平均工資,並按照部門人數升序排序。

 select emp.deptno,dname,avg(sal),count(ename)  from emp,dept  where emp.deptno=dept.deptno  having avg(sal)>2000 and count(ename)>2  group by emp.deptno,dname  order by count(ename);

 

課后作業  

1.查詢部門平均工資在8000元以上的部門名稱及平均工資。

 select dname,avg(sal)  from emp,dept  where emp.deptno=dept.deptno  having avg(sal)>8000  group by dname;

 2.查詢員工工作編號中不是以“SA_”開頭並且平均工資在8000元以上的工作編號及平均工資,並按平均工資降序排序。

 select avg(sal)  from emp  where empno not like 'SA@_%'escape '@'  having avg(sal)>8000  group by empno  order by avg(sal) desc;

 3.查詢工作不為SA_REP,工資的和大於等於25000的工作編號和每種工作工資的和。

 select deptno,sum(sal)  from emp  where job not like 'SA_REP'  having sum(sal)>=25000  group by deptno;

 4.顯示經理號碼,這個經理所管理員工的最低工資,沒有經理的KING也要顯示,不包括最低工資小於3000的,按最低工資由高到低排序。  

select b.empno,min(a.sal)  from emp a,emp b  where  a.mgr=b.empno(+)  having min(sal)>=3000  order by min(sal) desc;  

 5.寫一個查詢,顯示每個部門最高工資和最低工資的差額

 select max(sal)-min(sal)  from emp  group by deptno;

 

MySQL

第五章

練習1  

1.寫一個查詢,分別計算100.456 四舍五入到小數點后第2位,第1位,整數位的值。

 select round(100.46,2),round(100.46,1),round(100.46,0);

2.寫一個查詢,分別計算100.456 從小數點后第2位,第1位,整數位截斷的值。

 select truncate(100.46,2),truncate(100.46,1),truncate(100.46,0);

 

練習2

1.顯示所有員工姓名的前三個字符

 select substr( ename,1,3)  from emp;

2.顯示正好為5個字符的員工的姓名,工資,部門號

 select ename,sal,deptno  from emp  where char_length(ename)=5;

 

練習3

1.寫一個查詢,顯示雇員的 ename,顯示名字的長度,並給每列一個適當的標簽,條件是滿足所有雇員名字的開始字母是J、A 或 M 的雇員,並對查詢結果按雇員的ename升序排序。(提示:使用length、substr)

 select ename,length(ename)

 from emp

 where substr(ename,1,1) in('J','A','M')

 order by ename;

2.查詢員工姓名中中包含大寫或小寫字母A的員工姓名。

 select ename  from emp  where ename like '%A%' or ename like '%a%';

3.顯示所有員工的姓名,用a替換所有"A"

 select replace (ename,'A','a') ename  from emp;

4.查詢部門編號為10或20,入職日期在81年5月1日之后,並且姓名中包含大寫字母A的員工姓名,員工姓名長度

 select ename,length(ename)  from emp  where deptno in (10,20) and hiredate>'81-5-1' and ename like '%A%';

5.查詢每個職工的編號,姓名,工資   要求將查詢到的數據按照一定的格式合並成一個字符串.前10位:編號,不足部分用*填充,左對齊中間10位:姓名,不足部分用*填充,左對齊后10位:  工資,不足部分用*填充,右對齊

 select lpad(deptno,10,'*'),lpad(ename,10,'*'),rpad(sal ,10,'*')  from emp;

 

練習4

1.查詢服務器當前時間

 select now();

2.查詢部門10,20的員工截止到2000年1月1日,工作了多少個月,入職的月份。

 select ceil(datediff('2000-01-01',hiredate)/7)/4,extract(month fromhiredate)

 from emp

 where deptno in(10,20);

3.如果員工試用期6個月,查詢職位不是MANAGER的員工姓名,入職日期,轉正日期,入職日期是第多少月,第多少周

 select ename ,hiredate,date_add(hiredate,interval 6 month) 轉正日期,extract(month from hiredate) 第多少個月,weekofyear(hiredate) 第多少周

 from emp

 where job != 'MANAGER';

 

課后作業

1.計算2000年1月1日到現在有多少月,多少周(四舍五入)。

 select round(datediff(now(),'2000-1-1')/7/4) months,round(datediff(now(),'2000-1-1')/7) weeks

 from emp;

2.查詢員工ENAME的第三個字母是A的員工的信息(使用2個函數)

。  select *  from emp  where ename like '__A%';

3.使用trim函數將字符串‘hello’、‘  Hello ’、‘bllb’、‘ hello    ’分別處理得到下列字符串ello、Hello、ll、hello。

 select trim(leading 'h' from 'hello'),trim(' Hello '),trim(both 'b' from 'bllb'),trim(' hello    ');

4.將員工工資按如下格式顯示:123,234.00 RMB 。

 select concat(format(sal,2),'RMB')  from emp;

5.查詢員工的姓名及其經理編號,要求對於沒有經理的顯示“No Manager”字符串。

 select ename,mgr,ifnull(mgr,'No Manager')  from emp;

6.將員工的參加工作日期按如下格式顯示:月份/年份。

 select date_format(hiredate,'%mm/%yy')  from emp;

7.在員工表中查詢出員工的工資,並計算應交稅款:如果工資小於1000,稅率為0,如果工資大於等於1000並小於2000,稅率為10%,如果工資大於等於2000並小於3000,稅率為15%,如果工資大於等於3000,稅率為20%。

 SELECT E.ENAME 員工,E.SAL 員工的工資,         (CASE                 WHEN E.SAL<1000 THEN E.SAL                 WHEN E.SAL >= 1000 AND E.SAL<=2000 THEN E.SAL*0.1                   WHEN E.SAL >=2000 AND E.SAL<=3000 THEN E.SAL*0.15                     ELSE E.SAL*0.2          END) 應交稅款 FROM EMP E;

8.創建一個查詢顯示所有雇員的 ename和 sal。格式化sal為 15 個字符長度,用 $左填充,列標簽 SALARY。

 select lpad('ename',15,'$') SALARY ,sal  from emp;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM