SQL server 中SQL语句实战操作
学习网址链接:
https://www.w3school.com.cn/sql/sql_top.asp
学习案例链接:
https://wenku.baidu.com/view/720053b459fb770bf78a6529647d27284b73378e.html
写在前面:
最近在学习sql语句之余想把自己遇到的一些坑做个记录,当然更希望和大家一起交流学习,本篇博文在自己的学习过程中我会持续更新,有写的不对的地方也希望大家给我留言或者来邮来电(longchengforever@163.com)。:
【select语句】
- select嵌套
- List item
:temp临时表
Select * From (Select 字段 From 表) As temp
eg1:
SELECT Production AS '11时产量' FROM (SELECT Production=( select max(Production) from dbo.[注塑车间8号设备生产信息统计]Where Date BETWEEN '2019-09-11 11:00:00' and '2019-09-11 11:59:59') ) AS temp
说明:(SELECT Production=( select max(Production) from dbo.[注塑车间8号设备生产信息统计]Where Date BETWEEN '2019-09-11 11:00:00' and '2019-09-11 11:59:59') ) 将生成结果作为临时表 (AS temp )
eg2:
数据源:
select * from dbo.[时段产量] where (dbo.[时段产量].OK = (select min(OK) from (SELECT 时间, OK FROM dbo.[8time] where [时间] BETWEEN ‘2019/10/21 15:00:00’ AND ‘2019/10/21 15:59:59’)as a))
【行列关系转化】
- 1,行转列,列转行
step1:测试数据准备
CREATE TABLE [StudentScores]
([UserName] NVARCHAR(20), --学生姓名[Subject] NVARCHAR(30), --科目[Score] FLOAT, --成绩
)INSERT INTO [StudentScores] SELECT '张三', '语文', 80
INSERT INTO [StudentScores] SELECT '张三', '数学', 90
INSERT INTO [StudentScores] SELECT '张三', '英语', 70
INSERT INTO [StudentScores] SELECT '张三', '生物', 85
INSERT INTO [StudentScores] SELECT '李四', '语文', 80
INSERT INTO [StudentScores] SELECT '李四', '数学', 92
INSERT INTO [StudentScores] SELECT '李四', '英语', 76
INSERT INTO [StudentScores] SELECT '李四', '生物', 88
INSERT INTO [StudentScores] SELECT '码农', '语文', 60
INSERT INTO [StudentScores] SELECT '码农', '数学', 82
INSERT INTO [StudentScores] SELECT '码农', '英语', 96
INSERT INTO [StudentScores] SELECT '码农', '生物', 78
step2:行转列sql
eg1
SELECT * FROM [StudentScores] /*数据源*/
AS P
PIVOT
(SUM(Score/*行转列后 列的值*/) FOR p.Subject/*需要行转列的列*/ IN ([语文],[数学],[英语],[生物]/*列的值*/)
) AS T
eg2
数据源:
表名:8号机分时产量
Excude Code:
step3:测试数据准备
CREATE TABLE ProgrectDetail
(ProgrectName NVARCHAR(20), --工程名称OverseaSupply INT, --海外供应商供给数量NativeSupply INT, --国内供应商供给数量SouthSupply INT, --南方供应商供给数量NorthSupply INT --北方供应商供给数量
)INSERT INTO ProgrectDetail
SELECT 'A', 100, 200, 50, 50
UNION ALL
SELECT 'B', 200, 300, 150, 150
UNION ALL
SELECT 'C', 159, 400, 20, 320
UNION ALL
step4:
SELECT P.ProgrectName,P.Supplier,P.SupplyNum
FROM
(SELECT ProgrectName, OverseaSupply, NativeSupply,SouthSupply, NorthSupplyFROM ProgrectDetail
)T
UNPIVOT
(SupplyNum FOR Supplier IN(OverseaSupply, NativeSupply, SouthSupply, NorthSupply )
) P
【2】
select * from [11点]
union all
select * from [12点]
【指定行列的数据选取】
- SQL TOP 子句:
TOP 子句
TOP 子句用于规定要返回的记录的数目。对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
(PS:并非所有的数据库系统都支持 TOP 子句。)
SQL Server 的语法:
SELECT TOP number|percent column_name(s)
FROM table_name
MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的
MySQL 语法
SELECT column_name(s)
FROM table_name
LIMIT number
例子
SELECT *
FROM Persons
LIMIT 5
Oracle 语法
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number
例子
SELECT *
FROM Persons
WHERE ROWNUM <= 5
情况一:
选取前50条记录
SELECT TOP 50 * FROM table_name
选取table中某些列的前50条
SELECT TOP 50 column_name(s) FROM table_name
情况二:
选取第50行
方法1
SELECT no=Identity(int,1,1),* INTO temptable FROM table_name
SELECT * FROM temptable WHERE no=15
DROP TABLE temptable
利用identity函数生成记录序号,和原表数据保存到临时表temptable中;
用完删除临时表temptable。
方法2
SELECT TOP 1 * FROM (SELECT TOP 50 * FROM table_name ORDER BY colnum_name DESC) AS f
方法3
SELECT TOP 1 * FROM table_name
WHERE column_name NOT IN (SELECT TOP 49 column_name FROM table_name)
eg:
select top 1 * from dbo.[8号机分时产量汇总] where 分时产量 not in (select top 5 分时产量 from dbo.[8号机分时产量汇总])
results:
情况3
选择50到99行数据
SELECT no=Identity(int,1,1),* INTO temptable FROM table_name
SELECT * FROM temptable WHERE no>=50 AND no<100
DROP TABLE temptable
情况4
选择前50%数据
SELECT TOP 50 PERCENT * FROM table_name
情况5
选择首/尾行数据
方法一: 使用TOP(SQL server)
SELECT TOP 1 * FROM user;
SELECT TOP 1 * FROM user order by id desc;
eg:
source data:
执行语句:
select top 1 * from dbo.[8号机分时产量汇总] where 分时产量 not in (select top 1 分时产量 from dbo.[8号机分时产量汇总])
--获取第一行数据union allselect top 1 * from dbo.[8号机分时产量汇总] where 分时产量 in (select top 1 分时产量 from dbo.[8号机分时产量汇总])
--获取第二行数据
结果:
方法二: 使用LIMIT(MySQL)
SELECT * FROM user LIMIT 1;
SELECT * FROM user ORDER BY id ASC LIMIT 1;
SELECT * FROM user ORDER BY id DESC LIMIT 1;
【排序问题】
- ORDER BY 语句
ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录进行排序。如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
实例 1
以字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
加载连接:https://www.w3school.com.cn/sql/sql_orderby.asp
【视图操作】
- 视图检测
eg1:
IF NOT EXISTS(SELECT 1 FROM sys.views WHERE name='视图名称')
BEGIN
create view 视图名称
as
SELECT...FROM...
END
会提示以下错误:
Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'view'.
出现这个错误的原因是:create view 这一句必须是批处理中的第一句。
所以可以将该语句修改为:
IF EXISTS(SELECT 1 FROM sys.views WHERE name='视图名称')
DROP VIEW 视图名称
GO
create view 视图名称
as
SELECT ...
FROM
(...) INNER JOIN Content ON ...=...
GO
eg2:
USE [DBname]
GO
IF EXISTS (SELECT * FROM sysobjects WHERE name ='视图名称')DROP VIEW view名称
GOCREATE VIEW view名称ASSELECT 。。。FROM 。。。INNER JOIN 。。。
- table/view新增自增ID列
create view v_test
as
select row_number() over (order by getdate()) as ID,*
from 表名
eg:原始数据
Execute code:
select row_number() over (order by getdate()) as ID,*
from dbo.[8号机分时产量汇总]
Results:
【字符串操作】
- 说明:
/****** Sql Server中截取字符串的常用方法 ******/
TESTCODESTRING=‘01378a77517a41e982b14cc97b1f8794’
–1、LEFT()方法—(能够实现和RIGHT()嵌套)
–函数说明—
–1)语法:LEFT(character,integer)
–2)介绍:参数1:要截取的字符串,参数2:截取字符个数
–3)使用:
–返回从字符串左边开始指定个数的字符–
select LEFT(TESTCODESTRING,4) 返回左边前4个字符
–4)返回: 0137
–2、RIGHT()方法—
– right()函数说明—
–1)语法:RIGHT(character,integer)
–2)介绍:参数1:要截取的字符串,参数2:截取字符个数
–3)使用:
–返回从字符串右边开始指定个数的字符–
select RIGHT(TESTCODESTRING,4) 返回右边后4个字符
–4)返回: 8794
–3、SUBSTRING()方法—
– substring()函数说明—
–1)语法:SUBSTRING(character,start,length)
–2)介绍:参数1:要截取的字符串,参数2:开始截取的下标,参数3:截取的字符长度
–3)使用:
–返回从字符串中间的字符–
select SUBSTRING(TESTCODESTRING,4,8) 从左边第4个字符开始取长度为8的子串
–4)返回: 78a77517
–4、re.sub()方法—
re.sub(pattern,repl,string,count=0,flags=0)
在字符串 string 中找到匹配正则表达式 pattern 的所有子串,
用另一个字符串 repl 进行替换。
如果没有找到匹配 pattern 的串,则返回未被修改的 string。Repl 既可以是字符串也可以是一个函数。
eg:
v = str(sh.cell_value(a, 0))v0 = int(re.sub('\D', '', v)) # 在'100abc'这个字符串中找到非数字的字符(正则表达式中'\D'表示非数字),并用""替换,然后返回的就是只剩下数字的字符串
具体操作指令:
SELECT TESTCODESTRING,LEFT(TESTCODESTRING,4) FROM TestTable WHERE PSCODE='33030011111103'结果为:
TESTCODESTRING,(无列名)
01378a77517a41e982b14cc97b1f8794,0137SELECT TESTCODESTRING,RIGHT(TESTCODESTRING,4) FROM TestTable WHERE PSCODE='33030011111103'结果为:
TESTCODESTRING,(无列名)
01378a77517a41e982b14cc97b1f8794,8794SELECT TESTCODESTRING,SUBSTRING(TESTCODESTRING,4,8) FROM TestTable WHERE PSCODE='33030011111103'结果为:
TESTCODESTRING,(无列名)
eg:
数据源:
select RIGHT((select top 1 * from dbo.[8号机时段工作时长] where PeridTime in (select top 1 PeridTime from dbo.[8号机时段工作时长])),5)
/*
说明1:
(select RIGHT((select top 1 * from dbo.[8号机时段工作时长] where PeridTime in (select top 1 PeridTime from dbo.[8号机时段工作时长])),5))
**截取字符串右边5位**
说明2:
select LEFT(pam,2)
**截取字符串左边2位**
说明3:
AS TIMER
**命名列***/
【SQL Server基本操作】
1、在SQL SERVER 2008上附加teaching数据库,其中三张表的含义解释如下:
学生表dbo.student有属性sno、sname、spec、birthday、email、sex、scholarship,分别代表学号、姓名、专业、生日、电子邮箱、性别、奖学金;
课程表dbo.course有属性cno、cname、credit、teacher,分别代表课号、课程名、学分、任课教师;
选课表dbo.student_course有属性sno、cno、grade,分别代表学号、课号、成绩。
2、在teaching数据库中创建下列视图:
(1)将学生的学号、姓名及他的平均成绩定义为一个视图V1;
(2)由(1)建立的视图是否可更新?请说明理由;
(3)将没有一门课程成绩在80分以下的所有学生的信息(包括学号、姓名和专业)定义为一个视图V3;
(4)将获得奖学金(奖学金不为0)的同学的奖学金数量变为原来的2倍,并将这些学生的信息定义为一个视图V4;
(5)将学生成绩得过满分(100分)的课程(包括课号、课程名和学分)定义为一个视图V5;
(6)将三张表student、student_course、dbo.course连接操作定义为一个视图V6,并根据此视图来查询选修了’数据库技术与设计’课程的所有学生的学号、姓名和成绩,并按成绩的降序排列。
3、在teaching数据库中创建用户定义函数:
(1)求圆面积用户定义函数的创建
(2)求圆面积用户定义函数的调用
(3)求圆面积用户定义函数的删除
原文链接:https://blog.csdn.net/j_anson/article/details/51456249
codes:
--2
--2.1将学生的学号、姓名及他的平均成绩定义为一个视图V1
use teaching
gocreate view v1(sno,sname,avg_grade)
as select s.sno,s.sname,avg(sc.grade)
from student s,student_course sc
where s.sno=sc.sno
group by s.sno,s.sname
go--2.2
--v1视图不可更新,仅行列子集视图可更新--2.3
--将没有一门课程成绩在80分以下的所有学生的信息(包括学号、姓名和专业)定义为一个视图V3
use teaching
gocreate view v3(sno,sname,spec,grade)
as select s.sno,s.sname,s.spec,sc.grade
from student s,student_course sc
where s.sno=sc.sno
group by s.sno,s.sname,s.spec,sc.grade
having not exists (select student_course.grade from student_course where student_course.grade<80)
go--2.4
--将获得奖学金(奖学金不为0)的同学的奖学金数量变为原来的2倍,并将这些学生的信息定义为一个视图V4
--创建
use teaching
gocreate view v4(sno,sname,scholarship)
as select s.sno,s.sname,s.scholarship*2
from student s
where s.scholarship>0
go--2.5
--将学生成绩得过满分(100分)的课程(包括课号、课程名和学分)定义为一个视图V5
use teaching
gocreate view v5(sno,cno,cname,credit)
as select sc.sno,c.cno,c.cname,c.credit
from student s,student_course sc,course c
where s.sno=sc.sno and sc.cno=c.cno and sc.grade=100
go--2.6
--将三张表student、student_course、dbo.course连接操作定义为一个视图V6,
--并根据此视图来查询选修了’数据库技术与设计’课程的所有学生的学号、姓名和成绩,并按成绩的降序排列
use teaching
gocreate view v6(sno,sname,grade,cno,cname)
as select s.sno,s.sname,sc.grade,c.cno,c.cname
from student s,student_course sc,course c
where s.sno=sc.sno and sc.cno=c.cno
goselect v6.sno,v6.sname,v6.grade
from v6
where v6.cname='数据库技术与设计'
go
--3
--函数自定义
create function Circle(@R float)
returns float
as
begin
set @R=PI()*@R*@R
return @R
end
go--调用
select dbo.Circle(2)
go--删除
drop function Circle
go
数据库截图:
SQL server 中SQL语句实战操作相关推荐
- 整理:sql server 中sql语句执行顺序
原文地址为: 整理:sql server 中sql语句执行顺序 SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中 ...
- SQL Server中T-SQL语句查询使用的函数
SQL Server中T-SQL语句查询使用的函数 一,字符串函数 字符串函数用于对字符串数据进行处理,并返回一个字符串或数字. 函数名 描述 举例 CHARINDEX 用来寻找一个指定的字符串在另一 ...
- SQL Server 中SQL语句执行顺序
SQL Server 中SQL语句执行顺序 我们需要对SQL语句的执行顺序了若指掌,才能更好的理解SQL. SQL 不同于与其他编程语言的最明显特征是处理代码的顺序. 在大数编程语言中,代码按编码顺序 ...
- sql ddl中key_SQL DDL:SQL Server中SQL DDL命令入门
sql ddl中key This article explains SQL DDL commands in Microsoft SQL Server using a few simple exampl ...
- SQL Server中SQL Union vs Union All
This article explains to the SQL Union and vs Union All operators in SQL Server. We will also explor ...
- SQL Server中SQL是什么?
含义和定义 (Meaning and definition) SQL stands for Structured Query Language, a language for manipulating ...
- sql server中select语句需要申请的锁
以NA_TrafficMemberOrderRelation表为例,表的索引如下: index_id name cols 1 PK__NA_Traff__FB6751642649A903 Traffi ...
- SQL Server 中as语句后加英文,标点符号等内容
SQL中as语句后加英文,标点符号等内容 SELECT isnull(EndTime,getdate()) as '完成时间(H)' FROM [PCMIS].[dbo].[ProcessOfInt ...
- 如何解决SQL Server中SQL身份危机
描述 (Description) SQL Identity columns provide a convenient way to auto-number an ID column within a ...
最新文章
- yum安装mysql后密码_Centos7:yum安装MySQL5.7后如何设置root密码
- 蜜糖变砒霜:90%美国公司区块链项目将不再重启
- [编程题] 迷路的牛牛
- Hive学习和配置Mysql
- C#LeetCode刷题之#551-学生出勤纪录 I​​​​​​​(Student Attendance Record I)
- Java zip and unzip demo
- 揭密360急速免杀系列教程
- 东欧小哥打造超全Python速查表登上GitHub热榜,标星4600+
- html5 讯飞离线语音包,讯飞输入法离线语音怎么用?讯飞输入法离线语音开启方法...
- Rust的错误处理机制
- 常见数据挖掘算法和Python简单实现
- (转)慈不掌兵、义不养财
- 使用ffmpeg转码m3u8并播放及跨域问题
- 离散时间信号处理/Week1
- 细说inchat系统客户端开发之路
- stardict词典下载
- python中complex(10.99)是什么意思_代码 a = 10.99; print(complex(a)) 的执行结果是 _________ 。...
- STM32使用stm32cubemx LL库系列教程
- java px pt转化_字体的大小(pt)和像素(px)如何转换?
- 通过Consumer函数式接口,实现回调