SQL Server 第三章 结构化查询语言
SQL脚本:
create database electric; use electric
go create table Salvaging(
prj_no int primary key,
prj_name varchar(),
start_date datetime,
end_date datetime,
prj_status bit
) insert Salvaging values (,'220kV清经线接地箱及接地线被盗抢修','2010-10-12','2010-10-13',);
insert Salvaging values (,'沙河站2#公变出线电缆老化烧毁抢修','2010-11-05','2010-11-05',);
insert Salvaging values (,'西丽站电缆短路烧毁抢修工程','2011-01-03','2011-01-03',);
insert Salvaging values (,'西丽站电缆接地抢修','2011-01-03','2011-01-05',);
insert Salvaging values (,'观澜站光缆抢修','2011-02-10','2011-02-11',);
insert Salvaging values (,'小径墎低压线被盗抢修','2011-02-15','2011-02-15',);
insert Salvaging values (,'明珠立交电缆沟盖板破损抢修','2011-03-02','2011-03-05',);
insert Salvaging values (,'朝阳围公变低压线被盗抢修','2011-03-08','2011-03-10',); create table Stock(
mat_no varchar() primary key,
mat_name varchar(),
speci varchar(),
warehouse varchar(),
amount int,
unit decimal(,),
total decimal(,)
) insert Stock values('m001','护套绝缘电线','BVV-120','供电局1#仓库',,89.80,19756.00);
insert Stock values('m002','架空绝缘电线','10KV-150','供电局1#仓库',,17.00,510.00);
insert Stock values('m003','护套绝缘电线','BVV-35','供电局2#仓库',,22.80,1824.00);
insert Stock values('m004','护套绝缘电线','BVV-50','供电局2#仓库',,32.00,9056.00);
insert Stock values('m005','护套绝缘电线','BVV-70','供电局2#仓库',,40.00,5200.00);
insert Stock values('m006','护套绝缘电线','BVV-150','供电局3#仓库',,null,null);
insert Stock values('m007','架空绝缘电线','10KV-120','供电局3#仓库',,14.08,1196.80);
insert Stock values('m009','护套绝缘电线','BVV-16','供电局3#仓库',,null,null);
insert Stock values('m011','护套绝缘电线','BVV-95','供电局3#仓库',,null,null);
insert Stock values('m012','交联聚乙烯绝缘电缆','YJV22-15KV','供电局4#仓库',,719.80,32391.00);
insert Stock values('m013','户外真空短路器','ZW12-12','供电局4#仓库',,13600.00,13600.00); create table Out_Stock(
prj_no int,
mat_no varchar(),
amount int,
get_date datetime,
department varchar(),
primary key (prj_no,mat_no),
foreign key (prj_no) references Salvaging(prj_no),
foreign key (mat_no) references Stock(mat_no),
) insert Out_Stock values(,'m001',,'2010-10-12','工程1部');
insert Out_Stock values(,'m002',,'2010-10-12','工程1部');
insert Out_Stock values(,'m001',,'2010-11-05','工程1部');
insert Out_Stock values(,'m003',,'2010-11-05','工程1部');
insert Out_Stock values(,'m001',,'2011-01-03','工程2部');
insert Out_Stock values(,'m001',,'2011-01-03','工程2部');
insert Out_Stock values(,'m013',,'2011-01-03','工程2部');
insert Out_Stock values(,'m001',,'2011-02-11','工程3部');
insert Out_Stock values(,'m012',,'2011-02-11','工程3部');
insert Out_Stock values(,'m001',,'2011-02-15','工程3部');
insert Out_Stock values(,'m004',,'2011-02-15','工程3部');
insert Out_Stock values(,'m001',,'2011-03-02','工程2部');
insert Out_Stock values(,'m003',,'2011-03-02','工程2部');
insert Out_Stock values(,'m006',,'2011-03-02','工程2部');
insert Out_Stock values(,'m001',,'2011-03-09','工程1部');
查询实例:
--查询三个表。
select * from Salvaging;
select * from Stock;
select * from Out_Stock; --查询所有配电物资的物资编号、物资名称、规格。
select mat_no,mat_name,speci from Stock; --查询所有配电物资的物资名称、物资编号、规格和所在仓库名称。
select mat_name,mat_no,speci,warehouse from Stock; --查询所有配电物资的记录。
select * from Stock; --查询所有抢修工程的抢修天数。
--getdate() 获取当前系统时间 year(date)获取年份 month(date)获取月份 day(date)获取天 datediff(datepart,start_date,end_date)获取相差时间
select prj_no,prj_name,datediff(day,start_date,end_date) from Salvaging; --查询所有抢修工程的抢修天数,并在实际抢修天数列前加入一个列,此列的每行数据均为‘抢修天数’常量值。
select prj_no,prj_name,'抢修天数',datediff(day,start_date,end_date) from Salvaging; --用户可以通过指定别名来改变查询结果的列标题,语法格式为:列名|表达式 [AS] 列标题 或:列标题=列名|表达式
select prj_no,prj_name,datediff(day,start_date,end_date) '抢修天数' from Salvaging; --在配电物资库存记录表中查询出所有的仓库名称,并去掉结果表中的重复行。
select distinct warehouse from Stock; --查询供电局1#仓库存放的所有物资编号、物资名称、规格以及数量。
select mat_no,mat_name,speci,amount from Stock where warehouse='供电局1#仓库'; --查询所有单价小于80的物资名称、数量及其单价。
select mat_name,amount,unit from Stock where unit<;
select mat_name,amount,unit from Stock where not unit>=; --查询单价在50~100之间的物资名称、数量及其单价。
select mat_name,amount,unit from Stock where unit>= and unit<=;
select mat_name,amount,unit from Stock where unit between and ; --查询存放在供电局1#仓库和供电局2#仓库的物资名称、规格及其数量。
select mat_name,speci,amount from Stock where warehouse in('供电局1#仓库','供电局2#仓库');
select mat_name,speci,amount from Stock where warehouse='供电局1#仓库' or warehouse='供电局2#仓库'; --查询既没有存放在供电局1#仓库,也没有存放在供电局2#仓库的物资名称、规格及其数量。
SELECT mat_name, speci, amount FROM stock WHERE warehouse NOT IN ('供电局1#仓库','供电局2#仓库'); --找出满足给定匹配条件的字符串,其格式为:[NOT] LIKE ‘<匹配串>’[ESCAPE ‘<换码字符>’]
--查询存放在供电局1#仓库的物资的详细情况。
SELECT * FROM stock WHERE warehouse LIKE '供电局1#仓库' --查询所有绝缘电线的物资编号、名称和规格。
select * from stock where mat_name like '%绝缘电线'; --查询物资名称中第三、四个字为“绝缘”的物资编号、名称和规格。
select * from stock where mat_name like '__绝缘%'; --查询所有不带绝缘两个字的物资编号、名称和规格。
SELECT mat_num , mat_name, speci FROM stock WHERE mat_name NOT LIKE '%绝缘%' --查询物资名称为‘断路器_户外真空’物资信息。
select * from stock where mat_name like '断路器\_户外真空' escape '\'; --查询无库存单价的物资编号及其名称。
select mat_no,mat_name from stock where unit is null; --查询规格为BVV-120的护套绝缘电线的物资编号、库存数量及库存地点。
select mat_no,amount,warehouse from Stock where speci='BVV-120' and mat_name='护套绝缘电线'; --查询“护套绝缘电线”的物资编号及其单价,查询结果按单价降序排列。
select mat_no,unit from Stock order by unit desc --查询所有物资的信息,查询结果按所在仓库名降序排列,同一仓库的物资按库存量升序排列。
select * from Stock order by warehouse desc,amount; --TOP n子句:在查询结果中输出前面的n条记录;
--TOP n PERCENT子句:在查询结果中输出前面占结果记录总数的n%条记录。
--显示stock表中,库存量最大的两条记录。
select top * from stock order by amount desc; /*
--显示stock表中占总数20%的记录。(注意,top子句不能和Stock关键字一起使用)
select 20 percent * from stock;
Some Problems
*/ --统计领取了物资的抢修工程项目数。
select count(distinct prj_no) '抢修项目数' from Out_stock; --查询使用m001号物资的抢修工程的最高领取数量、最低领取数量以及平均领取数量。
select max(amount) '最高领取数量',min(amount) '最低领取数量',avg(amount) '平均领取数量' from out_stock where mat_no='m001'; --GROUP BY子句可以将查询结果表按一列或多列取值相等的原则进行分组。
--分组进行聚合函数的聚合
--查询每个抢修工程项目号及使用的物资种类。
select prj_no,count(*) '物资种类' from out_stock group by prj_no; --HAVING可以针对集函数的结果值进行筛选,它是作用于分组计算的结果集;跟在Group By子句的后面,有GROUP BY才有HAVING
--查询使用了2种以上物资的抢修工程项目号。
select prj_no,count(*) '物资种类' from out_stock group by prj_no having count(*)>; --统计存放于供电局2#仓库的所有物资的总价值。
SELECT mat_name,speci,amount,unit,total FROM stock WHERE warehouse='供电局2#仓库' COMPUTE SUM(total) --统计存放于各个仓库的物资总价值,并查询物资名称、规格、单价、数量等,按仓库分组显示查询结果。
select * from stock order by warehouse compute sum(total) by warehouse
--
--连接查询
-- use electric
go --查询项目号为“”抢修项目所使用的物资编号、物资名称、规格和使用数量
select Stock.mat_no,mat_name,speci,Out_Stock.amount from Stock,Out_Stock where Stock.mat_no=Out_Stock.mat_no and prj_no=''; --查询同时使用了物资编号为m001和m002的抢修工程的工程号与工程名称
select A.prj_no from Out_Stock A,Out_Stock B where A.prj_no=B.prj_no and A.mat_no='m001' and B.mat_no='m002'; --
--嵌套查询
-- --查询与规格为“BVV-”的“护套绝缘电线”在同一个仓库存放的物资名称、规格和数量
select mat_name,speci,amount from Stock where warehouse in (select warehouse from Stock where speci='BVV-120' and mat_name='护套绝缘电线'); --查询工程项目为“观澜站光缆抢修”抢修所使用的物资编号和名称
select mat_no,mat_name from Stock where mat_no in (select mat_no from Salvaging where prj_name='观澜站光缆抢修'); --查询出库存量 超过该仓库物资 平均库存量的 物资编号、名称、规格及数量
select mat_no,mat_name,speci,amount from Stock where amount > (select avg(amount) from Stock); --
--带有ANY或ALL谓词的子查询
-- --查询其他仓库中比供电局1#仓库的某一物资库存量少的物资名称、规格和数量
select mat_name,speci,amount from Stock where warehouse != '供电局1#仓库' and amount < any (select amount from stock where warehouse = '供电局1#仓库'); --查询其他仓库中比供电局1#仓库的所有物资库存量少的物资名称、规格和数量
select mat_name,speci,amount from Stock where warehouse != '供电局1#仓库' and amount < all (select amount from stock where warehouse = '供电局1#仓库'); --
--带有EXISTS谓词的子查询
-- --查询所有使用了m001号物资的工程项目名称
select prj_name from salvaging S where exists (select * from out_stock where prj_no=S.prj_no and mat_no='m001'); --查询没有使用了m001号物资的工程项目名称
select prj_name from salvaging S where not exists (select * from out_stock where prj_no=S.prj_no and mat_no='m001'); --
--Union Intersect Except 集合查询
-- --查询存放在供电局1#仓库的物资及单价不大于50的物资
select * from stock where warehouse='供电局1#仓库' union select * from stock where unit<=; --查询使用了物资编号为m001或m002的抢修工程的工程号
select prj_no from out_stock where mat_no='m001' union select prj_no from out_stock where mat_no='m002'; --查询存放在供电局1#仓库且单价不大于50的物资
select * from stock where warehouse='供电局1#仓库' intersect select * from stock where unit<=; --查询同时使用了物资编号为m001和m002的抢修工程的工程号
select prj_no from out_stock where mat_no='m001' intersect select prj_no from out_stock where mat_no='m002'; --查询存放在供电局1#仓库的物资与单价不大于50的物资的差集
select * from stock where warehouse='供电局1#仓库' except select * from stock where unit<=;
SQL Server 第三章 结构化查询语言的更多相关文章
- SQL Structured Query Language(结构化查询语言) 数据库
SQL是Structured Query Language(结构化查询语言)的缩写. SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要发出“做什么”的命令,“怎么 ...
- (三) 结构化查询语言SQL——1
1. SQL概述 SQL,结构化查询语言,重要性不必在赘述了,基本上开发软件没有不用到的,此外在一些大数据也有广泛的应用.SQL主要包含数据定义语言(DDL).数据操纵语言(DML)以及数据控制语言( ...
- SQL 结构化查询语言
SQL 结构化查询语言 一.数据库的必要性: >>作用:存储数据.检索数据.生成新的数据 1)可以有效结构化存储大量的数据信息,方便用户进行有效的检索和访问. 2)可以有效地保持数据信息的 ...
- 数据库入门4 结构化查询语言SQL
知识内容: 1.了解SQL 2.库.表操作及索引 3.select语句及insert语句 4.update语句与delete语句 5.SQL常用函数 6.多表连接及组合查询 7.视图操作及数据控制 参 ...
- 简单了解SQL(结构化查询语言)
简单了解SQL(结构化查询语言) 年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际 ...
- 结构化查询语言-SQL
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程 ...
- SQL结构化查询语言
一.SQL 结构化查询语言 1.T-SQL 和 SQL的关系 T-SQL是SQL的增强版 2.SQL的组成 2.1 DML (数据操作语言) 增加,修改,删除等数据操作 2.2 DCL (数据控制语言 ...
- SQL 数据库结构化查询语言
1.数据库 常见数据库 MySQL:开源免费的数据库,小型的数据库. Oracle:收费的大型数据库,Oracle 公司的产品 DB2:IBM 公司收费的数据库,常应用在银行系统中 SQLServer ...
- SQL语言:结构化查询语言
SQL语言:结构化查询语言 程序员或者DBA(数据库管理员)使用SQL和DBBSM进行交互,操纵数据库中的资源 分类: 1.DDL 数据定义语言 结构 create 创建 database ta ...
随机推荐
- python全栈开发 * 34知识点汇总 * 180719
文件上传下载:一.文件上传(内容较少)服务器:(代码) import socket import json sk=socket.socket() sk.bind(("127.0.0.1&qu ...
- axios库的使用
axios是基于Promise 用于浏览器和 nodejs 的 HTTP 客户端:可以用在webpack + vuejs 的项目中 原文 https://github.com/axios/axios ...
- 43-2-CAN协议
1.帧的种类 通信是通过以下 5 种类型的帧进行的. • 数据帧 • 遥控帧 • 错误帧 • 过载帧 • 帧间隔 另外, 数据帧和遥控帧有标准格式和扩展格式两种格式.标准格式有 11 个位的标识符(I ...
- Cocos 2dx项目lua调用OC出现卡死但不闪退的坑
最近新上线的一个游戏,发现线上游戏有部分功能在点击的时候出现了没有反应的情况.通过调试源码,发现是原生OC的代码出现了崩溃,但是比较奇怪的是线上的Bugly没有任何记录,这个功能属于高频高能,而且又是 ...
- Python Async/Await入门指南
转自:https://zhuanlan.zhihu.com/p/27258289 本文将会讲述Python 3.5之后出现的async/await的使用方法,以及它们的一些使用目的,如果错误,欢迎指正 ...
- node 七牛云图片上传
后端代码 //https://portal.qiniu.com/user/key var accessKey = '-xxx-QvPiZzXYWY9AuytTjgix'; var secretKey ...
- 两个有序数组的上中位数和第K小数问题
哈,再介绍个操蛋的问题.当然,网上有很多解答,但是能让你完全看懂的不多,即便它的结果是正确的,可是解释上也是有问题的. 所以,为了以示正听,我也做了分析和demo,只要你愿意学习,你就一定能学会,并且 ...
- cocos2d-x JS 各类点、圆、矩形之间的简单碰撞检测
这里总结了一下点.圆.矩形之间的简单碰撞检测算法 (ps:矩形不包括旋转状态) 点和圆的碰撞检测: 1.计算点和圆心的距离 2.判断点与圆心的距离是否小于圆的半 isCollision: functi ...
- Python学习之高级数组(一)
1.Python基础学习之高级数组(一) 1.1视图:就是与较大数组共享相同数据的较小数组.Numpy包提供数据视图的概念是为了精确地控制内存的使用方式. 数组视图.切片视图.转置和重塑视图等 数组 ...
- vim代码格式化插件clang-format
title: vim代码格式化插件clang-format date: 2017-12-12 20:28:26 tags: vim categories: 开发工具 安装vim-clang-forma ...