logo资料库

sql查询基础实训习题(附答案).doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
--创建数据库 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
分享到:
收藏