SQL Server数据库的T-SQL查询语句
一、SQL简介
在进行数据管理时,使用SSMS进行数据维护有可视化、方便的优点,但是在批量维护或重复维护数据时,每次都需要使用SSMS不但不方便,而且容易出错。通过编写SQL语句来维护数据库便于解决重复或批量维护数据的难题。
1、SQL和T-SQL
SQL是Structured Query Language的缩写,即结构化查询语言。SQL广泛地被采用说明了它的优势,它使全部用户,包括应用程序员、数据库管理员和终端用户受益匪浅。
1)非过程化语言
SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航功能。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集。所有SQL语句可以接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的输出作为另一条SQL语句的输入。
2)统一的语言
SQL可用于所有用户的数据库活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其他类型的终端用户。SQL为许多任务提供了命令,包括:
- 查询数据;
- 在表中插入、修改和删除记录;
- 建立、修改和删除数据对象;
- 控制对数据和数据对象的存取;
- 保证数据库一致性和完整性;
2、T-SQL的组成
T-SQL语言主要由以下几部分组成:
数据操纵语言:用来查询、插入、删除和修改数据库中的数据,如select、insert、update、delete;
数据定义语言:用来建立数据库、数据库对象和定义其列,大部分是以CREATE开头的命令,如CREATE、ALTER、DROP;
- 数据控制语言(Data Control Language,DCL):用来控制数据库组件的存取许可,存取权限等,如GRANT、REVOKE;
二、使用T-SQL语句操作数据表
在SQL Server Management中对表数据进行插入、更新或删除比较简单,除此之外,也可以使用T-SQL语句实现对表数据的插入、更新或删除等操作。
1、插入数据
使用INSERT语句将数据插入表中
INSERT [INTO] <表名> [列名] VALUES <值列表>
其中:
- [INTO]是可选的,可以省略;
- 表名是必需的,而表的列名是可选的,如果省略,<值列表>中顺序与数据表中字段顺序保存一致;
- 多个列名和多个值列表用逗号分隔;
在插入数据的时候,需要注意以下事项:
每次插入一整行数据,不可能只插入半行或几列数据;
数据值的数目必须与列数相同,每个数据值的数据类型,精度和小数位数也必须与相应的列匹配;
INSERT语句不能为标识列指定值,因为它的值是自动增长的;
对于字符类型的列,当插入数据的时候,需要使用单引号;
如果在设计表的时候指定某列不允许为空,则该列必须插入数据,否则将报告错误信息;
插入的数据项要求符合CHECK约束的要求;
- 尽管可以不指定列名,但是应养成好习惯,明确指定插入的列和对应的值;
1)创建数据库,切换数据库,创建表
create database benet; <!--创建benet数据库-->
use benet; <!--切换到benet数据库-->
create table 学生统计表 ( <!--创建学生统计表-->编号 int identity (1,1) not null,姓名 nvarchar(3) not null,性别 nvarchar(2) not null,年龄 varchar (3) null,身份证号码 varchar(18) primary key,出生日期 datetime not null,意向科目 nvarchar(5) null,学费 money not null check(学费 >=0 and 学费 <=10000),
);
select * from 学生统计表; <!--查看表结构-->
2)学生统计表中插入数据
<!--学生统计表中插入数据-->
insert into 学生统计表 (姓名,性别,年龄,身份证号码,出生日期,意向科目,学费) values ('张三','男','21','111111111111111111','2001/11/27','数学',7000);insert into 学生统计表 (姓名,性别,身份证号码,出生日期,学费) values ('丽丽','女','222222222222222222','2003/9/24',8000);insert into 学生统计表 (姓名,性别,身份证号码,出生日期,学费) values ('马三','男','333333333333333333','2005/08/12',6500);
3)查看学生统计表
select * from 学生统计表; <!--查看表结构-->
2、更新数据
使用UPDATE语句更新表中的数据,语法如下:
UPDATE <表名> SET <列名=更新值> [WHERE <更新条件>]
其中:
- SET后面可以紧随多个数据列的更新值,不限一个;
- WHERE子句是可选的,用来限制条件。如果不限制,则整个表的所有数据行将被更新;
1)修改学生统计表中马三的年龄为37
update 学生统计表 set 年龄=37 where 姓名='马三';
2)修改学生统计表中马三的学费和意向科目
update 学生统计表 set 学费=5000,意向科目='语文' where 姓名='马三';
3、删除数据
1)使用DELETE语句删除表中的数据,DELETE语法格式如下:
DELETE FROM <表名> [WHERE <删除条件>]
示例如下:
delete from 学生统计表 where 姓名='张三'; <!--删除学生统计表中张三的记录-->
2)使用DELETE语句删除表中所有记录,语法格式如下:
DELETE FROM <表名>
示例如下:
delete from 学生统计表; <!--删除学生统计表中所有记录-->
3)使用Truncate Table语句删除表中的数据
Truncate Table语句用来删除表中的所有行,功能上类似于没有WHERE子句的DELETE语句,Truncate Table语法格式如下:
Truncate Table <表名>
示例如下:
Truncate Table 学生统计表; <!--删除学生统计表中的所有记录行-->
Truncate Table语句于DELETE语句的区别如下:
Truncate Table语句不带WHERE子句,只能将整个表数据清空。而DELETE语句可以带WHERE子句,允许按条件删除某些记录;
Truncate Table语句不记录事务日志,而DELETE语句无论删除多少记录,都会每删除一行就记录一条事务日志。所以使用Truncate Table语句删除数据后是无法通过事务日志恢复的;
Truncate Table语句删除表中所有行,标识列会重置为0,而DELETE语句不会重置标识列;
- Truncate Table语句不能用于有外键约束引用的表,这种情况下,需要使用DELETE语句;
综上所述,Truncate Table语句执行速度更快,在清空大数据量表作业时,DBA常用此语句。但是在执行此语句前要确保数据可以删除,否则无法恢复。
三、使用T-SQL查询数据
SQL语言中最主要、最核心的部分是它的查询功能。查询语句用来对已经存在于数据库中的数据按照特定的组合,条件表达式或次序进行检索。数据库中的查询是使用SELECT语句来完成的。
1、SELECT语法结构
T-SQL中的查询基本格式是由SELECT子句,FROM子句和WHERE子句组成的查询块
SELECT <列名> FROM <表名> WHERE <查询限定条件>
在SQL server中,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] ]
以上各项参数说明如下:
2、表达式
表达式是符号和运算符的一种组合,并且可以对它求值得到单个数据值,简单表达式可以是一个常数、变量、列或标量函数。可以用运算符把两个或多个简单表达式连接成一个复杂表达式。
1)条件表达式
SQL Server中的表达式可以包含下列一个或多个参数:
常量:表示单个指定数据值的符号。一个常量由一个或多个字母、数字字符(字母a~z、A~Z,数字0~9)或符号(!、@、#等)组成。字母、日期和时间数据类型的常量需要用单引号括起来,二进制字符串和数字常量则不需要;
列名:表中列的名称,表达式中仅允许使用列的名称;
{一元运算符}:仅有一个操作数的运算符,其中“+”表示正数,“-”表示负数,“~”表示补救运算符;
- {二元运算符}:将两个操作数组合执行操作的运算符。二元运算符可以是算术运算符、赋值运算符(=)、位运算符、比较运算符、逻辑运算符、字符串串联(或连接)运算符(+)或一元运算符。
2)比较运算符及其含义如下表:
示例如下:
<!--查询学费大于6500的显示出来-->
select * from 学生统计表 where 学费 > 6500;
<!--查看学费大于等于8000的显示出来-->
select * from 学生统计表 where 学费 >= 8000;
<!--查看学费小于6000的显示出来-->
select * from 学生统计表 where 学费 < 6000;
<!--查看学费小于等于7000的显示出来-->
select * from 学生统计表 where 学费 <= 7000;
<!--查看学费不等于7000的学生信息-->
select * from 学生统计表 where 学费 <> 7000;
<!--查询学费在6500~8000的显示出来-->
select * from 学生统计表 where 学费 between 6500 and 8500;
<!--查询学费为8000、7500、3000的学生所有信息-->
select * from 学生统计表 where 学费 in (8000,7500,3000);
<!--查看学生统计表中年龄为空的学生所有信息-->
select * from 学生统计表 where 年龄 is null;
3)通配符及其含义如下表:
通配符经常与LIKE运算符一起配合使用完成模糊查询。可以使用LIKE和通配符来完成对表的一些特殊约束。
示例如下:
<!--查看表中姓李的所有学生-->
select * from 学生统计表 where 姓名 like '李%';
<!--查看姓李为三个字的显示出来-->
select * from 学生统计表 where 姓名 like '李__'
<!--查看姓杜为两个字的显示出来-->
select * from 学生统计表 where 姓名 like '杜_'
<!--查询学生统计表中以三结尾且介于杜与王开头的名字-->
select * from 学生统计表 where 姓名 like '[杜-王]三';
<!--查询学生统计表中以杜开头且后面不为三和六的所有名字-->
select * from 学生统计表 where 姓名 like '杜[^三六]';
4)逻辑运算符及其含义如下表:
AND和OR运算符是连接条件表达式,NOT否定条件。AND连接两个条件,并且仅当两个条件都为真时才返回True。OR也连接两个条件,但只要其中任意一个为真就返回True。
示例如下:
<!--使用and查询两个结果为真显示内容-->
select * from 学生统计表 where 姓名='丽丽' and 学费=5000;
<!--使用or查询两个结果一个满足显示内容-->
select * from 学生统计表 where 姓名='张三' or 学费=8760;
<!--显示学费不是8000的-->
select * from 学生统计表 where not 学费=8000;
3、查询结果排序
<!--查看学生统计表中的前3行数据-->
select top 3 * from 学生统计表;
<!--查询学生统计表,姓名和身份证号码,查询结果为name和idcard-->
select 姓名 as name,身份证号码 as idcard from 学生统计表;
<!--查询学生统计表中所有信息,将学费从高到低显示出来-->
select * from 学生统计表 order by 学费 desc;
<!--查询学生统计表中所有信息,将学费从低到高显示出来-->
select * from 学生统计表 order by 学费 asc;
<!--去除重复列数据-->
select distinct 意向科目 from 学生统计表;
四、使用SELECT生成新数据
SELECT不仅仅只能查询,结合INTO关键字或将SELECT作为INSERT的子句,都可以实现生成新数据的功能。
1、SELECT使用INTO关键字
SELECT使用INTO关键字可以从一个表中选择一些数据插入新表中
<!--将查询的数据显示在新的new1表中-->
select * into new1 from 学生统计表;
2、INSERT使用SELECT子句
通过将SELECT作为INSERT的子句,也可以将现有表中的数据添加到新表中,与上一个方法不同的是,这个新表需要事先创建好,并且具有SELECT子句查询结果对应的列,查询结果对应的数据个数、顺序和数据类型也要保持一致。
示例如下:
insert into new2 (姓名,性别,年龄,身份证号码) select 姓名,性别,年龄,身份证号码 from 学生统计表 where 学费>=7500
<!--将学生统计表中所有学费大于等于7500的学生的姓名,性别,
年龄和身份证号码保存到new2表中
(注意,这里的 new2表中需要提前建立)-->
3、使用UNION关键字
UNION关键字用于将多个不同的数据或查询结果合并成一个新的结果集。不同的数据或查询结果要求数据个数、顺序、数据类型都一致。
insert into new2 (姓名,性别,年龄,身份证号码)
select '娟娟','女','31','444444444444444444');
select '杜五','男','27','555555555555555555');
select '李二的','男','18','666666666666666666');
select 姓名,性别,年龄,身份证号码 from 学生统计表
<!--将学生统计表中所有学生的姓名,性别,年龄,身份证号码,
以及新输入的3名学生的相关信息,一起保存到新表new2-->
五、T-SQL语句单表查询案例
1、创建products表
<!--用T-SQL语句创建表products,指定“编号”列为主键列和标识列-->
create table products
( 编号 int identity (1,1) primary key,名称 nvarchar(10) not null,种类 nvarchar(10) not null,成本 money not null check (成本 >=0 and 成本 <=60),出厂日期 date not null,
);
insert into products values <!--用insert into语句一次性插入数据-->
('西瓜','水果','4.1','2017/05/06'),
('芹菜','蔬菜','1.0','2017/04/01'),
('番茄','蔬菜','2.9','2017/04/01'),
('黄瓜','蔬菜','2.2','2017/05/09'),
('香蕉','水果','6.1','2017/05/23'),
('核桃','坚果','28.5','2017/06/02'),
('开心果','坚果','38.11','2017/06/21'),
('蓝莓','水果','50.2','2017/05/15');<!--也可以通过下面语句格式插入数据-->
insert into products values ('西瓜','水果','4.1','2017/05/06');
insert into products values ('芹菜','蔬菜','1.0','2017/04/01');
insert into products values ('番茄','蔬菜','2.9','2017/04/01');
insert into products values ('黄瓜','蔬菜','2.2','2017/05/09');
insert into products values ('香蕉','水果','6.1','2017/05/23');
insert into products values ('核桃','坚果','28.5','2017/06/02');
insert into products values ('开心果','坚果','38.11','2017/06/21');
insert into products values ('蓝莓','水果','50.2','2017/05/15');
select * from products; <!--使用select语句验证结果-->
2、多表查询示例
1)查询成本低于10元的水果信息
select * from products where 成本 < 10;
2)将所有蔬菜的成本上调1元
update products set 成本=成本 +1 where 种类='蔬菜';
select * from products where 种类='蔬菜';
3)查询成本大于3元并小于40元的产品信息,并按照成本从高到低的顺序显示结果
select * from products where 成本 > 3 and 成本 < 40 order by 成本 desc;
4)查询成本最高的5个产品信息
select * from products where 成本 in (4.1,6.1,28.5,38.11,50.2);
5)查询有哪些产品种类
select distinct 种类 from products;
6)将products表中所有水果的名称、种类和出厂日期信息并插入新表products_new中
select 名称,种类,出厂日期 into products_new from products;
select * from products_new;
———————— 本文至此结束,感谢阅读 ————————
SQL Server数据库的T-SQL查询语句相关推荐
- 怎么从 SQL Server 数据库中导出 SQL 语句?
同于直接/备份/恢复 或者 导入/导出 数据库操作. 新版本SQL Server客户端中还可以生成相对应的SQL语句. 非常方便与查看和与其他人共享. 操作步骤如下: 连接上数据库后, 右击数据库, ...
- 利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法)
利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法) 安装好Navicat Premium,SQL Serve ...
- infomixdb mysql_不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句
在不同数据库中的使用的分页查询语句: 当前页:currentpage 页大小:pagesize 1. Oracle数据库 select * from (select A.*,rownum rn fro ...
- python3连接sql server数据库_Python3操作SQL Server数据库(实例讲解)
1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...
- SQL server数据库与My sql数据库的区别?
在我们生活中无时无刻不需要使用到数据库,网络爬虫等一系列用处,那数据库到底是什么呢?我们一起接着往下看 数据库是存放数据的仓库.存储空间很大,可千万条.上亿条数据.但是数据库并不是随意地将数据进行存放 ...
- SQL Server数据库中使用sql脚本删除指定表的列
在SQL Server数据库中删除某一列,使用数据库管理工具直接可视化操作是很简单的,但是如果要用sql脚本呢?可能你会说很简单,直接用 ALTER TABLE [要删除的字段所在的表名] DROP ...
- SQL Server 数据库之注册 SQL Server 服务器
注册 SQL Server 服务器 1. 概述 2. 服务器组的创建与删除 3. 服务器的注册与删除 3.1 服务器的注册 3.2 服务器的删除 1. 概述 SQL Server 数据库 允许用户创建 ...
- SQL Server数据库的T-SQL高级查询
一.查询使用的函数 请自行创建数据库和表,表中插入数据,我的样例如下: create database accp; <!--创建accp数据库--> use accp; <!--切换 ...
- SQL Server 数据库之单表查询
单表查询 1. 概述 2. 单表查询命令 2. 无条件查询与条件查询 2.1 无条件查询 2.2 条件查询 3. 聚集函数 4. 分组查询 5. 排序查询 1. 概述 单表查询是只对一个数据表进行查询 ...
- sql server 2005 学习心得(select查询语句用法)
select * from userInfo where age like '2[25]' 功能:查询userInfo表中age字段,所有以2开头,且第二位是2或5的记录. select * from ...
最新文章
- Python学习教程(Python学习路线):Python面试100题(二)
- 审批流程展示html,Web企业在线审批流程系统
- iOS 静态度制作方法详细
- 为什么大家都只谈薪资,却不谈梦想?
- java ip 范围内打卡_定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
- OpenCV 入门级一
- (转)微信扫码登录网页实现原理
- 关于上篇文章的okhttp中对于onFailure回调的异常捕获
- Spring Boot,Sprint Batch 学习
- 从Face ID说起,浅析人脸识别之刷脸技术
- ThinkCMF框架修复漏洞 名称:ThinkPHP5 远程代码执行高危漏洞(CNNVD-201812-617)
- 自己动手编写CSDN博客备份工具-blogspider之源码分析(2)
- ffmpeg音频采样率转换
- HTML第一天学习总结
- linux系统如何扩展屏幕,大神教你用 autoplank 在多个显示器上使用 Plank 扩展坞
- Arduino 超级省电之休眠模式用1节18650电池工作17年
- 为什么人生下来就有意识 人脑五大未解之谜
- 第一数字定律识别数据作假
- 概率论考研笔记(三)
- 《杜拉拉升职记》第二部,一本失败的小说,一本中层管理的最佳实践手册