返回顶部
首页 > 资讯 > 数据库 >sqlserver数据库的sql语句使用
  • 503
分享到

sqlserver数据库的sql语句使用

2024-04-02 19:04:59 503人浏览 泡泡鱼
摘要

             T-SQL查询语句1. tansact-SQL编程语言美国国家标准协会(ANSI)和国际标准组织(I

             T-SQL查询语句

1. tansact-SQL编程语言

美国国家标准协会(ANSI)和国际标准组织(ISO)为 sql定义了标准,微软通过用Transact-SQL和ANSI—SQL兼容,Transact-SQL还包含了几种能够增强性能的扩展。

 

T-SQL的组成:

 

 数据定义语言(Date Definition Language)语句简称DDL语句

DDL语句用来建立数据库,数据库对象(create,alter,drop)

create object_name

alter object_name

drop object_name

举例说明DDL语句的使用:

use schoolDB

create table teacher

(cust_idint ,company varchar(40),contact varchar(30),phone char(12))

Go

alter table teacher add ageint default 30

 数据控制语言(Date Control Language)语句

用于改变某个用户或角色相关的权限

grant

deny

revoke

举例说明:

use schoolDB

grant select on products to public

go

 数据操作语言(Date Manipulation Language)语句

 

操作数据库中的数据。可以更改数据库中的数据或查询数据库中的信息

举例说明:

select*from dbo.TStudent  //查询TStudent表中的数据

 

insert dbo.TStudent (StudentID,Sname,sex)values('0000001901','陈英宏','男')//为TStudent表中的studentID,Sname,sex列插入相应的记录

 

update dbo.TStudent set Sname='张春海',sex='男'where studentid='0000000569'//更新表中studentID为0000000569的姓名修改为'张春海'

delete dbo.TStudent where StudentID='0000000020'//删除studentID为0000000020的记录

2. Ttansact-SQL语法要素

1. 批处理

go

一个批处理命令通知SQLServer分析并运行一个批处理的所有指令

实际上不是 Transact-SQL语句,只是描述一个批处理。局部变量作用范围局限在一个批内,必须独占一行。

USE schoolDB

go

select * from dbo.TScore--从那张表查找

where mark+9<60

go

2. 表达式

1. 算数运算符

 + - *  /  %

比较运算符 =   <>  >    =  <

!= :不等于,等同于<>

BETWEEN :指定值得包含范围(包含边界)。使用AND分隔开始值和结束值

IS[NOT]NULL :根据使用的关键字,指定是否搜索空值或非空值。如果有任何一个操作数为NULL,则包含运算符或算数运算符的表达式的计算结果为NULL

LIKE:模糊查询,与指定字符串进行模糊匹配

IN:是否在数据范围里面

字符串联运算符 +  空字符不等于空值

表达式是各种符号和对单个数据进行操作

select mark+5 from dbo.TScore where mark<60

2. 逻辑运算符 and or not

NOT:和其他操作符一起使用,取反的操作

AND:组合两个条件,并在两个条件都为TRUE时取值为TRUE

OR:组合两个条件,并在两个条件之一为TRUE时取值为TRUE

3. 通配符

'_' :表示任何单个字符

sname LIKE '_cc' 查找以cc结尾的所有三个字母名字

% :任意长度的字符串

sname LIKE '%CC%'查找所有包含cc的名字

[]:括号中所指定范围内的一个字符例如sname LIKE '[c-p]ion'将查找Ion结尾且以介于    c 与p之间的任何单个字符开始的名字

通配符经常与LIKE关键字一起配合使用完成模糊查询,可以使用LIKE和通配符来完成对表的一些特殊约束。

3. 数据查询

3.1. 使用select语句查询数据

3.1.1. 指定列查询

查询所有行

select * from dbo.TStudent

使用where子句指定行

select Sname,sex,Email from dbo.TStudent where Sname='田育朋'

 

3.1.2. 过滤数据

使用比较操作符 =  ><>=   <=  <>

select * from dbo.TScore where mark<=60

使用字符比较符 like

% 0个或多个字符串

_ 任何单个的字符

[]在指定区域或集合内的任何单个字符

[^]不在指定区域或集合内的任何单个字符

select*from dbo.TStudent where sname like'高%'

select*from dbo.TStudent where sname like'_[明,育]_'

select*from dbo.TStudent where sname like'_[^明,育]_'

3.1.3. 使用逻辑操作符

OR AND NOT使用方法

select*from dbo.TStudent where Sname like'高%'and sex='男'or StudentID='0000000112'

查找不姓高的学生

select*from dbo.TStudent where Sname not like'高%'

3.1.4. 查找在一定范围的值

select*from dbo.TScore where mark between 70 and 80

等价于

select*from dbo.TScore where mark>=70 and mark<=80

不包括70 和80

尽量使用between而不使用and和比较操作符表示的表达式

如果想返回不在指定区域的行时,使用not between 。这样会降低数据查询的速度。

select*from dbo.TScore where mark not between 70 and 80

指定时间范围

select * from dbo.TStudent where Birthday between'1983-01-01'and'1984-01-01'

3.1.5. 查询空值

insert dbo.TStudent (StudentID,Sname,sex)values('0000001901','陈英宏','男')

查找班级不为空的学生

select * from dbo.TStudent where Class is not null

查找班级为空的学生

select * from dbo.TStudent where Class is null

使用is not null来查询指定列中非空的行

3.2. 格式化结果集

3.2.1. 给数据排序

select StudentID,subJectID,mark from dbo.TScore order by 2,3 desc

select StudentID,subJectID,mark from dbo.TScore order by subJectID,mark desc

asc升序

desc降序

3.2.2. 消除重复的行

distinct

select distinct Class from dbo.TStudent

3.2.3. 改变字段的名字

select StudentID as'学号',Sname as'姓名',sex as'性别',cardID as'×××号',Birthday as'生日',Email as'邮件', Class as'专业',enterTime as'录入时间'from dbo.Tstudent

等价于

select StudentID '学号',Sname '姓名',sex '性别',cardID  '×××号',

Birthday  '生日',Email '邮件', Class  '专业',enterTime  '录入时间'from dbo.TStudent

3.2.4. 使用符号

符号可能是字母,数字或标识,在结果集中,他们被用作特定的值,以增加结果集的可读性。

select StudentID'学号',Sname'姓名',sex'性别','性别'from dbo.Tstudent

3.2.5. 计算列

年龄是计算列

select StudentID as'学号',Sname as'姓名',sex as'性别',cardID as'×××号',Birthday as'生日',Email as'邮件', Class as'专业',enterTime as'录入时间',Datediff(yy,Birthday,getdate())as'年龄'from dbo.TStudent

3.3. 使用T-SQL语句实现多表查询

前面查询都是基于单个数据库表的查询,如果一个查询需要对多个表进行操作,就成为连接查询,连接查询的结果集或结果称为表之间的连接。

表连接的类型:

内连接、外连接、交叉连接

创建多表查询的练习环境

--创建学生表 student

Createtable student

(

studentid int,

sname nvarchar(10),

sex nchar(1)

)

--插入学生

insert student values(1,'华荣','女')

insert student values(2,'王景正','男')

insert student values(3,'郭淑丽','女')

insert student values(4,'韩旭','女')

insert student values(5,'孟小飞','男')

--创建成绩表

createtable score

(

studentid int,

subjectname nvarchar(20),

score decimal

)

--插入成绩

insert score values(1,'英语',89)

insert score values(1,'数学',59)

insert score values(2,'英语',79)

insert score values(2,'数学',86)

insert score values(3,'英语',57)

insert score values(3,'数学',67)

insert score values(6,'英语',88)

insert score values(6,'数学',83)

1. 查询所有学生的成绩

select a.*,b.* from student a join score b on a.studentid=b.studentid

 

select sname,subjectname,score from student a join score b on a.studentid=b.studentid

 

select a.studentid,sname,subjectname,score from student a join score b on a.studentid=b.studentid

2. 从多个表中合并数据

使用内连接

select a.*,b.*from student a join score b on a.studentid=b.studentid

等价于

select a.*,b.*from student a inner join score b on a.studentid=b.studentid

 

使用外连接

左外连接

 

select a.studentid,sname,subjectname,score from dbo.student a leftjoin dbo.score b on a.studentid=b.studentid

 

右外连接

select a.*,b.*from  dbo.student a rightjoin dbo.score b on a.studentid=b.studentid

练习:

1.查找不及格同学姓名和学科分数

select sname,subjectname,score from dbo.student a join dbo.score b on a.studentid=b.studentid where score<60

自连接

查找到重名的学生

insert student values(6,'韩旭','男')

select a.*,b.* from dbo.student a join dbo.student b on a.sname=b.sname where a.studentid<>b.studentid

3.4. 数据分组和汇总

3.4.1. 用TOP  n列出前n个记录

结合Order by找出满足条件的前几条记录

1. 年龄最大的前5名学生

select top 5 * from dbo.TStudent order by Birthday

2. 年龄最小的前5名学生

select top 5 * from dbo.TStudent order by Birthday desc

查找网络班年龄最小的前5名学生

select top 5 * from dbo.Tstudent where Class='网络班'orderby Birthday desc

 

3.4.2. 使用聚集函数

可以在Select 语句中单独使用聚集函数,也可以与语句group by联合使用

除了count(*)函数,如果没有满足where子句的记录,则所有的聚集函数都将返回空值,Count(*)返回0

Count(*)Count(列)Sum  Min max Avg

统计表中有多少行

select count(*) from dbo.TStudent

插入一条没有班级的记录

insert dbo.TStudent (studentID,Sname,sex)values('0000001901','王敬正','男')

select count(Class) from dbo.TStudent

求平均值

select avg(mark) from dbo.TScore

求最大值和最小值

select max(mark)from dbo.TScore

select min(mark)from dbo.TScore

求总和

select sum(mark)from dbo.TScore

3.4.3. 使用GROUP BY基础

如果使用聚集函数,则将对表中的所有记录的某个字段进行汇总,然后生成单个的值。如果想生成多个汇总值,同时使用聚集函数和group by 语句,联合使用having和group by子句能够使结果集只包含满足条件的记录。

联合使用group by子句与having子句

分组汇总

1. 统计每个班有多少个学生

select Class,count(*)from dbo.TStudent groupby Class

2. 统计男生女生数量

select sex,count(*) from dbo.TStudent group by  sex

3. 统计每科平均分

selectsubJectName,avg(mark)fromdbo.TSubjectajoindbo.TScorebona.subJectID=b.subJectID

groupbysubJectName

4. 统计每个学生的平均分

selecta.StudentID,avg(mark)fromdbo.TStudentajoindbo.TScorebona.StudentID=b.StudentID

groupbya.StudentIDorderbyavg(mark)

5. 查找平均分大于95的学生

selecta.StudentID,avg(mark)fromdbo.TStudentajoindbo.TScorebona.StudentID=b.StudentID

groupbya.StudentIDhavingavg(mark)>95

Having相当于条件

 

4. 数据修改

4.1. 插入数据

insert dbo.TStudent values('0000001902','李维伟','男','132302197506055634','1984-3-4','liweiwei@bdqn.com','网络班',getdate())

4.2. 插入部分数据

插入学生学号 ;姓名性别其他列为空

insert dbo.TStudent (StudentID,sex,Sname)values('0000001903','男','张国强')

4.3. 将查询记录插创建的新表

使用SELECT  INTO创建表。

将学生表中开发班的从学生查询到一个新表

select StudentID,Sname,sex,Email into TDe from dbo.TStudent where Class='开发班'

4.4. 删除数据

删除学号是0000000020的学生

delete dbo.TStudent where StudentID='0000000020'

删除1982年以前出生的学生

deletedbo.TStudentwhereBirthday<'1982-1-1'andclass='网络班'

更新数据

更改学生学号是0000000569的学生姓名为张海明性别改成男

updatedbo.TStudentsetSname='张海明',sex='男'wherestudentid='0000000569'

5. 事物的概念

执行事物的语法:

开始事物: BEGIN TRANSACTioN

提交事物: COMMIT TRANSACTION

回滚撤销事物:ROLLBACK TRANSACTION

事物应用案例

创建表

CREATETABLEdbo.bank (

customerNamechar(10)NOTNULL,

currentMoneymoneyNOTNULL

)

为bank表的currentMoneymoney创建check约束,currentMoney的账户余额不能少于1元

 

插入记录

insertintobank(customerName,currentMoney)values ('张三',1000)

 

insertintobank(customerName,currentMoney)values ('李四',1)

 

select*frombank

 

updatebanksetcurrentMoney=currentMoney-1000 wherecustomerName='张三'

 

updatebanksetcurrentMoney=currentMoney-1000 wherecustomerName='李四'

 

select*frombank

执行以上命令后李四账户增加了1000,但是张三账户余额仍然是1000,这样的转账结果肯定是不可取,我们可以通过以下方法来解决。

首先转账过程就是一个事物,它需要两条UPDATE语句来完成,这两条语句是一个整体。如果其中任何一条出现错误,则整个转账业务也应该取消,两个账户的余额应该恢复到原来的状态。

通过以下语句来解决上述转账的问题

 

print'查看转帐事务前的余额'select*frombank

go

begintransaction

 

declare@errorSumint

set@errorSum=0

updatebanksetcurrentMoney=currentMoney-1000 wherecustomerName='张三'

set@errorSum=@errorSum+@@ERROR

updatebanksetcurrentMoney=currentMoney+1000 wherecustomerName='李四'

set@errorSum=@errorSum+@@ERROR

print'查看转帐事务前的余额'select*frombank

 

if@errorSum<>0

begin

print'交易失败,回滚事务'

rollbacktransaction

end

else

begin

print'交易成功,提交事务,写入硬盘,永久的保存'

committransaction

end

go

print'查看转帐事务前的余额'select*frombank

在事物处理过程中使用@@ERROR全局变量来,检查判断当前T-SQL语句执行是否有错误。如果有错误则返回非零值,而@errorSum变量用来累计两个UPDATE命令执行之后@@ERROR的值,只要其中一条UPDATE语句有错误@errorSum的值将不再为零。

 sqlserver数据库的sql语句使用

sqlserver数据库的sql语句使用 

如果将转账余额修改成500

sqlserver数据库的sql语句使用 

 

 

 

 

 

 

 

 

 

 


您可能感兴趣的文档:

--结束END--

本文标题: sqlserver数据库的sql语句使用

本文链接: https://lsjlt.com/news/43468.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • sqlserver数据库的sql语句使用
                 T-SQL查询语句1. tansact-SQL编程语言美国国家标准协会(ANSI)和国际标准组织(I...
    99+
    2024-04-02
  • SQLServer数据库如何利用SQL语句使用事务
    这篇文章主要介绍“SQLServer数据库如何利用SQL语句使用事务”,在日常操作中,相信很多人在SQLServer数据库如何利用SQL语句使用事务问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2024-04-02
  • 数据库SQL语句的使用
    这篇文章主要讲解了“数据库SQL语句的使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库SQL语句的使用”吧!1、创建数据库 create ...
    99+
    2024-04-02
  • HTML5数据库的SQL语句怎么使用
    这篇文章主要介绍“HTML5数据库的SQL语句怎么使用”,在日常操作中,相信很多人在HTML5数据库的SQL语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTML...
    99+
    2024-04-02
  • MySQL 数据库SQL语句---DDL语句
    SQL语句---DDL语句==============================================================================概述:=========...
    99+
    2024-04-02
  • MySQL数据库常用SQL语句
    在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑。减少程序与数据库的交互次数,有利于数据库高可用性,同时也能显得你的SQL很牛B,让同事们眼前一亮。实用的SQL1.插入或替换如果我们...
    99+
    2024-04-02
  • 数据库sql create table语句怎么使用
    CREATE TABLE是用于在数据库中创建一个新表的SQL语句。 基本语法如下: CREATE TABLE 表名 ( 列名1 数据...
    99+
    2024-04-09
    数据库
  • 数据库常用的sql语句大全-
    前言 本片博客使用mysql数据库进行数据操作,使用Navicat for mysql 这个IDE进行可视化操作。每个SQL语句都是亲身实验验证的,并且经过自己的思考的。能够保证sql语句的可运行性。 sql语句的命令不区分大小写,但储存...
    99+
    2015-12-25
    数据库常用的sql语句大全-
  • 【数据库】SQL 语句合集
    博客推行版本更新,成果积累制度,已经写过的博客还会再次更新,不断地琢磨,高质量高数量都是要追求的,工匠精神是学习必不可少的精神。因此,大家有何建议欢迎在评论区踊跃发言,你们的支持是我最大的动力,你们敢投,...
    99+
    2016-01-08
    【数据库】SQL 语句合集
  • 几条数据库Sql语句
    (1)同一张表中可能存在多辆车的皮重记录,想更新最早的一条记录,即更新其皮重。在sqlite3中,如下:update  CarNoTable set Tar...
    99+
    2024-04-02
  • SQL数据库语句大全
    目录基础创建数据库删除数据库备份sql server创建 备份数据的 device开始 备份创建新表根据已有的表创建新表:删除新表增加一个列添加主键删除主键创建索引删除索引创建视图删...
    99+
    2024-04-02
  • 使用SQL语句备份并压缩数据库
    要备份并压缩数据库,您可以使用以下SQL语句:1. 创建备份数据库的脚本:```sqlBACKUP DATABASE [YourDa...
    99+
    2023-09-22
    SQL
  • SQL 数据库T-SQL语句查询
             SQL 数据库T-SQL语句查询附加数据库的数据文件查询表中种类是水果的出厂日期在201-04-01之后的查询所有种类的总成本以倒序的方式...
    99+
    2024-04-02
  • 如何利用C#通过sql语句操作Sqlserver数据库教程
    目录必要准备SQL语句编写加执行编写执行创建执行器ExecuteNonQuery()方式执行二者区别  ExecuteReader()方式执行实例:1-创建一张数...
    99+
    2022-11-13
    c# sql语句 c#操作sqlserver数据库 c# sqlserver
  • R语言中怎么使用SQL语句读取数据库数据
    在R语言中使用SQL语句读取数据库数据,一般可以通过以下步骤实现: 首先,需要安装并加载适当的R包来连接数据库。常用的包包括DB...
    99+
    2024-04-24
    r语言 数据库
  • SQL Server数据库的T-SQL查询语句
    一、SQL简介 在进行数据管理时,使用SSMS进行数据维护有可视化、方便的优点,但是在批量维护或重复维护数据时,每次都需要使用SSMS不但不方便,而且容易出错。通过编写SQL语句来维护数据库便于解决重复或批...
    99+
    2024-04-02
  • MySQL数据库中高阶SQL语句的使用示例
    这篇文章主要介绍了MySQL数据库中高阶SQL语句的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、准备工作1、安装MySQL数据...
    99+
    2024-04-02
  • 数据库常用的sql语句有哪些
    这篇文章主要为大家展示了“数据库常用的sql语句有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“数据库常用的sql语句有哪些”这篇文章吧。SQL是目前使用最...
    99+
    2024-04-02
  • SQLServer在T-SQL语句中使用变量
    变量的种类 在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable) 全局变量是由系统定义的,在整个SQL Serv...
    99+
    2024-04-02
  • 使用SQL语句创建数据库与创建表
    前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个...
    99+
    2023-09-29
    数据库 sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作