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







SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的SQL接口。 它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。    结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。    美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了SQL标准。ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和International Electrotechnical Commission(IEC)的成员之一。ANSI 发布与国际标准组织相应的美国标准。1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSI SQL-92。ANSI SQL-92有时被称为ANSI SQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL 标准。SQL Server使用ANSI SQL-92的扩展集,称为T-SQL,其遵循ANSI制定的 SQL-92标准。    SQL语言包含4个部分:    数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。    数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。    数据查询语言(DQL),例如:SELECT语句。    数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。    SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值