300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > SQL Server数据库的T-SQL查询语句

SQL Server数据库的T-SQL查询语句

时间:2019-02-04 13:26:05

相关推荐

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','/9/24',8000);insert into 学生统计表 (姓名,性别,身份证号码,出生日期,学费) values ('马三','男','333333333333333333','/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','/05/06'),('芹菜','蔬菜','1.0','/04/01'),('番茄','蔬菜','2.9','/04/01'),('黄瓜','蔬菜','2.2','/05/09'),('香蕉','水果','6.1','/05/23'),('核桃','坚果','28.5','/06/02'),('开心果','坚果','38.11','/06/21'),('蓝莓','水果','50.2','/05/15');<!--也可以通过下面语句格式插入数据-->insert into products values ('西瓜','水果','4.1','/05/06');insert into products values ('芹菜','蔬菜','1.0','/04/01');insert into products values ('番茄','蔬菜','2.9','/04/01');insert into products values ('黄瓜','蔬菜','2.2','/05/09');insert into products values ('香蕉','水果','6.1','/05/23');insert into products values ('核桃','坚果','28.5','/06/02');insert into products values ('开心果','坚果','38.11','/06/21');insert into products values ('蓝莓','水果','50.2','/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;

———————— 本文至此结束,感谢阅读 ————————

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。