T-SQL语句基础-增删改查(简单的增删改查sql语句)
mhr18 2024-10-12 04:33 19 浏览 0 评论
T-SQL语句基础
一 SQL简介
通过编写SQL语句来维护数据库便于解决重复或者批量维护数据库难题;当数据库中出现大量的数据,并且数据库表之间的数据出现引用等状况时,或者要修改、插入、删除大量的数据时,使用SSMS将非常麻烦而不方便,并且容易出错,但是如果使用SQL语言来实现这些操作,将是非常容易的事情
1 SQL(结构化查询语言)
·关系数据库的标准语言
SQL Server、 Oracle、DB2
·非过程化语言
不需要指定对数据的存放方法
·统一的语言
创建、修改以及删除数据对象(数据库、表等)
2 T-SQL
·SQL的加强版, 提供了类似于程序语言的基本功能
变量说明、流程控制、功能函数
·T-SQL的组成
DML:数据操纵语言
查询、插入、删除和修改数据:SELECT、INSERT、UPDATE、DELETE
DCL:数据控制语言
建立数据库、数据库对象和定义其列:CREATE、ALTER、DROP
DDL:数据定义语言
控制数据库组件的存取许可、存取权限等:GRANT、REVOKE
二 使用T-SQL操作数据库表
1 插入数据
·INSERT 语法结构
INSERT [INTO] <表名> [列名] VALUES <值列表>
·参数解释
·[INTO]是可选的
·<表名>是必需的
·<列名>是可选的
·如果省略<列名>,<值列表>与表中字段的顺序保持一致
·多个列名和多个值列表用逗号分隔
·注意事项
·每次插入一整行数据,不可能只插入半行或者几列数据。
·数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的列匹配。
·Insert语句不能为标识符列指定值,因为它的值是自动增长的
·对于字符类型的列,当插入数据的时候,用单引号将其引起来。
·如果在设计表的时候指定某列不允许为空,则该列必须插入数据,否则将报告错误信息。
·插入的数据项要求符合检查约束的要求。
·尽管可以不指定列名,但是应养成好习惯,明确指定插入的列和对应的值
·示例(整数类型的值可以不用单引号,其他值需要加单引号)
右击选择需要插入数据的表选择“编辑前200行”,然后点击左上角的“新建查询”,用鼠标拖动新建查询的标题栏选择“新建水平选项卡组”,方便编辑
选择表所在的数据库,然后在查询窗口中输入插入语句,全选后点击“执行”,便可插入数据(也可以单击“√”检查语法错误)
2 更新数据
·UPDATE语法结构
UPDATE <表名> SET <列名 = 更新值> [WHERE <更新条件>]
·参数解释
SET后面可以紧随多个数据列的更新值
WHERE子句是可选的,用来限制条件
如果省略WHERE字句,表中所有数据行将被更新
·示例
修改”lisi”的“age”为25和”class”为2,执行语句:
update student set age='25',class='2' where name='lisi'
3 删除数据
1)DELETE语句(可以删除指定行和整个表记录)
·DELETE语法结构
DELETE FROM <表名> [WHERE <删除条件>]
·参数解释
Delete…From…是删除整条记录,不会只删除单个字段,所以在Delete后不能出现字段名
WHERE子句是可选的,用来限制删除条件
如果省略WHERE字句,表中所有数据行将被删除
·示例
Delete from student where name=’lisi’//删除lisi这一行内容
2)Truncate Table语句(只能删除表中的所有记录)
·Truncate Table语法结构
Truncate table <表名>
·示例
Truncate table student//删除student表中所有记录
3) Delete和Truncate table区别
·Delete:使用where子句按条件删除、数据可以恢复、不会重置标示符、可以用于含有外键约束的表
·Truncate table:只能清空整个表、数据无法恢复、重置标识符列为0、不能用于含有外键约束的表、执行速度更快,用于清空大数据量表,在执行Truncate Table前要确保数据可删除
4查询数据
·SQL语言中最主要、最核心的部分是它的查询功能。查询语言用来对已经存在于数据库中的数据按照特定的组合、条件表达式或次序进行检索。数据库中的查询是使用Select语句来完成的。
·T-SQL中的查询基本结构:由SELECT子句(想要查看什么)、FROM子句(从哪查看)和WHERE子句(条件)组成;
1)Select语句
·Select语法结构:
SELECT select_list
[INTO new_table_name]
FROM table_name
[ WHERE search_conditions ]
[GROUP BY group_by_expression] [HAVING search_conditions]
[ORDER BY order_expression [ASC|DESC] ]
·参数解释
SELECT子句:指定查询内容(列名,多个列名用逗号隔开,*号代表所有列)
INTO子句:把查询结果存放到一个新表中
FROM子句:指定查询源(表名)
WHERE子句:查询条件
GROUP BY子句:指定查询结果的分组条件
HAVING子句:指定分组搜索条件,与GROUP BY子句一起使用
ORDER BY子句:指定查询结果的排序方式
·表达式
表达式是符号和运算符的一种组合,并且可以对它求值得到单个数据值。简单表达式可以是一个常数、变量、列或标量函数,可以用运算符把两个或多个简单表达式连接成一个复杂表达式
A)条件表达式
常量:表示单个指定数据值的符号(字母、数字或符号)字母和日期数据类型的常量需要用单引号括起来,而二进制字符串和数字常量则不需要
列名:表中列的名称
一元运算符:仅有一个操作数的运算符(“+”表示正数,“-”表示负数,“~”表示补数运算符)
二元运算符:将两个操作数组合执行操作的运算符(算术运算符、赋值运算符(=)、位运算符、逻辑运算符、比较运算符、字符串串联运算符(+))
比较运算符
条件表达式举例:
PRICE > 20,表示满足大于20的PRICE值
PRICE <> 20,表示满足不等于20的PRICE值
PRICE Between 10 And 20,表示满足大于等于10并且小于等于20的PRICE值
NAME Like '李%',表示满足NAME姓名字段里姓李的所有姓名
通配符
B)逻辑表达式
·用逻辑运算符(and、or、not)将条件连接起来,运算结果是一个逻辑值(TRUE或FALSE)
逻辑运算符
逻辑表达式举例:付款方式为信用卡,并且只能是A卡、B卡或C卡
付款方式=’信用卡’and 信用卡 in (’A卡’,’B卡’,’C卡’)
2)查询举例
A)查询student表中所有学生的所有信息
Select * from student
B)查询student表中所有学生的指定信息
Select 姓名,班级,成绩 from student
C)查询student表中的指定信息
查询李四的所有信息
Select * from student where 姓名=’李四’
只查询student李四的成绩信息
Select 成绩 from student where 姓名=’李四’
查询student表中成绩在90到100之间的学生所有信息
Select * from student where 成绩 between 90 and 100
查询student表中成绩低于90或者高于95的学生所有信息
Select * from student where 成绩<90 or 成绩>95
查询student表中成绩为89、90或91的学生所有信息
Select * from student where 成绩 in (89,90,91)
查询student表中姓刘的学生所有信息
Select * from student where 姓名 like ‘刘%’
查询student表中2班的名字叫’刘婷’的学生信息
Select * from student where 姓名=’刘婷’ and 班级=2
查询student表中备注不为空的学生所有信息
Select * from student where 备注 is not null
D)查询student表中前10行的信息
Select top 10 * from student
语法结构:SELECT TOP n select_list FROM table_name
参数解释:TOP关键字用来限制查询返回的行数,n为需要返回的行数
E)改变查询结果的显示名称
语法结构:SELECT column_name AS column_alias FROM table_name
参数解释:AS子句用来改变结果集列的名称(可以省略)
Select 姓名 as name,成绩 as chengji from student
F)查询结果排序
语法结构:SELECT * FROM student ORDER BY 成绩 [ASC|DESC]
参数解释:asc 升序,desc 降序
Select * from student order by 成绩 asc(可省略asc)默认按降序排列
D)分组查询
将表中的数据按照一定条件分类组合,再根据需要得到的统计信息;通过group by语句实现;还可以对分组结果进行筛选,只显示满足限定条件的组,使用having语句实现
语法结构:
SELECT 列名或聚合函数 FROM student GROUP BY 列名 HAVING 条件
参数解释:“列名或聚合函数”中列名必须是group指定的列名;GROUP BY对查询结果进行分组,指定要分组的列名;HAVING指定分组搜索条件
聚合函数:用于对一组值执行计算,并返回单个值,如求和、平均值、最大或最小值等
SUM: 求总和;只能用于数字类型的列
AVG: 求平均值;只能用于数字类型的列
MAX、MIN:求最大或最小值;用于数字型、字符型、日期时间等
COUNT:求非空行数,用于数字和字符类型的列
示例
查询表中所有学生的总成绩
Select sum(成绩) as 总成绩 from student
查询表中所有学生的平均成绩
Select avg(成绩) 平均成绩 from student
查询表中所有学生中的最高分和最低分
Select max(成绩) 最高分,min(成绩) 最低分 from student
查询表中的行数
Select count(*) 总行数 from student
WHERE子句和 HAVING子句的区别
·WHERE在分组之前过滤数据,条件中不能包含聚合函数,一般用于from之后
·HAVING在分组之后过滤数据,条件中经常包含聚合函数,一般用于group by之后
示例
查询表中每个班的总成绩
Select 班级,sum(成绩) as 总成绩 from student group by 班级
查询表中总成绩大于200的班级
Select 班级,sum(成绩) as 总成绩 from student group by 班级 having sum(成绩)>200
G)经过筛选插入数据到另一新表
语法结构:SELECT * INTO new_table_name FROM table_name
参数解释:INTO把一个表中的数据经过筛选另存到新表中,新表不存在
示例:
将A表数据插入到新表B(新表不能存在,会新建)
Select * into A from B
将student表中2班的学生信息保存到表student-2中
Select * into student-2 from student where 班级=2(执行完命名后刷新)
3)多表查询
·如果一个查询需要对多个表进行操作,就成为连接查询;通过各个表之间共同列的关联来查询数据
·表连接类型
内连接:两个表中分别指定一列,进行对比,有相同的字段的这一行对其显示出来,否则不显示;类似于A∩B
示例:查询两个表中名字相同的学生所有信息
Class2 Student
select student.*,class2.* from student,class2 where student.姓名=class2.姓名
或
Select student.*,class.* from student inner join class on姓名=class2.姓名
外连接:根据连接查询的两个数据集合按照其出现位置的不同,可以将两个表分别定义为左侧表(左表)和右侧表(右表)
·左外连接:两个表中分别指定一列,进行对比,有相同字段的这一行与左表所有行对其显示,不相同的则显示为空;类似于A+A∩B
示例:查询左表所有学生信息并查询右表中与左表名字相同的学生所有信息
select student.*,class2.* from student left join class2 on student.姓名=class2.姓名
·右外连接:两个表中分别指定一列,进行对比,有相同字段的这一行与右表所有行对其显示,不相同的则显示为空;类似于类似于A∩B+B
示例:查询右表所有学生信息并查询左表中与右表名字相同的学生所有信息
select student.*,class2.* from student right join class2 on student.姓名=class2.姓名
·完整外连接:两个表中分别指定一列,进行对比,有相同的字段的这一行对其显示出来,如果左表中没有右表匹配字段,则左表依然显示,右表则对应空值,反之亦然;即两表的信息都显示,相同的对其,一方没有的,另一方显示为空;类似于A∪B
示例:
查询两个表中相同
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)