首页 > 代码库 > SQL server语句练习
SQL server语句练习
相关表:
<span style="white-space:pre">create table DEPT(<span style="white-space:pre"> </span>deptno int not null primary key,<span style="white-space:pre"> </span>dname varchar(14) null,<span style="white-space:pre"> </span>loc varchar(13) null)create table EMP(<span style="white-space:pre"> </span>empno int not null primary key,<span style="white-space:pre"> </span>ename varchar(10) null,<span style="white-space:pre"> </span>job varchar(9) null,<span style="white-space:pre"> </span>mgr int null,<span style="white-space:pre"> </span>hiredate date null,<span style="white-space:pre"> </span>sal float null,<span style="white-space:pre"> </span>comm float null,<span style="white-space:pre"> </span>deptno int null foreign key references DEPT(deptno),)create table SALGRADE(<span style="white-space:pre"> </span>grade int null,<span style="white-space:pre"> </span>losal int null,<span style="white-space:pre"> </span>hisal int null,)</span>
查询部分:
--查询雇员姓名的最后三个字母 SELECT SUBSTRING(ename,LEN(ename)-3,3) FROM dbo.EMP --查询10部门雇员进入公司的星期数 SELECT ename,DATEDIFF(wk,hiredate,GETDATE())AS 进入星期数 FROM dbo.EMP WHERE deptno=10 --1 查询部门30中的所有员工 SELECT * FROM dbo.EMP WHERE deptno=30 --2 列出所有办事员(CLERK)的姓名,编号和部门编号 SELECT ename , empno , deptno FROM emp WHERE job='clerk' --3 找出佣金高于薪金的员工 SELECT * FROM dbo.EMP WHERE comm>sal --求出每个雇员的年薪 SELECT ename,sal*12+ISNULL(comm,0)*12 AS 年薪 FROM dbo.EMP --4 找出佣金高于薪金的60%的员工 SELECT * FROM dbo.EMP WHERE comm>sal*0.6 --5 找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料 SELECT * FROM dbo.EMP WHERE deptno=10 AND job='manager' OR deptno=20 and job='CLERK' --6 -- 既不是经理又不是办事员但薪金大于或等于2000的所有员工的详细资料 SELECT * FROM dbo.EMP WHERE job!='manager' AND job!='clerk' AND sal>=2000 --7 找出收取佣金的员工的不同工作 SELECT DISTINCT job FROM dbo.EMP WHERE comm IS NOT NULL --8 找出不收取佣金或收取佣金低于100的员工 SELECT * FROM dbo.EMP WHERE comm IS NULL OR comm<100 --9 找出各月倒数第3天受雇的所有员工 SELECT * FROM dbo.EMP WHERE MONTH(DATEADD(DAY,3,hiredate))=MONTH(DATEADD(MONTH,1,hiredate)) --10 找出早于12年前受雇的员工 SELECT * FROM dbo.EMP WHERE DATEDIFF(YEAR,hiredate,GETDATE())>12 --11 以首字母大写的方式显示所有员工的姓名 select upper(substring(ename,1,1))+lower(substring(ename,2,len(ename)-1)) from emp; --12 显示正好为5个字符的员工的姓名 SELECT ename FROM emp WHERE LEN(ename)=5 --13 显示不带有"R"的员工的姓名 SELECT ename FROM dbo.EMP WHERE ename NOT LIKE '%R%' --14 显示所有员工的姓名的前三个字符 SELECT SUBSTRING(ename,1,3) FROM dbo.EMP --15 显示所有员工的姓名,用"a"代替所有的"A" SELECT REPLACE(ename,'a','A') FROM dbo.EMP --16 显示满10年服务年限的员工的姓名和受雇日期 SELECT ename,hiredate FROM dbo.EMP WHERE DATEDIFF(year,hiredate,GETDATE())>10 --17 显示员工详细信息,按姓名排序 SELECT * FROM dbo.EMP ORDER BY ename --18 显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在前面 SELECT ename,hiredate FROM dbo.EMP ORDER BY DATEDIFF(year,hiredate,GETDATE()) DESC --19 显示所有员工的姓名,工作和薪金,按工作的降序排序,若工作相同则薪金排序 SELECT ename,job ,sal+ISNULL(comm,0)AS 薪金 FROM dbo.EMP order BY job ,sal+ISNULL(comm,0) --20 显示所有员工的姓名,加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将 --最早年份的员工排在前面 SELECT ename,YEAR(hiredate),MONTH(hiredate) FROM dbo.EMP ORDER BY MONTH(hiredate),YEAR(hiredate) --21 显示在一个月为30天的情况,所有员工的日薪金,忽略余数 SELECT ROUND((sal+ISNULL(comm,0))/30,0) FROM dbo.EMP --22 找出在(任何年份的)2月受雇的所有员工 SELECT * FROM dbo.EMP WHERE MONTH(hiredate)=2 --23 对于每个员工,显示其加入公司的天数 SELECT ename ,DATEDIFF(DAY,hiredate,GETDATE())AS 入职天数 FROM dbo.EMP --24 显示姓名字段的任何位置包含"A"的所有员工的姓名 SELECT ename FROM dbo.EMP WHERE ename LIKE '%A%' --25 以年月日的方式显示所有员工的服务年限(大概) SELECT STR(ROUND(DATEDIFF(day,hiredate,GETDATE())/365,0))+'年'+ str(ROUND(DATEDIFF(day,hiredate,GETDATE())%365/30+1,0))+'月'+ STR(DATEDIFF(day,hiredate,GETDATE())%365%30)+'日' AS 服务年限 FROM dbo.EMP
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。