基本T-SQL语句
10. 删除数据文件和文件组
<10.3>删除非空文件组:必须先删除文件组中的所有文 件,再删除该文件组! alter database bb remove file bb_data2 go
alter database bb remove filegroup f2 go
表的操作
• • • •
掌握用create语句----创建表 掌握用alter语句---修改表的结构 掌握对表中的数据进行的操作(增、删、改、查) 掌握用drop语句----删除表
1. 创建一个简单的数据库
语法格式: create database 数据库名 举例: create database aa -- 数据库名称: aa go
2. 创建一个完整的数据库
create database bb --数据库名称: bb on primary --primary 可以省略 ( name='bb', --主数据文件的逻辑名称 filename='e:\bb.mdf', --主数据文件的物理存放路径 size=1mb, --文件初始大小 maxsize=3mb, --文件最大容量 filegrowth=10% --文件增长方式(两种方式:<1>百分比,<2>兆字节) ), ( name='bb_data1', --辅助文件名称,不能与主数据文件名称相同 filename='e:\bb_data1.ndf', size=1mb, maxsize=3mb, filegrowth=10% ) log on ( name='bb_log1', --日志文件名称,不能与主数据文件、辅助文件的名称相同。 filenamee=1mb, maxsize=3mb, filegrowth=1mb ) go
7. 添加一个辅助文件
alter database 数据库名
add file (
name=‘逻辑名’,
filename=‘文件存放的路径’, size=初始大小, maxsixe=最大大小, filegrowth=增长方式
)
8. 修改数据库的属性
1>修改数据库的名称 2>修改数据库的大小------即:修改数据库中的数据文件
3. 用drop语句----删除表
语法: drop table 表名
【例】删除xs表:
drop table xs
第二节课
目标
掌握数据操作语言(DML) 插入 insert 更新 update 删除 delete 查询 select
数据操作语言DML
数据操纵语言(DML)主要语句及功能:
5. 添加一个辅助文件,并且添加到文件组中。
alter database bb add file --添加一个辅助文件:bb_data2 ( name='bb_data2', filename='e:\bb_data2.ndf', size=5mb, maxsize=12mb, filegrowth=5% ) to filegroup f2 --把辅助文件bb_data2添加到文件组f2中。 go --注意两个步骤要同时进行!
语法: alter database 数据库名 modify file ( name=‘逻辑名’, size=修改后的大小, maxsize=修改后的最大大小, filegrowth=新的增长方式 )
//用于修改MDF,NDF,LDF文件大小,修改后的大小必须大于原初始大小。若 超过原最大大小(maxsize),则maxsize会更新为修改后的大小.
from xs
where 出生日期>’1989-1-3’
注:字符型或日期型的数据要用单引号引起来
And ,or
【例】查询xs表中学号为1101且姓名为李明的相关信息 select * from xs where 姓名=’李明’ and 学号=1101
【例】查询xs表中姓名为李明或者学号为1101的相关信息 select * from xs where 姓名=’李明’ or 学号=1101
【例】:删除xs表里所有记录 truncate table xs
5. 使用Select查询表中数据
基本语法:
select 列名 from
表名
单列
【例】从学生表(xs)中查询所有学生的学号 select 学号 from xs
【例】查询课程表课程号、课程名、学分 分隔符 select 课程号,课程名, 学分 from kc 【例】查询学生表(xs)中的所有信息
9. 删除数据库
语法: Drop database 数据库名 【例】删除数据库bb drop database bb
10. 删除数据文件和文件组
<10.1>删除空文件组 语法格式: alter database 数据库名 remove filegroup 文件组名
<10.2>删除辅助文件或日志文件 语法格式: alter database 数据库名 remove file 逻辑文件名
用filegroup关键字来指定文件组, 注意:文件组只能用于辅数据文件。
在创建文件组的时候,必须为 文件组添加一个辅助文件!
4. 在已创建的数据库上添加文件组
举例: alter database bb add filegroup f2
--注意:在添加文件组的时候,不能同时向文件组中添加 辅助文件。 --两个步骤必须分开来做!!
第二次
T-SQL语句
第一节目标
• • • • 了解T-SQL语句分类 掌握用create语句创建数据库和表 掌握用alter语句修改数据库和表 掌握用drop语句删除数据库和表
T-SQL 语言分类
数据定义语言(DDL): 1.create(创建) 2.alter(修改) 3.drop(删除)(针对对象)
8.1
修改数据库名
语法: alter database 原数据库名
modify name=新数据库名 【例】将数据库aa的名字改为aa1 alter database aa modify name=aa1 注意:查询数据库信息 : sp_helpdb 数据库名
8.2
修改数据库大小
-----------修改数据库中的数据文件
1. 用create创建表
use 数据库名
create table 表名 ( 字段1 数据类型 identity(标示种子,递增量) primary key, 字段2 数据类型, 字段3 数据类型, 字段4 数据类型, 字段5 数据类型, 字段6 数据类型, … 字段n 数据类型 ) GO 注:n最大可等于1024
3.创建数据库时同时创建文件组
create database cc on primary ( name='cc', filename='e:\cc.mdf', size=1mb, maxsize=3mb, filegrowth=10% ), filegroup f1 ( name='cc_data1', filename='e:\cc_data1.ndf', size=1mb, maxsize=3mb, filegrowth=10% ) log on ( name='cc_log1', filename='e:\cc_log1.ldf', size=1mb, maxsize=3mb, filegrowth=1mb )
<1>主数据文件: 一个数据库有且只有一个 .mdf ---主数据库文件 <2>辅助数据文件: 根据需要自由选择,当数据库很大时,可以选 择多个。即:0个、1个或多个 .ndf .ldf ---辅数据库文件 ---日志数据库文件
<3>日志文件: 用于恢复数据库所需要的事务日志信息,至少1个
语法格式:
多列用逗号‚,‛
所有列用’ * ’ 代替
select
*
from
xs
当在select语句指定列的位置上使用*号时,表示选择表的所有列。
带条件where的查询
【例】查询xs表中姓名为李明的相关信息 件 select * from xs 用where指明条
where 姓名=’李明’
【例】查询xs表中出生日期在1978-3-26以后的学生 select 姓名,出生日期
go
*-* 补充相关内容:
5> 修改列名 下例将表Orders中的EmployeeID,列名改为EmpID exec sp_rename 'Orders.EmployeeID', 'EmpID', 'column' 6> 修改表名 下例将表 customers 重命名为custs exec sp_rename 'customers', 'custs‘ 7> 查看表的定义 exec sp_help Orders
2. 用alter语句---修改表的结构
3> 改变字段的数据类型 use 数据库名 alter table xs alter column 字段名 修改后的数据类型
go
4> 修改字符数据类型的长度(varchar) use 数据库名 alter table 表名 alter column 字段名 char(修改后的长度)
数据操作语言(DML) 1.insert(插入) 2.update(更新) 3.delete(删除)(针对对象的内容) 数据查询语言(DQL) 1.select(查询) 数据控制语言(DCL) 1.Revoke(撤消) 2.deny(拒绝) 3.grant(同意、授权)
T-SQL简介及基本语法
T-SQL简介及基本语法⼀、T-SQL概述SQL Server⽤于操作数据库的编程语⾔为Transaction-SQL,简称T-SQL。
T-SQL与PL/SQL不同,并没有固定的程序结构。
T-SQL包括以下4个部分:DDL:定义和管理数据库及其对象,例如create、alter和drop等。
DML:实现对数据库表各对象的操作,例如insert、update等。
DCL:数据控制语⾔,实现对数据库进⾏安全管理和权限管理等控制,例如grant、revoke、deny等。
附加的语⾔元素。
T-SQL的附加语⾔元素,包括变量、运算符、函数、注释和流程控制语句等。
在T-SQL中,命令和语句的书写是不区分⼤⼩写的。
⼆、T-SQL编程基础1、标识符①T-SQL规则标识符由字母、数字、下划线、@、#、$符号组成,其中字母可以是a-z或A-Z,也可以是来⾃其他语⾔的字母字符。
⾸字符不能为数字和$。
标识符不允许是T-SQL保留字。
标识符内不允许有空格和特殊字符长度⼩于128②界定标识符 对于不符合标识符规则的标识符,则要使⽤界定符⽅括号([])或双引号(“”)将标识符括起来。
如标识符[My Table]、“select”内分别使⽤了空格和保留字select。
2、数据类型在SQL Server中提供了多种系统数据类型。
除了系统数据类型外,还可以⾃定义数据类型。
①系统数据类型(1)精确数字数据类型int 存储整型数值,存储数值范围为-231~231-1。
bigint bigint⽐int能存储更⼤的数值,存储数值范围为-263~263-1。
smallint 数据类型的范围数值⽐int更⼩,在-215~215-1之间。
定义这种数据类型的时候⼀定要⼩⼼,要确定存储的数据不会超过smallint所能存储的数值范围。
tinyint 数据类型的范围数值⽐smallint更⼩,存储从 0 到 255 的整型数据。
decimal/numeric decimal[(p,s)]和numeric[(p,s)]这两种数据类型⽤于存储相同精度和范围的数据(⼩数点的左、右两边存储的数值位数相同),所能存储的数值范围为-1038+1~1038-1。
数据库T-SQL语言操作(T-SQL语句、数据库、表、视图、索引)
数据库T-SQL语⾔操作(T-SQL语句、数据库、表、视图、索引)T-SQL语⾔按⽤途分四部分1. 数据定义语⾔(CREATE,DROP,ALTER)2. 数据操作语⾔(INSERT,DELETE,UPDATE)3. 数据查询语⾔(SELECT)4. 数据控制语⾔(GRANT,REVOKE,DENY)数据类型1. 系统数据类型2. ⽤户⾃定义数据类型(建⽴⽅式:a.图形化⽅式 b.命令⽅式)1use TEST2EXEC sp_addtype sno,'varchar(10)','nonull'3EXEC sp_droptype sno变量命名规则:字母、下划线、@或#开头,但不能全为下划线、@或#不能为“关键字”,不能嵌⼊空格及其他特殊字符,如需使⽤则需要双引号或⽅括号括起1.局部变量:由⽤户声明,必须以@开头,只在定义该变量的过程中有效,局部变量必须先声明后使⽤注意:第⼀次声明变量时,其值设置为NULL。
局部变量不能使⽤“变量=变量值”的格式进⾏初始化,必须使⽤SELECT或SET语句来设置其初始值。
如果声明字符型的局部变量,⼀定要在变量类型中指明其最⼤长度,否则系统默认其长度为1。
若要声明多个局部变量,请在定义的第⼀个局部变量后使⽤⼀个逗号,然后指定下⼀个局部变量名称和数据类型。
1USE student2DECLARE@var1char(10),@var2int3SET@var1='number'4select@var2=cgrade5from sc6where sno='201810010'78print@var1+"s"2.全局变量:由系统定义,供SQL server系统内部使⽤的变量,任何程序任何时间都可以调⽤。
通常以“@@”开头。
T-SQL语句1.注释语句(1) --(2) /*……*/2.批处理--GO3.控制流程语句(1) begin...end语句(相当于C语⾔中的{} )(2) if...else语句(可嵌套)(3)case语句(多条件选择语句)(4)print语句(屏幕输出语句)(5)while语句(有条件的循环语句)(6)goto语句(⽆条件跳转语句)(7)break语句(8)continue语句4.常⽤函数(系统函数、⽤户⾃定义函数)⼀些系统函数:(1)字符串函数(2)数学函数(3)⽇期和时间函数(4)聚合函数注意:⽤户⾃定义函数:1.分类:标量值函数:返回单个值内联表值函数:返回可更新的表多语句表值函数:返回不可更新的表2.标量值函数命令⽅式创建1CREATE FUNCTION f2(@a real,@b real) 2RETURNS real3AS4BEGIN5IF@a>=@b6RETURN@a7RETURN@b8END910PRINT'最⼤值为'11PRINT dbo.f2(77,56)1CREATE FUNCTION f3(@n real)2RETURNS real3AS4BEGIN5DECLARE@i real,@sum real6SET@i=07SET@sum=08WHILE@i<@n9BEGIN10SET@i=@i+111SET@sum=@sum+@i12END13RETURN@sum14END1516PRINT dbo.f3(10)3.⾃定义函数的调⽤(1)标量值函数可以使⽤select、print、exec调⽤(2)表值函数只能⽤select调⽤4.删除⽅式drop function 函数名数据库数据库概述1.数据库常⽤对象:表、数据类型、视图、索引、存储过程、触发器系统数据库:master、model、tempdb、msdb2.数据库存储结构(数据库⽂件、数据库⽂件组):数据库⽂件:存放数据库数据和数据库对象的⽂件。
T-SQL语句集合及示例
《数据库应用与开发教程》书内T-SQL语句集合及示例1.创建数据库CREATE DATABASE数据库名ON PRIMARY( NAME=主数据库文件名,FILENAME=主数据库文件地址名,SIZE=主数据库文件初始大小,MAXSIZE=主数据库文件最大大小,FILEGROWTH=主数据库文件增长大小/速度)LOG ON( NAME=数据库日志文件名,FILENAME=数据库日志文件地址名,SIZE=数据库日志文件初始大小,MAXSIZE=数据库日志文件最大大小,FILEGROWTH=数据库日志文件增长大小/速度 )GO代码示例:CREATE DATABASE EXAMON PRIMARY(NAME=EMAM_DAT,FILENAME='I:\EXAM\EXAMDAT.mdf',SIZE=3mb,MAXSIZE=500mb,FILEGROWTH=1mb)LOG ON(NAME=EXAM_LOG,FILENAME='I:\EXAM\EXAMLOG.ldf',SIZE=1mb,MAXSIZE=unlimited,FILEGROWTH=10%)GO2.删除数据库基础语句:DROP DATABASE 数据库名代码示例:DROP DATABASE EXAM3.创建表基础语句:USE 数据库名 GOCREATE TABLE 表名( 列名1 数据类型 修饰条件 是否为空, 列名2 数据类型 修饰条件 是否为空, 列名3 数据类型 修饰条件 是否为空, ………… )代码示例:USE EXAM GOCREATE TABLE ADMIN( ADMINID INT PRIMARY KEY , LOGINPWD VARCHAR (50) NOT NULL, LOGINPTPE VARCHAR (10) NOT NULL )4.设置主键基础语句:ALTER TABLE 表名ADD CONSTRAINT 主键名 PRIMARY KEY (想要设置为主键的列的列名)代码示例:ALTER TABLE 表名ADD CONSTRAINT pkey_Admin PRIMARY KEY (AMDINID)5.插入数据(1)添加一行数据 基础语句:INSERT INTO 表名(列名1,列明2,列名3……) VALUES (值一,值二,值3……)代码示例:INSERT INTO ADMIN (ADMINID ,LOGINPWD ) VALUES (1,'iamthepassword')(2)将全部信息添加到另外一个表INSERT INTO 目标表名(列名1,列明2……) SELECT 列名1,列明2…… FROM 原表名6.创建备份表基础语句:SELECT*INTO备份表名FROM原始表名WHERE 0=1示例代码:SELECT*INTO ADMINBAKFROM ADMIN WHERE 0=17.更新数据基础语句:UPDATE表名SET列名=更新的值WHERE条件示例代码:UPDATE ADMIN SET LOGINPWD='password'WHERE ADMINID=18.删除数据基础语句:DELETE FROM表名WHERE条件示例代码:DELETE FROM ADMIN WHERE ADMINID=39.删除表基础语句:DROP TABLE表名示例语句:DROP TABLE ADMIN10查询语句基础语句:SELECT 列名1,列名2 FROM表名WHERE条件ORDER BY要排序的列名(ASC/DESC)示例语句:SELECT ADMINID,LOGINPWD FROM ADMIN WHERE LOGINPWD='password'ORDER BY ADMINID DESC在使用SELECT语句中,可使用*号,代表选择表中的全部列,例:SELECT * FROM ADMIN在SELECT后面加上 DISTINCT 可消除重复行,例如:SELECT DISTINCT LOGINPWD FROM ADMIN在SELECT后面加上TOP 数字,可选择前多少行的数据,例:SELECT TOP 20 * FROM ADMIN要自定义列标题名,可有3种方法:(1)列别名=列名密码=LOGINPWD(2)列名 as 列别名 LOGINPWD=密码(3)列名列别名 LOGINPWD 密码模糊查询,可用 LIKE 例如:SELEC T * FROM ADMIN WHERE LOGINPWD LIKE‘PASS%’更多函数的使用方法,请见课本P86.多表查询,可用“表名.列明”的方式,例如:SELECT Student.studentNO,Score.score1 FROM Student,Score或者采用INNER JOIN关键字关联等内连接和外连接,请见课本P97.11.创建视图基础语句:CREATE VIEW视图名ASFROM表名示例代码:CREATE VIEW V_TESTASSELECT*FROM STUDENT12.创建外键约束基础语句:ALTER TABLE表名ADD CONSTRAINT外键名FOREIGN KEY(从表列名)REFERENCES主表名(主表列名)示例代码:ALTER TABLE scoreADD CONSTRAINT FK_SCORE_STUDENTFOREIGN KEY(STUDENTNO)REFERENCES STUDENT(STUDENTNO)13.在sql中使用变量,详情请见课本P14314.创建索引基础语句:CREATE INDEX索引名ON表名(需要索引的列名)代码示例:CREATE INDEX IDX_ABC ON SCORE(STUDENTNO)15.创建存储过程基础语句:CREATE PROC存储过程名(定义变量)AsSql语句代码示例:详见课本P166,包括3种,不含参数,含参数,含输出参数的存储过程示例。
T-SQL语句之创建数据库
T-SQL语句之创建数据库原⽂:⼀、创建数据库例1创建⼀个数据库sample。
主要数据⽂件为sample_dat。
CREATE DATABASE sampleON PRIMARY(NAME=sample_dat,FILENAME=’d:\SQL\sample_data.mdf’,SIZE=5,MAXSIZE=50,FILEGROWTH=10)说明:主要数据⽂件的位置是d:\SQL\sample_data.mdf,由于没有为主要⽂件指定容量单位,系统默认为MB,所以主要数据⽂件的初始容量为5MB,最⼤容量为50MB,增幅为10MB。
由于在创建时没有指定⽇志⽂件,因此系统将⾃动创建⼀个初始容量为1.25MB的⽇志⽂件并且没有最⼤容量限制(系统⾃动创建的⽇志,其容量取512KB和所有数据⽂件容量总和的25%之中的较⼤值)。
例2创建⼀个只包含⼀个数据库⽂件和⼀个⽇志⽂件的数据库。
该数据库名为sales,数据⽂件的逻辑⽂件名为sales_data,数据⽂件的操作系统名为sales_data.mdf,初始⼤⼩为10MB。
最⼤可增⾄500MB,增幅为10%;⽇志⽂件的逻辑名为sales_log,操作系统名为sales_log.ldf,初始⼤⼩为5MB,最⼤值为100MB,⽇志⽂件⼤⼩以2MB增幅增加。
CREATE DATABASE salesON(NAME=sales_data,FILENAME=’d:\SQL\sales_data.mdf’,SIZE=10MB,MAXSIZE=500MB,FILEGROWTH=10%)LOG ON(NEME=sales_log,FILENAME=’d:\SQL\sales_log.ldf’,SIZE=5MB,MAXSIZE=100MB,FILEGROWTH=2MB)注意:由于省略了PRIMARY关键字,因此系统默认第⼀个⽂件sales_data.mdf为主要数据⽂件。
例3创建⼀个包含多个数据⽂件和⽇志的数据库。
使用TSQL语句创建数据库
基本语法
其中,<>语法格式如下: ([NAME = logical_ , ] = 'os_' [,SIZE = size ] [,MAXSIZE = { max_size | UNLIMITED } ] [, = growth_increment ] ) [ ,...n ]
基本语法
命令解释如下:
用T-SQL语句创建数据库示例
【例二】 创建完整的数据库。 创建一个名为ComplexDB的数据库,包含一
个主文件,3个次数据文件和两个事务日志 文件。
用T-SQL语句创建数据库示例
主文件的逻辑名为“mostComplexDB1,”,物 理文件名为“c:\ComplexDB1.mdf ”,初始容 量为1MB,最大容量为2MB,每次的增长量 为10%。
:指定数据和日志的操作系统文件名(包括所 在路径)。
SIZE:指定数据和日志文件的初始大小。 MAXSIZE:指定数据和日志文件可以增长到的
最大值。
基本语法
:数据和日志系统文件空间不足时每次增长的 大小。值为 0 表示不增长。该值可按MB、KB 或%的形式指定,必须是整数不要包含小数, 默认为MB。如果指定了%,那么文件增量为文 件发生增长时文件大小的指定百分比。
两个事务文件分别为。
逻辑名为“ComplexLog1”,物理文件名为 “d:\Complexlog1.ldf ”,初始容量为1MB, 最大容量为5MB,每次的增长量为1MB。
逻辑名为“ComplexLog2”,物理文件名为 “d:\Complexlog2.ldf ”。
CREATE DATABASE ComplexDB
3个次数据文件如下。
逻辑名为“ComplexDB2”,物理文件名为 “c:\ComplexDB2.ndf ”。
tsql语句创建表的方法
tsql语句创建表的方法一、TSQL语句创建表的基础。
1.1 什么是TSQL语句创建表。
嘿呀,咱先来说说这个TSQL语句创建表是咋回事儿呢。
TSQL呢,就是Transact SQL,这是SQL Server数据库里用的一种编程语言。
创建表就像是盖房子打地基一样,是数据库操作里特别重要的一步。
你想啊,要是没有表,数据就像没家的孩子,到处乱飘呢。
1.2 为啥要用TSQL创建表。
这可就有门道了。
用TSQL创建表那是相当方便、灵活。
你可以按照自己的需求,精确地定义表的结构。
比如说,你要管理一个书店的库存,你就能创建一个表,里面有书的名字、作者、价格、库存数量这些栏位。
这就好比是量身定做衣服,不大不小正合适。
二、创建表的具体步骤。
2.1 基本语法结构。
这创建表的语法啊,就像是一个魔法咒语。
一般来说呢,是“CREATE TABLE”这个关键字开头,后面跟着表的名字。
就像“CREATE TABLE BookInventory”,这就表示要创建一个叫BookInventory的表。
然后呢,在括号里面定义表的列。
比如说“(BookName VARCHAR(50), Author VARCHAR(50), Price DECIMAL(10, 2), StockQuantity INT)”。
这里面的“VARCHAR”就是可变长度的字符类型,“DECIMAL”是小数类型,“INT”就是整数类型。
这就像告诉数据库,这个表的每一列都长啥样,是啥类型的数据能住进去。
2.2 设定约束条件。
这约束条件啊,就像是给表立规矩。
比如说主键约束,这就像是给每一行数据一个独一无二的身份证。
在TSQL里,你可以这样写“PRIMARY KEY (BookID)”,这就表示BookID这一列是主键,每一行的BookID都不能相同。
还有像非空约束“NOT NULL”,就好比这个栏位必须得有东西,不能为空着。
这就好比是一个房子里有些房间必须得放东西,不能空着一样。
数据库教学资料第6章t-sql语言基础PPT课件
T-SQL是结构化查询语言(SQL)的一个扩展,专门针对Microsoft SQL Server数据库系统。它提供了许多额外 的功能和命令,使得对数据库的操作更加高效和强大。T-SQL具有丰富的语言特性,包括条件语句、循环语句、 存储过程、触发器等,可以用来执行复杂的查询、数据处理和数据库管理任务。
T-SQL语言还支持存储过程、触发 器、视图等高级功能,可以大大简 化复杂的业务逻辑和数据处理流程, 降低系统开发和维护成本。
T-SQL的未来发展前景
1
随着云计算、大数据等技术的快速发展,T-SQL 语言将继续发挥重要作用,支持更多的数据处理 场景和应用领域。
2
未来,T-SQL语言将不断演进和完善,支持更多 的数据类型、函数和操作符,提高数据处理效率 和安全性。
3
变量和常量的声明与赋值
使用DECLARE语句声明变量,使用SET或 SELECT语句为变量赋值。
流程控制语句
IF语句
用于根据条件执行不同的代码块。
WHILE语句
用于重复执行一段代码直到满足特定条件。
CASE语句
用于根据条件执行不同的代码块,类似于IF-ELSE结构。
GOTO语句
用于将程序控制转移到指定的标签位置。
使用存储过程和触发器
存储过程
使用CREATE PROCEDURE语句创建一个 存储过程,该过程可以包含一系列的TSQL语句,用于执行特定的数据库操作。
VS
触发器
使用CREATE TRIGGER语句创建一个触 发器,该触发器将在指定的事件(如 INSERT、UPDATE或DELETE操作)发生 时自动执行相应的操作。
同时,T-SQL语言将与新兴技术如人工智能、机 器学习等相结合,拓展其在数据分析、预测和智 能决策等领域的应用价值。
T-SQL语法大全
T-SQL语法大全SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREATE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表结构CREATE VIEW --创建一个视图DROP VIEW --从数据库中删除视图CREATE INDEX --为数据库表创建一个索引DROP INDEX --从数据库中删除索引CREATE PROCEDURE --创建一个存储过程DROP PROCEDURE --从数据库中删除存储过程CREATE TRIGGER --创建一个触发器DROP TRIGGER --从数据库中删除触发器CREATE SCHEMA --向数据库添加一个新模式DROP SCHEMA --从数据库中删除一个模式CREATE DOMAIN --创建一个数据值域ALTER DOMAIN --改变域定义DROP DOMAIN --从数据库中删除一个域-- 数据控制GRANT --授予用户访问权限DENY --拒绝用户访问REVOKE --解除用户访问权限--事务控制COMMIT --结束当前事务ROLLBACK --中止当前事务SET TRANSACTION --定义当前事务数据访问特征--程序化SQLDECLARE --为查询设定游标EXPLAN --为查询描述数据访问计划OPEN --检索查询结果打开一个游标FETCH --检索一行查询结果CLOSE --关闭游标PREPARE --为动态执行准备SQL 语句EXECUTE --动态地执行SQL 语句DESCRIBE --描述准备好的查询---局部变量declare @id char(10)--set @id = '10010001'select @id = '10010001'---全局变量---必须以@@开头--IF ELSEdeclare @x int @y int @z intselect @x = 1 @y = 2 @z=3if @x > @yprint 'x > y' --打印字符串'x > y'else if @y > @zprint 'y > z'else print 'z > y'--CASEuse panguupdate employeeset e_wage =casewhen job_level = ’1’ then e_wage*1.08w hen job_level = ’2’ then e_wage*1.07 when job_level = ’3’ then e_wage*1.06 else e_wage*1.05end--WHILE CONTINUE BREAKdeclare @x int @y int @c intselect @x = 1 @y=1while @x < 3beginprint @x --打印变量x 的值while @y < 3beginselect @c = 100*@x + @yprint @c --打印变量c 的值select @y = @y + 1endselect @x = @x + 1select @y = 1end--WAITFOR--例等待1 小时2 分零3 秒后才执行SELECT 语句waitfor delay ’01:02:03’select * from employee--例等到晚上11 点零8 分后才执行SELECT 语句waitfor time ’23:08:00’select * from employee***SELECT***select *(列名) from table_name(表名) where column_name operator valueex:(宿主)select * from stock_information where stockid = str(nid)stockname = 'str_name'stockname like '% find this %'stockname like '[a-zA-Z]%' --------- ([]指定值的范围)stockname like '[^F-M]%' --------- (^排除指定范围)--------- 只能在使用like关键字的where子句中使用通配符)or stockpath = 'stock_path'or stocknumber < 1000and stockindex = 24not stocksex = 'man'stocknumber between 20 and 100stocknumber in(10,20,30)order by stockid desc(asc) --------- 排序,desc-降序,asc-升序order by 1,2 --------- by列号stockname = (select stockname from stock_information where stockid = 4)--------- 子查询--------- 除非能确保内层select只返回一个行的值,--------- 否则应在外层where子句中用一个in限定符select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name select stockname , "stocknumber" = count(*) from table_name group by stockname--------- group by 将表按行分组,指定列中有相同的值having count(*) = 2 --------- having选定指定的组select *from table1, table2where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示table1.id =* table2.id -------- 右外部连接select stockname from table1union [all] ----- union合并查询结果集,all-保留重复行select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")value (select Stockname , Stocknumber from Stock_table2)---value为select语句***update***update table_name set Stockname = "xxx" [where Stockid = 3]Stockname = defaultStockname = nullStocknumber = Stockname + 4***delete***delete from table_name where Stockid = 3truncate table_name ----------- 删除表中所有行,仍保持表的完整性drop table table_name --------------- 完全删除表***alter table*** --- 修改数据库表结构alter table database.owner.table_name add column_name char(2) null .....sp_help table_name ---- 显示表已有特征create table table_name (name char(20), age smallint, lname varchar(30))insert into table_name select ......... ----- 实现删除列的方法(创建新表)alter table table_name drop constraint Stockname_default ---- 删除Stockname的defaul t约束***function(/*常用函数*/)***----统计函数----AVG --求平均值COUNT --统计数目MAX --求最大值MIN --求最小值SUM --求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX-- 求工资最高的员工姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV() 函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR() 函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三角函数***/SIN(float_expression) --返回以弧度表示的角的正弦COS(float_expression) --返回以弧度表示的角的余弦TAN(float_expression) --返回以弧度表示的角的正切COT(float_expression) --返回以弧度表示的角的余切/***反三角函数***/ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角ATAN2(float_expression1,float_expression2)--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角DEGREES(numeric_expression)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的自然对数值LOG10(float_expression)-- 返回表达式的以10 为底的对数值SQRT(float_expression) --返回表达式的平方根/***取近似值函数***/CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π 即3.1415926535897936RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数用于将ASCII 码转换为字符--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值LOWER() --函数把字符串全部转换为小写UPPER() --函数把字符串全部转换为大写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置SOUNDEX() --函数返回一个四位字符码--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{') quotename('abc')运行结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回一个重复character_expression 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2)运行结果如下----------- -----------abcabcabc NULL*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定子串的字符串/*select replace('abc123g', '123', 'def')运行结果如下----------- -----------abcdefg*/SPACE() --函数返回一个有指定长度的空白字符串STUFF() --函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST() 函数语法如下CAST() (<expression> AS <data_ type>[ length ])CONVERT() 函数语法如下CONVERT() (<data_ type>[ length ], <expression> [, style])select cast(100+99 as char) convert(varchar(12), getdate())运行结果如下------------------------------ ------------199 Jan 15 2000----日期函数----DAY() --函数返回date_expression 中的日期值MONTH() --函数返回date_expression 中的月份值YEAR() --函数返回date_expression 中的年份值DATEADD(<datepart> ,<number> ,<date>)--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期DATEDIFF(<datepart> ,<number> ,<date>)--函数返回两个指定日期在datepart 方面的不同之处DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理日期ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值NULLIF(<expression1>, <expression2>)--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression 1 的值====精妙SQL语句====说明:复制表(只复制结构,源表名:a 新表名:b)SQL: select * into b from a where 1<>1说明:拷贝表(拷贝数据,源表名:a 目标表名:b)SQL: insert into b(a, b, c) select d,e,f from b;说明:显示文章、提交人和最后回复时间SQL: select a.title,ername,b.adddatefrom table a,(select max(adddate) adddate from table where table.title=a.title) b说明:外连接查询(表名1:a 表名2:b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c说明:日程安排提前五分钟提醒SQL: select * from 日程安排where datediff('minute',f开始时间,getdate())>5说明:两张关联表,删除主表中已经在副表中没有的信息SQL:delete from info where not exists ( select * from infobz where info.infid=infobz.infid )---------数学函数1.绝对值S:select abs(-1) valueO:select abs(-1) value from dual2.取整(大)S:select ceiling(-1.001) valueO:select ceil(-1.001) value from dual3.取整(小)S:select floor(-1.001) valueO:select floor(-1.001) value from dual4.取整(截取)S:select cast(-1.002 as int) valueO:select trunc(-1.002) value from dual5.四舍五入S:select round(1.23456,4) value 1.23460O:select round(1.23456,4) value from dual 1.23466.e为底的幂S:select Exp(1) value 2.7182818284590451O:select Exp(1) value from dual 2.718281827.取e为底的对数S:select log(2.7182818284590451) value 1O:select ln(2.7182818284590451) value from dual; 18.取10为底对数S:select log10(10) value 1O:select log(10,10) value from dual; 19.取平方S:select SQUARE(4) value 16O:select power(4,2) value from dual 1610.取平方根S:select SQRT(4) value 2O:select SQRT(4) value from dual 211.求任意数为底的幂S:select power(3,4) value 81O:select power(3,4) value from dual 81S:select rand() valueO:select sys.dbms_random.value(0,1) value from dual;13.取符号S:select sign(-8) value -1O:select sign(-8) value from dual -1----------数学函数14.圆周率S:SELECT PI() value 3.1415926535897931O:不知道15.sin,cos,tan 参数都以弧度为单位例如:select sin(PI()/2) value 得到1(SQLServer)16.Asin,Acos,Atan,Atan2 返回弧度17.弧度角度互换(SQLServer,Oracle不知道) DEGREES:弧度-〉角度RADIANS:角度-〉弧度---------数值间比较18. 求集合最大值S:select max(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select greatest(1,-2,4,3) value from dual19. 求集合最小值S:select min(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select least(1,-2,4,3) value from dual20.如何处理null值(F2中的null以10代替)S:select F1,IsNull(F2,10) value from TblO:select F1,nvl(F2,10) value from Tbl--------数值间比较S:select ascii('a') valueO:select ascii('a') value from dual22.从序号求字符S:select char(97) valueO:select chr(97) value from dual23.连接S:select '11'+'22'+'33' valueO:select CONCAT('11','22')||33 value from dual23.子串位置--返回3S:select CHARINDEX('s','sdsq',2) valueO:select INSTR('sdsq','s',2) value from dual23.模糊子串的位置--返回2,参数去掉中间%则返回7S:select patindex('%d%q%','sdsfasdqe') valueO:oracle 没发现,但是instr可以通过第四霾问 刂瞥鱿执问?BR> select INSTR('sdsfasdqe','sd', 1,2) value from dual 返回624.求子串S:select substring('abcd',2,2) valueO:select substr('abcd',2,2) value from dual25.子串代替返回aijklmnefS:SELECT STUFF('abcdef', 2, 3, 'ijklmn') valueO:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual26.子串全部替换S: 没发现O:select Translate('fasdbfasegas','fa','我' ) value from dual27.长度S:len,datalengthO:length28.大小写转换lower,upper29.单词首字母大写S: 没发现O:select INITCAP('abcd dsaf df') value from dual30.左补空格(LPAD的第一个参数为空格则同space函数)S:select space(10)+'abcd' valueO:select LPAD('abcd',14) value from dual31.右补空格(RPAD的第一个参数为空格则同space函数)S:select 'abcd'+space(10) valueO:select RPAD('abcd',14) value from dual32.删除空格S:ltrim,rtrimO:ltrim,rtrim,trim33. 重复字符串S:select REPLICATE('abcd',2) valueO:没发现34.发音相似性比较(这两个单词返回值一样,发音相同)S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dualSQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差返回0-4,4为同音,1最高-------------- 日期函数35.系统时间S:select getdate() valueO:select sysdate value from dual36.前后几日直接与整数相加减37.求日期S:select convert(char(10),getdate(),20) valueO:select trunc(sysdate) value from dualselect to_char(sysdate,'yyyy-mm-dd') value from dual38.求时间S:select convert(char(8),getdate(),108) valueO:select to_char(sysdate,'hh24:mm:ss') value from dual39.取日期时间的其他部分S:DATEPART 和DATENAME 函数(第一个参数决定)O:to_char 函数第二个参数决定参数---------------------------------下表需要补充year yy, yyyyquarter qq, q (季度)month mm, m (m O无效)dayofyear dy, y (O表星期)day dd, d (d O无效)week wk, ww (wk O无效)weekday dw (O不清楚)Hour hh,hh12,hh24 (hh12,hh24 S无效)minute mi, n (n O无效)second ss, s (s O无效)millisecond ms (O无效)----------------------------------------------40.当月最后一天S:不知道O:select LAST_DAY(sysdate) value from dual41.本星期的某一天(比如星期日)S:不知道O:SELECT Next_day(sysdate,7) vaule FROM DUAL;42.字符串转时间S:可以直接转或者select cast('2004-09-08'as datetime) valueO:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUA L;43.求两日期某一部分的差(比如秒)S:select datediff(ss,getdate(),getdate()+12.3) valueO:直接用两个日期相减(比如d1-d2=12.3)SELECT (d1-d2)*24*60*60 vaule FROM DUAL;44.根据差值求新的日期(比如分钟)S:select dateadd(mi,8,getdate()) valueO:SELECT sysdate+8/60/24 vaule FROM DUAL;45.求不同时区时间S: 不知道O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;-----时区参数,北京在东8区应该是Ydt-------AST ADT 大西洋标准时间BST BDT 白令海标准时间CST CDT 中部标准时间EST EDT 东部标准时间GMT 格林尼治标准时间HST HDT 阿拉斯加—夏威夷标准时间MST MDT 山区标准时间NST 纽芬兰标准时间PST PDT 太平洋标准时间YST YDT YUKON标准时间sql中的保留字action add aggregate allalter after and asasc avg avg_row_length auto_incrementbetween bigint bit binaryblob bool both bycascade case char characterchange check checksum columncolumns comment constraint createcross current_date current_time current_timestampdata database databases datedatetime day day_hour day_minuteday_second dayofmonth dayofweek dayofyeardec decimal default delayeddelay_key_write delete desc describedistinct distinctrow double dropend else escape escapedenclosed enum explain existsfields file first floatfloat4 float8 flush foreignfrom for full functionglobal grant grants grouphaving heap high_priority hourhour_minute hour_second hosts identifiedignore in index infileinner insert insert_id intinteger interval int1 int2int3 int4 int8 intoif is isam joinkey keys kill last_insert_idleading left length likelines limit load locallock logs long longbloblongtext low_priority max max_rowsmatch mediumblob mediumtext mediumintmiddleint min_rows minute minute_secondmodify month monthname myisamnatural numeric no notnull on optimize optionoptionally or order outeroutfile pack_keys partial passwordprecision primary procedure processprocesslist privileges read realreferences reload regexp renamereplace restrict returns revokerlike row rows secondselect set show shutdownsmallint soname sql_big_tables sql_big_selectssql_low_priority_updates sql_log_off sql_log_updatesql_select_limitsql_small_result sql_big_result sql_warnings straight_join starting status string tabletables temporary terminated textthen time timestamp tinyblobtinytext tinyint trailing totype use using uniqueunlock unsigned update usagevalues varchar variables varying varbinary with write when where year year_month zerofill。
第九章T-SQL基础
1. +(正)、−(负)、~(位反)(一元) 2. *(乘)、/(除)、%(模)(算术) 3. +(加)、(+ 串联)、−(减)(加“加”减) 4. =, >, <, >=, <=, <>, !=, !>, !< ( 比较) 5. ^(位异或)、&(位与)、|(位或)(按位) 6. NOT(“不”) 7. AND(“和”) 8. ALL、ANY、BETWEEN、IN、LIKE、OR、 SOME(逻辑) 低 9. =(赋值)
标识符
P124
标识符用于标识服务器、数据库、数据库对象
(如表、视图等)、变量等。
标识符有两种类型:
常规标识符
分隔标识符
1.常规标识符
长度一般不超过128个字符。
开头字符必须为字母、 _ 、 # 或 @ 之一。 后续字符可以是字母、数字、_、 $ 、 #、 @。 不允许嵌入空格或其它特殊字符。 不允许使用保留字的大小写形式。(CREATE/ and/LOG)大小写不敏感。
建议:见名知意;不易混淆。
注 意
@开头的标识符表示局部变量或参数; @@开头的标识符表示全局变量; #开头的标识符表示临时过程或表; ##开头的标识符表示全局临时对象。
2. 分隔标识符
对于不符合格式规则的标识符,当用于 Transact-SQL语句时,必须用双引号或 方括号括起来。
日期
SQL Server 可以识别的日期格式有三种: 字符格式、数字格式、无分隔字符串格式。 字符格式:’April 15 2005’ 数字格式:’04/15/2005’ ‘15.04.2005’ ‘05-04-15’ 无分隔字符串格式:’20050418’
T-SQL 编程基础
日期时间型常量,由用单引号将表示日期时间的字符串
括起来构成。分为
字母日期型, 如 ‘April 20, 2014’ 数字日期型, 如 ‘4/15/2013’ 未分隔的字符串格式, 如 ‘20100315’ 时间常量, 如 ‘14:20:30’, ‘04:24:PM’ 日期时间常量, 如 ‘April 20, 2011 14:30:24’.
SYSTEM_USER
HOST_ID HOST_NAME ISDATE ISNULL ISNUMERIC
系统用户名
工作站标识号。 工作站名称。 是否为有效的日期。 是否为NULL。 是否为一个有效的数字类型。
最后执行的 T-SQL 语句的错误代码。
@@ERROR @@TRANCOUNT
肇庆学院数学与统计学院下期
1 数学函数
数学函数对作为函数参数提供的输入值执行 计算,返回一个数字值。SQL Server 2000 中 定义了23种数学函数,表4.4是数值处理中最 常用的数学函数。
名称 ROUND(数字表达式, 小数位数) 四舍五入 FLOOR(数字表达式) 整数函数 CEILING(数字表达式) RAND()
定/变长单字节字符,最长8000;
Unicode 字符
nchar / nvarchar / ntext
定/变长双字节字符,最长4000;
定/变长二进制数据,最长8000; 变长二进制数据
二进制数 Binary / varbinary / image 据
特殊 类型
timestamp
uniqueidentifier
