0

0

MSSQL 基本语法及实例操作语句

php中文网

php中文网

发布时间:2016-06-07 18:07:09

|

1663人浏览过

|

来源于php中文网

原创

MSSQL 基本语法及实例操作语句,需要的朋友可以参考下

MS SQL基本语法及实例操作

一:建表并初始化
============================
create database mf2011 --创建数据库

use mf2011 --使用数据库

create table dept --创建“部门”表
( www.2cto.com
deptno int primary key, --部门编号(主键)
dname nvarchar(30), --部门名称
loc nvarchar(30) --部门所在的地点
)
-----

create table emp --创建“员工”表
(
empno int primary key, --员工编号(主键)
ename nvarchar(30), --员工的姓名
job nvarchar(30), --员工的工作类型
mgr int, --员工的上级
hiredate datetime, --员工的入职时间(受聘时间)
sal numeric(10,2), --员工的每月工资
comm numeric(10,2), --员工的年终奖金
deptno int foreign key references dept(deptno) --创建一个外键指向部门表(描述该员工属于哪个部门)
)

--------
insert into dept values (10,'accounting','new york')
insert into dept values (20,'reasarch','dallas')
insert into dept values (30,'sales','chicago')
insert into dept values (40,'operations','boston')
-------

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values
(7369,'michael','clerk',7902,'2010-1-12',675.23,300,20)

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values
(7499,'allen','salesman',7698,'2009-1-23',1675.23,322.50,30)

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values
(7521,'ward','salesman',7698,'2008-1-3',12675.99,399.50,30)

insert into emp (empno,ename,job,mgr,hiredate,comm,deptno) values
(7566,'jones','manager',7839,'2000-1-1',8675.99,20)

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values
(7654,'martin','salesman',7698,'2007-12-31',1275.99,999.00,30)

insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(7782,'blake','manager',7839,'2007-12-20',1275.99,30)

insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(7788,'sccot','analyst',7566,'2003-1-22',1275.99,10)

insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(7781,'miller','opreator',7566,'2005-10-12',1275.99,40)
www.2cto.com
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(7744,'adamc','opreator',7566,'2006-10-30',1241244.0,40)

insert into emp (empno,ename,job,hiredate,sal,deptno) values
(7839,'king','president','2000-1-1',100244.0,10)

insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(1999,'lxliog','opreator',7566,'2006-10-30',1241244.0,40)
-----
select * from dept
select * from emp

--主键:唯一,非空
--外键:只能指向主键,与指向的主键数据类型必须一致

二:练习
============================
1,查询emp表所有列
select * from emp --刘君正

2,查询指定列(例如:姓名,工资两列)
select ename,sal from emp --郑朝阳

3,取消重复行(从emp表中查询部门号)
select distinct(deptno) from emp --徐绍峰,郝艳芳,刘辉,马东勤

4,从emp表中查询名字为lxliog员工的薪水,工作,所作部门
select sal,job,deptno from emp where 'lxliog'=ename --侯耀文,谭雪玲,黎小龙

5,统计总共有都少个部门(两种方式:从emp或从dept)
select count(deptno) from dept --诺布才仁
select count(distinct(deptno)) as 部门总数 from emp --诺布才仁

use mf2011
select * from dept;
select * from emp;
--6,显示每个雇员的年工资
select isnull(sal,0)*12+isnull(comm,0) as 年薪 from emp --扎西多杰

7,如何显示工资高于3000的员工信息
select * from emp where sal>3000 --邓文文
www.2cto.com
8,如何查找1982.1.1后入职的员工
select * from emp where hiredate>'1982-1-1'

9,如何显示工资在2000到2500之间的员工情况
select * from emp where sal between 1241244 and 100244
select * from emp where sal>=2000 and sal
10,如何显示首字母为S的员工姓名和工资(模糊查询)
select ename ,sal from emp where ename like 's%'

11,如何显示第三个字母为‘O'的所有员工的姓名和工资(模糊查询)
select ename 姓名,sal as 月薪 from emp where ename like '__R%';

12,如何显示empno为123,345,800...的员工情况(在where条件中使用in)
select * from emp where empno in(123,345,800,1999,7400,7744);

13,如何显示没有上级的雇员的情况(使用is null 的操作符)
select * from emp where mgr is null;

14,查询工资高于1000或是岗位为manager的雇员,
同时还要满足他们的姓名首字母为j(使用逻辑操作符)
select * from emp where (sal>1000 or job='manager')
and ename like 'j%';

16,如何按工资的从低到高的顺序显示雇员的信息
(使用order by字句asc, desc)
select * from emp order by sal desc;

17,如何按入职的先后顺序显示雇员的信息(使用order by字句asc, desc)
select * from emp order by hiredate desc;

18,按部门号升序而雇员的工资降序排列显示雇员信息
(使用order by字句asc,desc)
select * from emp order by deptno asc,sal desc;

19,统计每个人的年薪,并按从低到高的顺序排序(使用列的别名排序)
select isnull(sal,0)*12+isnull(comm,0) 年薪 from emp order by 年薪;

20,如何显示员工中最高工资和最低工资
select max(sal) as "max(sal)",min(sal) from emp;

21,如何显示最低工资的员工信息
select * from emp where sal = (select min(sal) from emp);
www.2cto.com
22,显示所有员工的平均工资和工资总和
select avg(sal) as "avg(sal)" , sum(sal) as "sum(sal)" from emp;

23,把高于平均工资的雇员的名字和他的工资显示出来
select ename,sal from emp where sal>(select avg(sal) from emp);

24,计算共有多少名员工
select count(ename) from emp;

25,如何显示每个部门的平均工资和最高工资
select avg(sal) as "avg",max(sal) as "max",deptno
from emp group by deptno

26,如何显示每个部门的高于总平均工资的平均工资和最高工资
select avg(sal) as "avg",max(sal) as "max",deptno
from emp where sal>(select avg(sal) from emp) group by deptno

27显示每个部门的每种岗位的平均工资和最低工资
select avg(sal),min(sal),deptno,job from emp group by deptno,job
order by deptno

28,显示平均工资低于2000的部门号和它的平均工资
(having往往和group by结合使用,可以对分组查询结果进行筛选)
select avg(sal),deptno from emp group by deptno having avg(sal)
29,使用企业管理器来操作数据库的分离与附加
见操作步骤

30,使用企业管理器来操作数据库的备份与恢复操作
见操作步骤

31,使用查询分析器器来操作数据库的备份与恢复操作
(1)备份数据库
backup database mf2011 to disk='f:/lxliog.bak';
(2)删除数据库
drop database mf2011;
(3)恢复数据库
restore database mf2011 from disk='f:/lxliog.bak';

复杂查询(多表查询)
32,显示sales部门的位置和其员工的姓名
select d.loc,e.ename from emp e,dept d where d.dname='sales' and d.deptno=e.deptno

33,显示雇员名字,雇员工资及所在部门的名字(当字段有歧义的时候要用别名)
select e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno
www.2cto.com
34,显示部门号为10的部门名称,及该部门的员工名字和工资
select d.dname, e.ename, e.sal from emp e,dept d where d.deptno=10 and d.deptno=e.deptno

35,显示雇员名字,雇员工资及所在部门的名字,并按部门名称排序
select e.ename, e.sal, d.dname from emp e,dept d where e.deptno=d.deptno order by d.dname

自连接:在同一张表的连接查询
36,显示某个员工的上级领导的姓名(比如:smith)
(1)select mgr from emp where ename='adamc'
(2)select ename from emp where empno=(select mgr from emp where ename='adamc')

37,显示公司每个员工和他上级的名字
select worker.ename, boss.ename from emp worker, emp boss where worker.mgr=boss.empno

子查询:嵌入在其它sql语句中的select语句,也叫嵌套查询。
单行子查询:只返回一行数据的子查询语句。
38,显示与jones同一部门的所有员工
(1)select deptno from emp where ename='jones'
(2)select * from emp where deptno=(select deptno from emp where ename='jones')

多行子查询:返回多行数据的子查询。
39,查询和部门号为10的工作相同的雇员的名字、岗位、工资、部门号。(注意要使用in,不能用=)
(1)select distinct job from emp where deptno=20
(2)select ename,job,sal,deptno from emp where job in (select distinct job from emp where deptno=20);

40,在上面查询结果的基础上排除20部门的员工
select ename,job,sal,deptno from emp where job in (select distinct job from emp where deptno=20) and
deptno not in (20);
或select ename,job,sal,deptno from emp where job in (select distinct job from emp where deptno=20) and deptno 20;

在from字句中使用子查询
41 ,显示各个部门高于本部门平均工资的员工的信息
(1)先查出各个部门的平均工资 www.2cto.com
select avg(sal),deptno from emp group by deptno
(2)把上面的表当成一个临时表来对待
select e.ename,e.sal,tem.myavg,e.deptno
from emp e,(select avg(sal) myavg,deptno from emp group by deptno) tem
where e.deptno=tem.deptno and e.sal>tem.myavg

注意:(1)当在from字句中使用子查询时,该子查询会被当做一个临时表来对待,
(2)当在from字句中使用子查询时,必须给子查询指定一个别名

分页查询:按雇员的hiredate属性升序取出第5条到第10条记录
42,显示第5条到第10条记录
(1)显示第1到第4条记录
select top 4 empno from emp order by hiredate
(2)显示后6条记录(第5条到第10条记录)
select top 6 * from emp where empno
not in(select top 4 empno from emp order by hiredate)
order by hiredate;

43,显示第11个到第13个入职的人的信息(写法同上)

44,显示第5到9的人的信息,按薪水的降序排列(写法类似)
select top 5 * from emp where empno not in
(select top 4 empno from emp order by sal desc)
order by sal desc;
45,同一张表中的数据复制
(1)创建一张临时表:identity(1,1)表示该testId字段自增,从1开始每次+1
create table test(
testId int primary key identity(1,1),
testName varchar(30),
testPass varchar(30)
)
(2)插入一条数据
insert into test(testName, testPass) values('zhangsan','123456');
(3)复制数据
insert into test(testName, testPass) (select testName,testPass from test);

46,查询testId为第10000-10009的数据,看看性能。
select top 10 * from test where testId not in
(select top 9999 testId from test order by testId)
order by testId

用查询结果创建一张新表(一种快捷的建表方法)
47,语法:select *(这里可以选择字段) into 另一张表面 from 表
select testName,testPass into mytest from test where testId表mytest在上述语句中已经创建好了,并且初始化好了数据
并且把testId设置为主键:ALTER TABLE test01 ADD primary key(testId)
www.2cto.com
48,删除一张表中的重复数据
(1)create table cat(
catId int,
catName varchar(40)
)
(2)insert into cat values(1,'aa'); //重复执行几次
insert into cat values(2,'bb'); //重复执行几次
(3)select distinct * into #temp from cat;//把cat的记录distinct后的结果,插入到临时表#temp中
delete from cat;//把cat表的记录清空
insert into cat select * from #temp;//把#temp表的数据(没有重复的数据)插入到cat表中
drop table #temp;//删除表#temp3

左外连接和右外连接
左外连接:左边表的查询数据全部显示,右边的表中如果没有匹配的数据则用null填充
右外连接:右边表的查询数据全部显示,左边的表中如果没有匹配的数据则用null填充
49,显示emp表中所有雇员的及其上级的名字(看看区别)
(1)左外连接:select e.ename 雇员名字,b.ename 上级名字
from emp e left join emp b on e.mgr=b.empno;
(2)右外连接:select e.ename 雇员名字,b.ename 上级名字
from emp e right join emp b on e.mgr=b.empno;

常见约束:
(1)not null, 非空
(2)unique, 唯一,允许出现一个null
(3)primary key, 主键,唯一,非空
(4)foreign key, 外键,定义主表和从表的关联关系
(5)check,检查,强制数据必须满足定义的条件,例如:sal int check(sal>=2000 and sal(6)default, 默认值,用于数据的完整性,例如:birthday datetime default getdate(),

50,复合主键只能用表级定义
例如:create table cat(
catId int,
catName varchar(40),
catAge int,
primary key(catId, catName)
)
www.2cto.com
51,商品售货系统表设计案例:现有一个商店数据库,记录客户及其购物情况,由下面三个表组成:商品(goods),客户(customer),购买(purchase)
商品goods(商品号goodsId, 商品名称goodsName, 单价unitPrice, 商品类别category, 供应商provider);
客户customer(客户号customerId, 姓名name, 住址address, 电邮email, 性别sex, 身份证cardId);
购买purchase(客户号customerId, 商品号 goodsId, 购买数量nums);
(1)建表,在定义中要求申明:
ü 每个表的主键和外键;
ü 客户的姓名不能为空;
ü 单价必须大于0,购买数量必须在1到10之间
ü 电邮不能够重复
ü 客户的性别必须是:男或女,默认是男
ü 商品的类别是:食物,日用品

----goods表
Create table goods(
goodsid nvarchar(50) primary key,
goodsnamd nvarchar(80) not null,
unitPrice numeric(10,2) check (unitPrice>0)
category nvarchar(3) check (category in (‘食物','日用品')),
provider nvarchar(50)
)
----customer
Create table customer(
Customerid nvarchar(50) primary key,
Cusname nvarchar(50) not null,
Address nvarchar(100),
Email nvarchar(50) unique,
Sex nchar(1) check(sex in(‘男','女')) default ‘男',
Cardid nvarchar(18)
) www.2cto.com
----purchase
Create table purchase(
Customerid nvarchar(50) foreign key references customer(Customerid),
goodsid nvarchar(50) foreign key references goods(goodsid),
nums int check(nums>0 and numsprimary key(customerid, goodsid)
)

作者 qq395740774

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

331

2026.02.25

Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法
Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法

本专题系统整理Steam官网最新可用入口,涵盖网页版登录地址、新用户注册流程、账号登录方法及官方游戏商店访问说明,帮助新手玩家快速进入Steam平台,完成注册登录并管理个人游戏库。

49

2026.02.25

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

33

2026.02.25

Python数据处理流水线与ETL工程实战
Python数据处理流水线与ETL工程实战

本专题聚焦 Python 在数据工程场景下的实际应用,系统讲解 ETL 流程设计、数据抽取与清洗、批处理与增量处理方案,以及数据质量校验与异常处理机制。通过构建完整的数据处理流水线案例,帮助开发者掌握数据工程中的性能优化思路与工程化规范,为后续数据分析与机器学习提供稳定可靠的数据基础。

13

2026.02.25

Java领域驱动设计(DDD)与复杂业务建模实战
Java领域驱动设计(DDD)与复杂业务建模实战

本专题围绕 Java 在复杂业务系统中的建模与架构设计展开,深入讲解领域驱动设计(DDD)的核心思想与落地实践。内容涵盖领域划分、聚合根设计、限界上下文、领域事件、贫血模型与充血模型对比,并结合实际业务案例,讲解如何在 Spring 体系中实现可演进的领域模型架构,帮助开发者应对复杂业务带来的系统演化挑战。

5

2026.02.25

Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

19

2026.02.24

Golang 性能优化专题:提升应用效率
Golang 性能优化专题:提升应用效率

《Golang 性能优化专题》聚焦 Go 应用在高并发与大规模服务中的性能问题,从 profiling、内存分配、Goroutine 调度、GC 机制到 I/O 与锁竞争逐层分析。结合真实案例讲解定位瓶颈的方法与优化策略,帮助开发者建立系统化性能调优思维,在保证代码可维护性的同时显著提升服务吞吐与稳定性。

9

2026.02.24

Golang 面试题精选:高频问题与解答
Golang 面试题精选:高频问题与解答

Golang 面试题精选》系统整理企业常见 Go 技术面试问题,覆盖语言基础、并发模型、内存与调度机制、网络编程、工程实践与性能优化等核心知识点。每道题不仅给出答案,还拆解背后的设计原理与考察思路,帮助读者建立完整知识结构,在面试与实际开发中都能更从容应对复杂问题。

7

2026.02.24

Golang 运行与部署实战:从本地到云端
Golang 运行与部署实战:从本地到云端

《Golang 运行与部署实战》围绕 Go 应用从开发完成到稳定上线的完整流程展开,系统讲解编译构建、环境配置、日志与配置管理、容器化部署以及常见运维问题处理。结合真实项目场景,拆解自动化构建与持续部署思路,帮助开发者建立可靠的发布流程,提升服务稳定性与可维护性。

5

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 6.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.1万人学习

C# 教程
C# 教程

共94课时 | 10.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号