SQL簡單查詢練習彙總(單個表)
阿新 • • 發佈:2019-01-27
USE [study]
GO
--0 查詢僱員姓名的最後三個字母
select ename,SUBSTRING(ename,LEN(ename)-2,LEN(ename)) from
EMP;
--0.5 查詢10部門僱員進入公司的星期數
select EMP.ename,DATEDIFF(WEEK,hiredate,GETDATE()) from EMP
where deptno=10;
--1 查詢部門30中的所有員工
select * from EMP where deptno=30;
--2 列出所有辦事員(CLERK)的姓名,編號和部門編號
select EMP.ename,EMP.empno,DEPT.deptno from EMP inner join
DEPT
on emp.deptno=dept.deptno where emp.job='CLERK';
--3 找出佣金高於薪金的員工
select *from EMP where comm>sal;
--3.5求出每個僱員的年薪
select ename,SAL*12 from EMP;
--4 找出佣金高於薪金的60%的員工
select * from EMP where comm>sal*0.6;
--5 找出部門10中所有經理(MANAGER)和部門20中所有辦事員(CLERK)的詳細資料
select * from EMP where (deptno=10 and job='MANAGER') or
(deptno=20 and job='CLERK');
--6 找出既不是經理又不是辦事員但薪金大於或等於2000的所有員工的詳細資料
select * from EMP where job!='MANAGER' and job!='CLERK' and
sal>=2000;
--7 找出收取佣金的員工的不同工作
select distinct job from emp where comm is not null;
--8 找出不收取佣金或收取佣金低於100的員工
select * from emp where comm is null or comm<100;
--9 找出各月倒數第3天受僱的所有員工
select * from EMP where
MONTH(DATEADD(day,3,hiredate))=MONTH(DATEADD(MONTH,1,hiredate));
--10 找出早於12年前受僱的員工
select *from EMP where YEAR(dateadd(year,12,hiredate))
--11 以首字母大寫的方式顯示所有員工的姓名
select
UPPER(substring(ename,1,1))+LOWER(SUBSTRING(ename,2,LEN(ename)))
from emp;
--12 顯示正好為5個字元的員工的姓名
select ename from EMP where ename like '_____';
select ename from EMP where len(ename)=5;
--13 顯示不帶有"R"的員工的姓名
select ename from EMP where ename not like '%R%';
--14 顯示所有員工的姓名的前三個字元
select ename,SUBSTRING(ename,1, 3) from EMP;
--15 顯示所有員工的姓名,用"a"代替所有的"A"
select REPLACE(ename,'A','a') from
emp;
--16 顯示滿10年服務年限的員工的姓名和受僱日期
select ename,hiredate from EMP where
YEAR(GETDATE()-hiredate)>10;
--17 顯示員工詳細資訊,按姓名排序
select * from EMP order by ename asc;
--18 顯示員工的姓名和受僱日期,根據其服務年限,將最老的員工排在前面
select ename,hiredate from EMP order by
YEAR(GETDATE()-hiredate) desc;
--19 顯示所有員工的姓名,工作和薪金,按工作的降序排序,若工作相同則薪金排序
select ename,job,sal from EMP order by job desc,sal
desc;
--20 顯示所有員工的姓名,加入公司的年份和月份,按受僱日期所在月排序,若月份相同則將
--最早年份的員工排在前面
select ename,YEAR(hiredate) year,MONTH(hiredate)
month
from EMP order by month asc,year asc;
--21 顯示在一個月為30天的情況,所有員工的日薪金,忽略餘數
select ename,round(sal/30,0) from EMP;
--22 找出在(任何年份的)2月受僱的所有員工
select * from EMP where hiredate like '%-02-%';
--23 對於每個員工,顯示其加入公司的天數
select DATEDIFF(DAY,hiredate,GETDATE()) from emp;
--24 顯示姓名欄位的任何位置包含"A"的所有員工的姓名
select ename from EMP where ename like '%A%';
--25 以年月日的方式顯示所有員工的服務年限(大概)
select
ename,convert(varchar(10),(DATEDIFF(DAY,hiredate,GETDATE())/365))+'年'+
convert(varchar(10),(DATEDIFF(DAY,hiredate,GETDATE())65/30))+'月'+
convert(varchar(10),(DATEDIFF(DAY,hiredate,GETDATE())650))+'日'
from EMP;
select ename,DATEDIFF(DAY,hiredate,GETDATE())/365 年,
DATEDIFF(DAY,hiredate,GETDATE())65/30 月,
DATEDIFF(DAY,hiredate,GETDATE())650 日 from EMP;