实例介绍
【实例截图】
【核心代码】
CREATE TABLE EMP ( EMPNO numeric(5,0) NOT NULL primary key,--雇员的编号 ENAME nvarchar(10) not null,--雇员的名字 JOB nvarchar(9)not null,--雇员的的职位 MGR numeric(5,0),--上级主管编号 HIREDATE datetime,--入职(受雇)日期 SAL numeric(7, 2),--薪金; COMM numeric(7, 2),--佣金; DEPTNO numeric(2,0)--部门编号 ) go CREATE TABLE DEPT ( DEPTNO numeric(2) primary key,--部门编号 DNAME nvarchar(14) not null,--部门名称 LOC部门所在地 nvarchar(13) --部门所在地 ); INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902,'2000-12-17', 800, NULL, 20); INSERT INTO EMP VALUES (7499, 'allen', 'SALESMAN', 7698,'2001-2-20', 1600, 300, 30); INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698,'2001-2-22', 1250, 500, 30); INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839,'2001-4-2', 2975, NULL, 20); INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,'2001-9-28',1250, 1400, 30); INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,'2001-5-1', 2850, NULL, 30); INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,'2001-6-9', 2450, NULL, 10); INSERT INTO EMP VALUES (7788, 'scott', 'ANALYST', 7566,'2002-12-9',3000, NULL, 20); INSERT INTO EMP VALUES (7839, 'king', 'PRESIDENT', NULL,'2001-11-17',5000, NULL, 10); INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,'2001-9-8', 1500, 0, 30); INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,'2003-1-12',1100, NULL, 20); INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,'2001-3-12',950, NULL, 30); INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,'2001-3-12',3000, NULL, 20); INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,'2002-01-23',1300, NULL, 10); INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON'); select *from EMP--员工表 select *from DEPT--部门表 select COUNT(COMM) from EMP --列出至少有一个雇员的部门 select DEPTNO ,COUNT(*) from EMP GROUP BY DEPTNO HAVING COUNT(EMPNO)>=1 --列出各种了那个类别工作的最低工资 select job, MIN(sal) from EMP group by JOB --列出各个部门的经理的最低工资 如果where和group同时从在 先筛选行再分组 --最后自己希望显示的是最低,部门 或者加个经理 select MIN(SAL),DEPTNO from EMP WHERE JOB= 'manager' group by DEPTNO having MIN(SAL)>2800 SELECT MIN(SAL) FROM EMP WHERE DEPTNO=10 ------列出各种工作类别的最低薪金大于1500 --找出符合条件的工作 --这些工作的最低薪金大于1500的 ----显示的是工作类别,最低薪金 SELECT MIN(SAL),JOB FROM EMP GROUP BY JOB HAVING MIN(SAL)>1500 SELECT MIN(SAL),JOB FROM EMP WHERE SAL >1500 GROUP BY JOB --1、查询所有的雇员名字 SELECT ENAME FROM EMP --2、查询所有的部门 SELECT DISTINCT DEPTNO FROM EMP GROUP BY DEPTNO SELECT DEPTNO FROM EMP GROUP BY DEPTNO --3、查询没有佣金(COMM)的所有雇员信息 SELECT * FROM EMP WHERE COMM is null --4、查询薪金(SAL)和佣金(COMM)总数大于2000的所有雇员信息 --提示:isnull(列名,0) :如果该列中有空值,就把空值当做0做计算 SELECT * FROM EMP WHERE isnull(COMM,0) isnull(SAL,0)>2000 --5、选择部门编号=30中的雇员 SELECT E.ENAME FROM EMP E WHERE E.DEPTNO=30 --6、列出所有Job办事员("CLERK")的姓名、编号和部门名称 --1写法 SELECT JOB, ENAME,EMPNO,DNAME FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO AND E.JOB='CLERK' --2写法 SELECT JOB, ENAME,EMPNO,DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO AND EMP.JOB='CLERK' --7、找出佣金高于薪金的雇员 SELECT EMPNO ,ENAME FROM EMP WHERE COMM>SAL --8、找出佣金高于(薪金的60%)的雇员 SELECT EMPNO ,ENAME FROM EMP WHERE COMM>SAL*0.6 --9、找出部门10中所有经理和部门20中的所有办事员的详细资料 SELECT *FROM EMP WHERE (DEPTNO=10 OR DEPTNO=20) AND JOB='CLERK' --10、找出既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料 SELECT * FROM EMP WHERE (JOB !='CLERK' AND JOB!='MANAGER') AND SAL>=2000 --11、找出收取佣金的雇员的不同工作 SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL SELECT * FROM EMP --12、找出不收取佣金或收取的佣金低于100的雇员 SELECT * FROM EMP WHERE COMM < 100 OR COMM IS NULL --13、找出早于8年之前受雇的雇员 SELECT * FROM EMP WHERE DATEADD(YEAR,8,HIREDATE) < GETDATE() --14、显示首字母大写的所有雇员的姓名???????????????????????????????????????????????????????????????????????????????????? --提示:区分大小写 --collate:指定排序规则的 --修改表,设置大小写是否敏感, --不区分大小写 chinese_prc_ci_as --区分大小写 chinese_prc_cs_as alter table emp alter column ename varchar(20) collate chinese_prc_cs_as select ename from emp where ENAME like '[A]%' SELECT ENAME FROM EMP WHERE ENAME LIKE '[QWERTYUIOPASDFGHJKLZXCVBNM]%' -- 15 --15、显示正好为5个字符的雇员姓名????????????????????????????????????????????????????????????????????????????????????? SELECT * FROM EMP WHERE ENAME LIKE '_____' -- 16 --16、显示带有'R'的雇员姓名 不区分大小写?????????????????????????????????????????????????????????????????????????? SELECT * FROM EMP WHERE ENAME LIKE '%R%' OR ENAME LIKE '%r%' -- 17 --17、显示不带有'R'的雇员姓名????????????????????????????????????????????????????????????????????????????????????????? SELECT * FROM EMP-- 18 --18、显示包含"A"的所有雇员的姓名及"A"在姓名字段中的位置??????????????????????????????????????????////////??????????? -- 提示: 使用函数 charindex() SELECT ENAME,CHARINDEX ( 'A' ,ENAME ,0 ) FROM EMP WHERE ENAME LIKE'%A%' --19、显示所有雇员的姓名,用a替换所有'A' SELECT * FROM EMP --20、显示所有雇员的姓名的前三个字符 SELECT SUBSTRING(ENAME ,1,3) FROM EMP --21、显示雇员的详细资料,按姓名排序 SELECT * FROM EMP ORDER BY ENAME --22、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面 SELECT * FROM EMP --23、显示所有雇员的姓名、工作和薪金,按工作降序顺序排序, --而工作相同的按薪金升序排序. SELECT ENAME ,JOB,SAL FROM EMP ORDER BY JOB DESC,SAL --24、显示在一个月为30天的情况下所有雇员的日薪金,忽略小数 SELECT * FROM EMP --25、找出在(任何年份的)2月受聘的所有雇员 SELECT ENAME 雇员,HIREDATE 受雇日期 FROM EMP WHERE DATEPART(MONTH,HIREDATE)=2 --26、对于每个雇员,显示其加入公司的天数?????????????????????????????????????????????????????????????????? SELECT * FROM EMP select DatePart(year,'2014-01-01'),count(*) from EMP group by DatePart(year,'2015-01-01') --27、列出至少有一个雇员的所有部门??????????? SELECT DEPTNO FROM EMP GROUP BY DEPTNO --28、列出各种类别工作的最低工资 SELECT MIN(SAL) ,JOB FROM EMP GROUP BY JOB --29、列出各个部门的MANAGER(经理)的最低薪金 SELECT DEPTNO, MIN(SAL) FROM EMP WHERE JOB='MANAGER' GROUP BY DEPTNO --30、列出薪金高于公司平均水平的所有雇员 SELECT * FROM EMP --31、列出各种工作类别的最低薪金,并使最低薪金大于1500 SELECT * FROM EMP --32、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇 日所在月排序,将最早年份的项目排在最前面$$$$$$$$$$$$$$$ SELECT * FROM EMP --33、显示所有雇员的姓名以及满8年服务年限的日期 SELECT * FROM EMP --34、显示所有雇员的服务年限:总的年数或总的月数或总的天数 SELECT * FROM EMP --35、列出按计算的字段排序的所有雇员的年薪.即:按照年薪对雇 员进行排序,年薪指雇员每月的总收入总共12个月的累加 SELECT * FROM EMP --36、列出年薪前5名的雇员 SELECT * FROM EMP --37、列出年薪低于10000的雇员 SELECT * FROM EMP --38、列出雇员的平均月薪和平均年薪 SELECT * FROM EMP --EMP --DEPT --39、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门 --SELECT * FROM DEPT LEFT [OUTER] JOIN EMP ON DEPT.DEPTNO=EMP.DEPTNO SELECT DNAME, ENAME FROM EMP E RIGHT OUTER JOIN DEPT D ON E.DEPTNO=D.DEPTNO -- 部门编号 部门名称 雇员名字 SELECT DEPT.DEPTNO 部门编号,DNAME 部门名称 ,ENAME 雇员名称 FROM DEPT LEFT JOIN EMP ON DEPT.DEPTNO=EMP.DEPTNO --40、列出每个部门的信息以及该部门中雇员的数量 SELECT DEPT.DEPTNO 部门编号,DNAME 部门名称,COUNT(ENAME) 人数 FROM DEPT LEFT JOIN EMP ON DEPT.DEPTNO=EMP.DEPTNO GROUP BY DEPT.DEPTNO,DNAME --部门信息 该部门雇员的数量 按部门分组 SELECT D.DNAME 部门名称,COUNT(ENAME) 人数,D.DEPTNO 部门编号 FROM EMP E RIGHT JOIN DEPT D ON E.DEPTNO=D.DEPTNO GROUP BY D.DEPTNO,DNAME --41、列出薪金比"SMITH"多的所有雇员 SELECT * FROM EMP --42、列出所有雇员的姓名及其直接上级的姓名(自连接)$$$$$$$$$$$$$$$$$$$$$$$$$ --自连接:就是一个表自己和自己连接, --注意一定要用表别名,区分它们 SELECT * FROM EMP --43、列出入职日期早于其直接上级的所有雇员$$$$$$$$$$$$$$$$$$$$$$$$$ SELECT * FROM EMP --44、列出所有办事员("CLERK")的姓名及其部门名称 SELECT * FROM EMP --45、列出从事"SALES"(销售)工作的雇员的姓名,假定不知道 销售部的部门编号 SELECT * FROM EMP --46、列出与"SCOTT"从事相同工作的所有雇员 SELECT * FROM EMP --47、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30 中任何一个雇员的薪金 SELECT * FROM EMP --48、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30 中所有雇员的薪金 SELECT * FROM EMP --49、列出从事同一种工作但属于不同部门的雇员的不同组合 SELECT * FROM EMP E1,EMP E2 WHERE E1.JOB =E2.JOB AND E1.DEPTNO<>E2.DEPTNO AND E1.ENAME<E2.ENAME --50、列出所有雇员的雇员名称、部门名称和薪金 -- SELECT * FROM EMP --51 回家作业: --要求:用子查询实现,查询emp表中的第6到第10个员工(分页的基础) --(特别 提醒:员工编号唯一,但不一定连续) --一,普通查 select TOP 5 * FROM EMP WHERE EMPNO NOT IN (SELECT TOP 5 EMPNO FROM EMP) --二,效率更高的 子查询做数据源 SELECT * FROM ( SELECT ENAME,JOB,SAL FROM EMP WHERE SAL>2000) AS T WHERE JOB ='MANAGER' SELECT * FROM ( select ROW_NUMBER ( ) OVER ( order by empno ) as ID , EMP.* from EMP ) AS T WHERE T.ID BETWEEN 6 AND 10 --分析函数 产生序列号列 --ROW_NUMBER ( ) OVER ( order by empno ) as ID , SELECT ENAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO!=DEPT.DEPTNO SELECT ENAME FROM EMP WHERE DEPTNO NOT IN (SELECT DEPTNO FROM DEPT) --子查询 SELECT ENAME FROM EMP where exists ( select *from DEPT where DEPT.DEPTNO=EMP.DEPTNO ) --列出与'SCOOTT'从事相同工作的所有雇员 SELECT EMPNO ,ENAME ,JOB FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME='scott') --找出scott从事的工作 SELECT JOB FROM EMP WHERE ENAME='scott' --找出scott从事的部门 SELECT DEPTNO FROM EMP WHERE ENAME='scott' --将雇员SCOOTT的部门改成'SALES' --找出SALES 所在的部门编号 SELECT DEPTNO FROM DEPT WHERE DNAME='SALES' UPDATE EMP SET DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='SALES') WHERE ENAME='scott' SELECT * FROM DEPT SELECT * FROM EMP --UPDATE 表名 --SET 列名=newvalue,列名2=newvalue,....... --WHERE 条件 --删除所有'RESEARCR'部门的员工 --找出RESEARCR 所在的部门编号 SELECT DEPTNO FROM DEPT WHERE DNAME='RESEARCH' DELETE EMP WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='RESEARCH') SELECT * FROM info--学生信息 SELECT * FROM lesson--课程信息 SELECT * FROM score--分数 --学籍管理系统(info,lesson,score) --查询所有参加考试并及格的同学的姓名 --参加考试的同学编号, SELECT DISTINCT SUNMB FROM score --通过编号找到考试同学的姓名 SELECT SNAME FROM info where SNUMB in (SELECT DISTINCT SUNMB FROM score) --考试及格的同学编号 SELECT SUNMB FROM score where score >60 --查询所有参加考试并及格的同学的姓名**************************************************************** SELECT SNAME FROM info where SNUMB in (SELECT SUNMB FROM score where score >60) --考试及格的科目编号 --查询未参加考试学生信息 SELECT * FROM info where SNUMB not in (SELECT DISTINCT SUNMB FROM score) DECLARE @AvgSal money SELECT @AvgSal =AVG(SAL) FROM EMP IF(@AvgSal>2500) BEGIN PRINT '你好'--通常是用来测试的 END BEGIN PRINT '你才好' END DECLARE @Sum int SET @Sum=0 DECLARE @Index int SET @Index=1 while(@Index <=100) begin IF (@Index%3=0) BEGIN SET @Sum =@Index END SET @Index= @Index 1 end PRINT @Sum SELECT SNAME,性别=CASE WHEN SEX =0 THEN '女' when sex=1 then '男' END FROM info SELECT SNAME,性别=CASE WHEN SEX= 0 THEN '女' WHEN SEX=1 THEN '男' END FROM info --1,查询参加考试的学生的姓名,考试科目,成绩 --成绩要用,优 良 中 差 及格 ,不及格,表示 --参加考试的同学编号, SELECT DISTINCT SUNMB FROM score --通过编号找到考试同学的姓名 SELECT SNAME FROM info where SNUMB in (SELECT DISTINCT SUNMB FROM score) --查考试同学每个同学的分数 SELECT * FROM score --学生编号 SELECT SUNMB FROM score SELECT SNAME 姓名,l.CCNAME 科目 ,成绩=case when SCORE>0 and SCORE<=20 then '不及格' when SCORE>20 and SCORE<=40 then '及格' when SCORE>40 and SCORE<=60 then '差' when SCORE>60 and SCORE<=80 then '良' when SCORE>80 and SCORE<=100 then '优' end FROM info I LEFT JOIN score S ON I.SNUMB=S.SUNMB join lesson l on S.CCODE=l.CCODE WHERE SNUMB IN (SELECT DISTINCT SUNMB FROM score) --2 创建测试表dump(id int,name varchar(50),price money) --向测试表添加10万行测试数据。要求:所有数据不能重复 CREATE TABLE [dump] ( id int ,name varchar(50),price money ) DROP TABLE [dump]--删除表 --DELETE FROM [dump]--删除数据 DECLARE @count int=1 WHILE(@count<=100000) BEGIN insert into [dump] values (@count,NEWID(),@count*4.2-5) set @count =1 END select *from [dump] --3 如果公司雇员的最高工资超过4500,显示公司内工资最高的3个 --员工信息 DECLARE @AvgSal money SELECT @AvgSal =AVG(SAL) FROM EMP IF(@AvgSal>2500) BEGIN PRINT '你好'--通常是用来测试的 END BEGIN PRINT '你才好' END DECLARE @MaxSal money SELECT @MaxSal =MAX(SAL) FROM EMP if( @MaxSal>4500) BEGIN select TOP 3 * from EMP ORDER BY SAL DESC END select* from EMP --4员工涨工资,规则是先每人都涨200元,看是否都达到 --最低标准2000元,如果没都达到,每人再涨200,如此反复涨工资 --直到所有人的工资都达到2000为止。(公司有工资上限规定个人的 --最高工资不能超过6000元) WHILE((SELECT MIN(SAL)FROM EMP)<2000) begin UPDATE EMP SET SAL= SAL 200 end UPDATE EMP SET SAL=6000 WHERE SAL>=6000 SELECT *FROM DEPT SELECT *FROM EMP DROP TABLE EMP DROP TABLE DEPT --5 实现对emp表的分页,要求:每页记录数(@PageSize),和显示 --第几页(@PageIndex)是变量。 --SELECT * FROM ( --SELECT ENAME,JOB,SAL FROM EMP --WHERE SAL>2000) AS T --WHERE JOB ='MANAGER' --SELECT * FROM ( --select ROW_NUMBER ( ) OVER ( order by empno ) as ID , EMP.* from EMP --) AS T --WHERE T.ID BETWEEN 6 AND 10 DECLARE @PageSize int--每页记录数 DECLARE @PageIndex int--第几页 SELECT @PageSize=5 SELECT @PageIndex=2 SELECT *FROM (SELECT (row_number() over (order by empno)) as DAID ,* FROM EMP) AS Temp WHERE DAID BETWEEN (@PageSize*(@PageIndex-1) 1) AND( @PageSize*@PageIndex ) SELECT *FROM EMP DECLARE @PageSize INT,@PageIndex INT SELECT @PageSize = 3,@PageIndex=3 SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY EMPNO) AS ID,* FROM EMP) AS Temp WHERE ID BETWEEN (@PageSize*(@PageIndex-1) 1) AND (@PageSize*@PageIndex) --6 根据如下规则反复涨工资,直到平均工资超过4000元为止。 --5000以上 :不涨 ,4000-4999 涨100元 --3000-3999 涨200元,2000-2999 涨300元, --2000以下 涨500元。 WHILE((SELECT MIN(SAL)FROM EMP)<2000) begin UPDATE EMP SET SAL= SAL 200 end UPDATE EMP SET SAL=6000 WHERE SAL>=6000 --平均工资 SELECT AVG(SAL) FROM EMP --目测是按照次数涨工资 --记录涨的次数 DECLARE @a int DECLARE @b int SET @a=(SELECT AVG(SAL) FROM EMP ) SET @b=CASE WHEN SAL <5000 AND SAL>4000 THEN 100 WHEN SAL <3999 AND SAL>3000 THEN 200 WHEN SAL <2999 AND SAL>2000 THEN 300 WHEN SAL <2000 THEN THEN 400 END WHILE( @a<=4000) BEGIN UPDATE EMP SET SAL=SAL @b END PRINT @a while ((select AVG(SAL)from EMP)<4000) begin update EMP set SAL=case WHEN SAL <5000 AND SAL>4000 THEN SAL 100 WHEN SAL <3999 AND SAL>3000 THEN SAL 200 WHEN SAL <2999 AND SAL>2000 THEN SAL 300 WHEN SAL <2000 THEN SAL 400 end end select * from EMP --4000-4999这个段的人 SELECT SAL FROM EMP WHERE SAL <4999 AND SAL>4000 --3000-3999 SELECT SAL FROM EMP WHERE SAL <3999 AND SAL>3000 --2000-2999 SELECT SAL FROM EMP WHERE SAL <2999 AND SAL>2000 --2000一下的 SELECT SAL FROM EMP WHERE SAL <2000 --DECLARE @Name VARCHAR(20) --SELECT @Name =ENAME FROM EMP WHERE DEPTNO DECLARE @PageSize INT,@PageIndex INT SELECT @PageSize = 3,@PageIndex=3 SELECT ename,job,sal,deptno FROM (SELECT ROW_NUMBER() OVER (ORDER BY EMPNO) AS ID,* FROM EMP) AS Temp WHERE ID BETWEEN (@PageSize*(@PageIndex-1) 1) AND (@PageSize*@PageIndex) CREATE PROC PAGE
标签: 商城
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论