--创建数据库
USE [master]
GO
CREATE DATABASE [test] ON PRIMARY
( NAME = N'test', FILENAME = N'D:\SQL \DataBase\test.mdf' , SIZE = 3072KB ,
MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'test_log', FILENAME = N'D:\SQL \DataBase\test_log.ldf' , SIZE
= 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [test] SET COMPATIBILITY_LEVEL = 90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [test].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [test] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [test] SET ANSI_NULLS OFF
GO
ALTER DATABASE [test] SET ANSI_PADDING OFF
GO
ALTER DATABASE [test] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [test] SET ARITHABORT OFF
GO
ALTER DATABASE [test] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [test] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [test] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [test] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [test] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [test] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [test] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [test] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [test] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [test] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [test] SET DISABLE_BROKER
GO
ALTER DATABASE [test] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [test] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [test] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [test] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [test] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [test] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [test] SET READ_WRITE
GO
ALTER DATABASE [test] SET RECOVERY SIMPLE
GO
ALTER DATABASE [test] SET MULTI_USER
GO
ALTER DATABASE [test] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [test] SET DB_CHAINING OFF
GO
--创建表
USE test
CREATE TABLE emp
(
EMPNO NUMERIC(5, 0) NOT NULL ,
ENAME NVARCHAR(10) ,
JOB NVARCHAR(9) ,
MGR NUMERIC(5, 0) ,
HIREDATE DATETIME ,
SAL NUMERIC(7, 2) ,
COMM NUMERIC(7, 2) ,
DEPTNO NUMERIC(2, 0),
)
(
)
CREATE TABLE dept
DEPTNO NUMERIC(2) ,
DNAME NVARCHAR(14) ,
LOC NVARCHAR(13),
7902,'2000-12-17', 800, NULL, 20);
--插入数据
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK',
INSERT INTO EMP VALUES
(7499, 'allen', 'SALESMAN', 7698,'2001-2-20', 1600, 300, 30);
INSERT INTO EMP VALUES
(7521, 'WARD',
INSERT INTO EMP VALUES
(7566, 'JONES', 'MANAGER',
'SALESMAN', 7698,'2001-2-22', 1250, 500, 30);
7839,'2001-4-2', 2975, NULL, 20);
7839,'2001-5-1', 2850, NULL, 30);
7566,'2002-12-9',3000, NULL, 20);
7839,'2001-6-9', 2450, NULL, 10);
INSERT INTO EMP VALUES
(7654, 'MARTIN', 'SALESMAN', 7698,'2001-9-28',1250, 1400, 30);
INSERT INTO EMP VALUES
(7698, 'BLAKE', 'MANAGER',
INSERT INTO EMP VALUES
(7782, 'CLARK', 'MANAGER',
INSERT INTO EMP VALUES
(7788, 'scott', 'ANALYST',
INSERT INTO EMP VALUES
(7839, 'king',
INSERT INTO EMP VALUES
(7844, 'TURNER', 'SALESMAN', 7698,'2001-9-8', 1500,
INSERT INTO EMP VALUES
(7876, 'ADAMS', 'CLERK',
INSERT INTO EMP VALUES
(7900, 'JAMES', 'CLERK',
INSERT INTO EMP VALUES
(7902, 'FORD',
INSERT INTO EMP VALUES
(7934, 'MILLER', 'CLERK',
7788,'2003-1-12',1100, NULL, 20);
'PRESIDENT', NULL,'2001-11-17',5000, NULL, 10);
0, 30);
7698,'2001-3-12',950, NULL, 30);
'ANALYST',
7566,'2001-3-12',3000, NULL, 20);
7782,'2002-01-23',1300, NULL, 10);
INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
'DALLAS');
INSERT INTO DEPT VALUES (20, 'RESEARCH',
INSERT INTO DEPT VALUES (30, 'SALES',
'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');
--1、查询所有的雇员
SELECT *
FROM
emp
--2、查询所有的部门
SELECT *
FROM
dept
dbo.emp
COMM IS NULL
--3、查询没有佣金(COMM)的所有雇员信息
SELECT *
FROM
WHERE
--4、查询薪金(SAL)和佣金(COMM)总数大于2000的所有雇员信息
SELECT *
FROM
WHERE
emp
( sal + ISNULL(comm, 0) ) > 2000
--5、选择部门30中的雇员
SELECT *
FROM
WHERE deptno=30
emp
--6、列出所有办事员("CLERK")的姓名、编号和部门
SELECT ename ,
empno ,
dname
emp
JOIN dept ON emp.deptno = dept.deptno
emp.job = 'CLERK'
WHERE
FROM
--7、找出佣金高于薪金的雇员
SELECT *
FROM
WHERE
emp
comm > sal
emp
comm > sal * 0.6
--8、找出佣金高于薪金60%的雇员
SELECT *
FROM
WHERE
--9、找出部门10中所有经理和部门20中的所有办事员的详细资料
SELECT *
FROM
WHERE
emp
( job = 'MANAGER'
AND deptno = 10
)
OR ( job = 'CLERK'
AND deptno = 20
ORDER BY job
)
)
--10、找出部门10中所有经理、部门20中所有办事员,
--既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料
SELECT *
FROM
WHERE ( JOB = 'MANAGER'
AND DEPTNO = 10
dbo.emp
)
OR ( JOB = 'CLERK'
AND DEPTNO = 20
OR ( JOB NOT IN ( 'MANAGER', 'CLERK' )
AND SAL >= 2000
)
ORDER BY JOB
--11、找出收取佣金的雇员的不同工作
SELECT DISTINCT
JOB
dbo.emp
FROM
WHERE COMM IS NOT NULL
--12、找出不收取佣金或收取的佣金低于100的雇员
SELECT *
FROM
WHERE
emp
ISNULL(comm, 0) < 100
--13、找出早于12年之前受雇的雇员
SELECT *
FROM
WHERE
dbo.emp
YEAR(GETDATE()) - YEAR(HIREDATE) > 11
--14、显示首字母大写的所有雇员的姓名
SELECT ename
FROM
WHERE
emp
ASCII(ename) BETWEEN 65 AND 90
--15、显示正好为5个字符的雇员姓名
SELECT ename
FROM
WHERE
emp
LEN(ename) = 5
--16、显示带有'R'的雇员姓名
SELECT ENAME
FROM
WHERE
dbo.emp
ENAME LIKE '%R%''
--17、显示不带有'R'的雇员姓名
SELECT ENAME
FROM
WHERE
dbo.emp
ENAME NOT LIKE '%R%'
--18、显示包含"A"的所有雇员的姓名及"A"在姓名字段中的位置
SELECT ENAME ,
CHARINDEX('A', ENAME) A的位置
dbo.emp
FROM
WHERE
ENAME LIKE '%A%'
--19、显示所有雇员的姓名,用a替换所有'A'
SELECT REPLACE(ename, 'A', 'a') ENAME
FROM
dbo.emp
--20、显示所有雇员的姓名的前三个字符
SELECT SUBSTRING(ename, 1, 3) ENAME
FROM
dbo.emp
--21、显示雇员的详细资料,按姓名排序
SELECT *
dbo.emp
FROM
ORDER BY ENAME
--22、显示雇员姓名,根据其服务年限,将最老的雇员排在最前面
SELECT ENAME
FROM
ORDER BY HIREDATE
dbo.emp
--23、显示所有雇员的姓名、工作和薪金,按工作内的工作的降序顺序排序,
--而工作按薪金排序
SELECT ename ,
job ,
sal
emp
Sal
FROM
ORDER BY job DESC ,
--24、显示在一个月为30天的情况下所有雇员的日薪金,忽略小数
SELECT ename 名字 ,
CAST(sal / 30 AS NUMERIC) 日薪
dbo.emp
FROM
--25、找出在(任何年份的)2月受聘的所有雇员
SELECT ename ,
hiredate
dbo.emp
MONTH(hiredate) = 2
FROM
WHERE
--26、对于每个雇员,显示其加入公司的天数
SELECT ename 姓名 ,
DATEDIFF(DAY, hiredate, GETDATE()) 天数
dbo.emp
FROM
--27、列出至少有一个雇员的所有部门
SELECT *
FROM
WHERE
dbo.dept
DEPTNO IN ( SELECT DEPTNO
dbo.emp )
FROM
--28、列出各种类别工作的最低薪金
SELECT job ,
MIN(sal) minsal
dbo.emp
FROM
GROUP BY job
--29、列出各个部门的MANAGER(经理)的最低薪金
SELECT ename ,
dname ,
MIN(sal) minsal
dbo.emp ,
dbo.dept
emp.deptno = dept.deptno
AND job = 'MANAGER'
WHERE
FROM
GROUP BY dname ,
ename
--30、列出薪金高于公司平均水平的所有雇员
SELECT ename ,
FROM
WHERE
sal
dbo.emp
sal > ( SELECT AVG(sal)
FROM
dbo.emp
)
--31、列出各种工作类别的最低薪金,并使最低薪金大于1500
SELECT job ,
MIN(sal) minsal
dbo.emp
FROM
GROUP BY job
HAVING MIN(sal) > 1500
--32、显示所有雇员的姓名和加入公司的年份和月份,
--按雇员受雇日所在月排序,将最早年份的项目排在最前面
SELECT ename ,
YEAR(hiredate) _year ,
MONTH(hiredate) _month