zoukankan      html  css  js  c++  java
  • 经典SQL语句基础50题

     很全面的sql语句大全。都是很基础性的,今天特意整理了下。大家互相学习。大家有好的都可以分享出来,  分享也是一种快乐。
     

      1 --创建数据库
      2 create database SQL50
      3 --打开SQL50数据库
      4 use SQL50
      5 --创建雇员表
      6 drop table Emp
      7 drop table Dept
      8 create table Emp
      9 (  Empno numeric(5,0) not null,--雇员的编号
     10    Ename nvarchar(10), --雇员名字
     11    Job nvarchar(9),    --雇员的职位
     12    Mgr numeric(5,0),--上级主管的编号
     13    Hiredate datetime, --入职日期
     14    Sal numeric(7,2),--薪金
     15    Comm numeric(7,2),--佣金
     16    Deptno numeric(2,0) --部门编号
     17 )
     18 go
     19 
     20 --创建部门表
     21 
     22 create table Dept
     23 (
     24    Deptno numeric(2),--部门编号
     25    Dname nvarchar(14),--部门名称
     26    Loc nvarchar(13)--部门所在地
     27 )
     28 go
     29 --插入数据
     30 insert into Emp values
     31 (7369,'SMITH','CLERK',7902,'2000-12-17',800,NULL,20)
     32 insert into Emp values
     33 (7499,'allen','SALESMAN',7698,'2001-2-20',1600,300,30)
     34 insert into Emp values
     35 (7521,'WARD','SALESMAN',7698,'2001-2-22',1250,500,30)
     36 insert into Emp values
     37 (7566,'JONES','MANAGER',7839,'2001-4-2',2975,NULL,20)
     38 insert into Emp values
     39 (7654,'MARTIN','SALESMAN',7698,'2001-9-28',1250,1400,30)
     40 insert into Emp values
     41 (7698,'BLAKE','MANAGER',7839,'2001-5-1',2850,NULL,30)
     42 insert into Emp values
     43 (7782,'CLARK','MANAGER',7839,'2001-6-9',2450,NULL,10)
     44 insert into Emp values
     45 (7788,'scott','ANALYST',7566,'2002-12-9',3000,NULL,20)
     46 insert into Emp values
     47 (7839,'king','PRESIDENT',NULL,'2001-11-17',5000,NULL,10)
     48 insert into Emp values
     49 (7844,'TURNER','SALESMAN',7698,'2001-9-8',1500,0,30)
     50 insert into Emp values
     51 (7876,'ADAMS','CLERK',7788,'2003-1-12',1100,NULL,20)
     52 insert into Emp values
     53 (7900,'JAMES','CLERK',7698,'2001-3-12',950,NULL,30)
     54 insert into Emp values
     55 (7902,'FORD','ANALYST',7566,'2001-3-12',3000,NULL,20)
     56 insert into Emp values
     57 (7934,'MILLER','CLERK',7782,'2002-01-23',1300,NULL,10)
     58 GO
     59 --插入数据
     60 insert into Dept values(10,'ACCOUNTING','NEW YORK')
     61 insert into Dept values(20,'RESEARCH','DALLAS')
     62 insert into Dept values(30,'SALEA','CHICAGO')
     63 insert into Dept values(40,'OPERATIONS','BOSTON')
     64 GO
     65 
     66 --1、查询所有雇员
     67 
     68 select  Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from  Emp 
     69 
     70 --2、查询所有部门
     71 
     72 select Deptno,Dname,Loc from Dept
     73 
     74 --3、查询没有佣金(COMM)的所有雇员的信息
     75 
     76 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp 
     77 where Comm is null
     78 
     79 --4、查询薪金(sal)和佣金(COMM)总数大于2000的所有的雇员信息
     80 
     81 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp 
     82 where (Sal+Comm)>2000 or sal>2000 or comm>2000
     83 
     84 --5、选择部门30中的雇员
     85 
     86 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp
     87  where Deptno=30
     88 
     89 --6、列出所有办事员('clerk')的姓名,编号和部门
     90 
     91 select Ename,Empno ,deptno from Emp where Job='CLERK'
     92 
     93 --7、找出佣金高于薪金的雇员
     94 
     95 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp
     96  where Comm>sal
     97 
     98 --8、找出佣金高于薪金60%的雇员
     99 
    100 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp
    101  where Comm>(sal*0.6)
    102 
    103 --9、找出部门10中所有经理和部门20中的所有办事员的详细资料
    104 
    105 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp 
    106 where (Job='MANAGER' and deptno=10)or (Job='CLERK'and Deptno=20) 
    107 
    108 --10、找出部门10中所有经理,部门20中所有办事员,既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料
    109 
    110 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp 
    111 where (Job='MANAGER' and deptno=10) or (Job='CLERK'and Deptno=20) or(job not in('MANAGER','CLERK')and sal>=2000)
    112 
    113 --11、找出收取佣金的雇员的不同工作
    114 
    115 select Ename,Job from Emp where comm  is not null
    116 
    117 --12、找出不收取佣金或收取佣金低于100的雇员
    118 
    119 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp
    120  where comm is null or comm<100
    121 
    122 --13、找出早于8年之前受雇的雇员
    123 
    124 select Empno ,Ename  from Emp
    125  where Hiredate<(dateadd(yy,-8,getdate()))
    126 
    127 --14、显示首字母是大写的所有雇员的姓名
    128 
    129 select Ename from Emp where Ename collate chinese_PRC_CS_AI like '[A-Z]%'
    130 
    131 
    132 --15、显示正好为5个字符的雇员的姓名
    133 
    134 select Ename from Emp where Ename like '_____'
    135 
    136 --16、显示带有‘R’的雇员的姓名
    137 
    138 select Ename from Emp where Ename like '%R%'
    139 
    140 --17、显示不带有‘R’放入雇员的姓名
    141 
    142 --select Ename from Emp where Ename like '%[^R]%'
    143 
    144 select Ename from Emp where Ename not like '%R%'
    145 
    146 
    147 --18、显示包含‘A’的所有雇员的姓名及‘A’在姓名中的位置
    148 
    149 select Ename ,charindex('A',Ename) 索引 from Emp where Ename like '%A%'
    150 
    151 --19、显示所有雇员的姓名,用“a”替换“A”
    152 
    153 select replace(Ename,'A','a') from Emp
    154 
    155 --20、显示所有雇员的姓名的前三个字符
    156 
    157 select Ename, substring(Ename,1,3)as 姓名的前三个字符 from Emp
    158 
    159 --21、显示雇员的详细资料,按名称排序
    160 
    161 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp order  by Ename
    162 
    163 --22、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面
    164 
    165 select Empno ,Ename ,Job ,Mgr ,Hiredate ,Sal ,Comm , Deptno from Emp order  by Hiredate
    166 
    167 --23、显示所有雇员的姓名,工作和薪金,按工作内的工作的降序顺序排序,而工作按薪金排序
    168 
    169 select Ename ,Job, Sal from Emp order  by Job desc,sal
    170 
    171 --24、显示在一个月为30天的情况下所有雇员的日薪金,忽略小数
    172 
    173 select ceiling((sal/30)) from Emp
    174 
    175 --25、找出在(任何年份的)2月受聘的所有雇员
    176 
    177 select Ename ,Hiredate from emp where datepart(month,Hiredate)=2
    178 
    179 --26、对每个雇员,显示其加入公司的天数
    180 
    181 select Ename,datediff(d,Hiredate,getdate()) from emp 
    182 
    183 --27、列出至少有一个雇员的所有部门
    184 
    185 select Dname,count(E.deptno) 雇员人数 from dept D join Emp E 
    186 on D.deptno=E.deptno group by Dname
    187 
    188 --28、列出各种类别工作的最低工资
    189 
    190 select job, min(sal) 最低工资  from Emp group by job
    191 
    192 --29、列出各个部门的MANAGER(经理)的最低薪金
    193 
    194 select deptno 部门编号, min(sal) 最低工资  from Emp 
    195 where job='MANAGER' group by deptno
    196 
    197 --30、列出薪金高于公司平均的所有雇员
    198 
    199 select Ename  from Emp where sal>(select avg(sal) from Emp)  
    200 
    201 --31、列出各种工作类别的最低薪金,并使最低薪金大于1500
    202 
    203 select job,min(sal) 最低薪金 from Emp 
    204 --where sal >1500
    205  group by job 
    206  having min(sal)>1500
    207  select * from Emp order by job
    208 
    209 --32、显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日期所在月排序,将最早年份的项目排在最前面
    210 
    211 select Ename ,datepart(year,Hiredate) 年份,datepart(month,Hiredate) 月份 from Emp 
    212 order by datepart(year,Hiredate),datepart(month,Hiredate)
    213 
    214 --33、显示所有雇员的姓名以及满8年服务年限的日期
    215 
    216 select Ename ,dateadd(yy,8,Hiredate) 满8年服务年限的日期 from Emp 
    217 order by dateadd(yy,8,Hiredate)
    218 
    219 --34、显示所有雇员的服务年限:总的年数或总的月数或总的天数
    220 
    221 select Ename,datediff(dd,hiredate,getdate())总的天数,datediff(mm,Hiredate,getdate()) 总的月数 ,
    222 datediff(yy,Hiredate,getdate())总的年数 from emp 
    223 
    224 --35、列出按计算的字段排序的所有雇员的年薪,即:按照年薪对雇员进行排序,年薪指雇员每月的总收入总共12个月的累加
    225 
    226 --创建年薪视图
    227  create view  View_AnnualPay
    228  as
    229   select Ename 雇员 ,sal*12 年薪  from Emp where comm is null union 
    230   select Ename  雇员, ((sal+comm)*12) 年薪 from  Emp where comm is not null --order by (((sal+comm)*12)or(SAl*12))
    231  go
    232  
    233  select *  from View_AnnualPay order by 年薪 
    234  
    235 --36、列出年薪前5名的雇员
    236  
    237 select top 5 * from View_AnnualPay order by 年薪 desc
    238 
    239 --37、列出年薪低于10000的雇员
    240 
    241 select * from View_AnnualPay  where 年薪<10000
    242 
    243 --38、列出雇员的平均月薪和平均年薪
    244 
    245 select avg(年薪/12) 平均月薪,avg(年薪) 平均年薪  from  View_AnnualPay
    246 
    247 --39、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门
    248 
    249 select Ename,D.Deptno from Emp E right join Dept D on D.deptno=E.deptno
    250 
    251 --40、列出每个部门的信息以及该部门中雇员的数量
    252 
    253 select D.Deptno,Dname ,Loc  ,count(E.Deptno)部门人数 from  Dept D left join Emp E on D.Deptno=E.Deptno group by D.Deptno,Dname ,Loc
    254 
    255 --41、列出薪金比“SMITH”多的所有雇员
    256 
    257 select Ename,sal from Emp where sal>(select sal from emp where Ename='SMITH')
    258 
    259 --42、列出所有雇员的姓名及其直接上级的姓名
    260 
    261 select   E.Ename 雇员姓名,E.job,E1.Ename 上司姓名,E1.job from Emp E inner join Emp E1 on E1.mgr=E.Empno 
    262 
    263 --43、列出入职日期早于起直接上级的所有雇员
    264 
    265 select   E.Ename 雇员姓名,E.job,E1.Ename 上司姓名,E1.job from Emp E inner join Emp E1 on E1.mgr=E.Empno 
    266 where  E.job<>E1.job and E.Hiredate>E1.Hiredate
    267 
    268 
    269 --44、列出所有办事员(“CLERK”)的姓名及其部门名称
    270 
    271 select Ename,Dname from Emp E join Dept D on D.deptno=E.deptno where job='CLERK'
    272 
    273 --45、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部门编号
    274 
    275 select Ename from Emp where job='SALESMAN'
    276 
    277 --46、列出与“SCOTT”从事相同工作的所有雇员
    278 
    279 select Ename From Emp where job=(select job from Emp where Ename='SCOTT')
    280 
    281 --47、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金
    282 
    283 select Ename,sal from Emp where sal in(select sal from Emp where deptno=30)and deptno <>30
    284 
    285 --48、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中所有雇员的薪金
    286 
    287 select Ename,sal from Emp where sal=(select sum(Sal) from Emp where Deptno=30)
    288 
    289 --49、列出从事同一种工作但是属于不同部门的雇员的不同组合
    290 
    291 select E.Ename,E.job,E1.Ename,E1.job from Emp E inner join Emp E1 on E.Deptno<>E1.Deptno and E.job=E1.job
    292 
    293 
    294 --50、列出所有雇员的雇员名称、部门名称和薪金
    295 
    296 select Ename,Dname,sal from Emp E join Dept D on E.deptno=D.deptno
  • 相关阅读:
    hduoj 1865 1string 【大数】【菲波那切数列】
    poj 1664 放苹果【M的N划分】
    新年第一篇
    3、XCode: 如何添加自定义代码片段
    2、文件夹
    1、获取当前屏幕显示的页面
    运算符
    表单数据接收
    PHP进入MySQL数据库
    my SQL认识和进入
  • 原文地址:https://www.cnblogs.com/dyhdream/p/3510597.html
Copyright © 2011-2022 走看看