学习网址链接:
https://www.w3school.com.cn/sql/sql_top.asp
学习案例链接:
https://wenku.baidu.com/view/720053b459fb770bf78a6529647d27284b73378e.html
写在前面:
最近在学习sql语句之余想把自己遇到的一些坑做个记录,当然更希望和大家一起交流学习,本篇博文在自己的学习过程中我会持续更新,有写的不对的地方也希望大家给我留言或者来邮来电(longchengforever@163.com)。:

【select语句】

  • select嵌套
  1. 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语句实战操作相关推荐

  1. 整理:sql server 中sql语句执行顺序

    原文地址为: 整理:sql server 中sql语句执行顺序 SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中 ...

  2. SQL Server中T-SQL语句查询使用的函数

    SQL Server中T-SQL语句查询使用的函数 一,字符串函数 字符串函数用于对字符串数据进行处理,并返回一个字符串或数字. 函数名 描述 举例 CHARINDEX 用来寻找一个指定的字符串在另一 ...

  3. SQL Server 中SQL语句执行顺序

    SQL Server 中SQL语句执行顺序 我们需要对SQL语句的执行顺序了若指掌,才能更好的理解SQL. SQL 不同于与其他编程语言的最明显特征是处理代码的顺序. 在大数编程语言中,代码按编码顺序 ...

  4. 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 ...

  5. 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 ...

  6. SQL Server中SQL是什么?

    含义和定义 (Meaning and definition) SQL stands for Structured Query Language, a language for manipulating ...

  7. sql server中select语句需要申请的锁

    以NA_TrafficMemberOrderRelation表为例,表的索引如下: index_id name cols 1 PK__NA_Traff__FB6751642649A903 Traffi ...

  8. SQL Server 中as语句后加英文,标点符号等内容

    SQL中as语句后加英文,标点符号等内容 SELECT  isnull(EndTime,getdate()) as '完成时间(H)' FROM [PCMIS].[dbo].[ProcessOfInt ...

  9. 如何解决SQL Server中SQL身份危机

    描述 (Description) SQL Identity columns provide a convenient way to auto-number an ID column within a ...

最新文章

  1. yum安装mysql后密码_Centos7:yum安装MySQL5.7后如何设置root密码
  2. 蜜糖变砒霜:90%美国公司区块链项目将不再重启
  3. [编程题] 迷路的牛牛
  4. Hive学习和配置Mysql
  5. C#LeetCode刷题之#551-学生出勤纪录 I​​​​​​​(Student Attendance Record I)
  6. Java zip and unzip demo
  7. 揭密360急速免杀系列教程
  8. 东欧小哥打造超全Python速查表登上GitHub热榜,标星4600+
  9. html5 讯飞离线语音包,讯飞输入法离线语音怎么用?讯飞输入法离线语音开启方法...
  10. Rust的错误处理机制
  11. 常见数据挖掘算法和Python简单实现
  12. (转)慈不掌兵、义不养财
  13. 使用ffmpeg转码m3u8并播放及跨域问题
  14. 离散时间信号处理/Week1
  15. 细说inchat系统客户端开发之路
  16. stardict词典下载
  17. python中complex(10.99)是什么意思_代码 a = 10.99; print(complex(a)) 的执行结果是 _________ 。...
  18. STM32使用stm32cubemx LL库系列教程
  19. java px pt转化_字体的大小(pt)和像素(px)如何转换?
  20. 通过Consumer函数式接口,实现回调

热门文章

  1. 【PAT笔记】C++标准模板库STL(一)——vector的用法和示例
  2. 10分钟白嫖我常用的20个在线工具类网站清单。
  3. 3000 字说说跨域!面试官听完之后露出了满意的笑容
  4. Java线程池原理及使用
  5. mybatis基本增删改查、缓存,延迟加载以及别名的配置
  6. Eclipse用法:自动生成get和set方法
  7. java商城管理系统ssm_基于SSM+MYSQL的一个小型商城网站后台管理系统
  8. 指数随机变量 泊松过程跳_《常见随机过程》(一)
  9. JSON与Struts2的结合使用
  10. Eclipse相关问题总结