T-SQL语句精华
- 格式:doc
- 大小:28.14 KB
- 文档页数:5
T-SQL查询语句总结我们使⽤⼀下两张表作为范例:select * from [dbo].[employee]select * from [dbo].[dept]1、select语句DISTINCT:去掉记录中的重复值。
select distinct dept_no from [dbo].[employee]TOP:返回第⼀⾏或者是前⼏⾏select top(3) * from [dbo].[employee]AS:修改列标题select e_no as '员⼯编号', e_name as '员⼯姓名' from [dbo].[employee]注:AS关键字也可以省略使⽤等号‘=’修改列标题select '员⼯编号'=e_no, '员⼯姓名'=e_name from [dbo].[employee]2、在查询的结果内集中显⽰某字符串select '员⼯姓名:' ,e_name from [dbo].[employee]3、查询的列为表达式select e_no+10 as '新员⼯编号' ,e_name '员⼯姓名' from [dbo].[employee]4、where⼦句条件查询BETWEEN AND 表⽰范围select * from [dbo].[employee] where e_no between 1001 and 1006使⽤IN关键字select * from [dbo].[employee] where e_no in (1001 , 1007 )使⽤IN关键词时,将所有检索条件⽤逗号分隔开。
与括号内的值相匹配便可以被查出。
使⽤LIKE关键字LIKE关键字使⽤的通配符:%:包含零个或多个字符的任意字符串。
_:任何单个字符。
[]:指定范围[a-f]或者是集合[abcdef]中的任何单个字符。
《数据库应用与开发教程》书内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语法⼀、数据库存储结构SQL Server 7.0中的每个数据库有多个操作系统⽂件组成,数据库的所有资料、对象和数据库操作⽇志均存储在这些操作系统⽂件中。
根据这些⽂件的作⽤不同,可以将它们划分为以下三类:主数据⽂件:每个数据库有且只有⼀个主数据⽂件,它是数据库和其它数据⽂件的起点。
主数据⽂件的扩展名⼀般为.mdf;辅数据⽂件:⽤于存储主数据⽂件中未存储的剩余资料和数据库对象,⼀个数据库可以没有辅数据⽂件,但也可以同时拥有多个辅数据⽂件。
辅数据⽂件的多少主要根据数据库的⼤⼩、磁盘存储情况和存储性能要求⽽设置。
辅数据⽂件的扩展名⼀般为.ndf;⽇志⽂件:存储数据库的事务⽇志信息,当数据库损坏时,管理员使⽤事务⽇志恢复数据库。
⽇志⽂件的扩展名⼀般为.ldf。
每个数据库中⾄少两个⽂件:主数据⽂件和⽇志⽂件。
SQL Server数据库⽂件除操作系统所赋予的物理⽂件名称外,还有⼀个逻辑名称。
数据库的逻辑名称应⽤于Transact-SQL语句中。
例如,对于master系统数据库,master为其逻辑名称,使⽤Transact-SQL语句操作数据库时,均使⽤该名称。
⽽对应的物理⽂件名称为master.mdf、其⽇志⽂件名称为master.ldf。
为了管理⽅便,可将多个数据库⽂件组织为⼀组,称作数据库⽂件组。
⽂件组能够控制各个⽂件的存放位置,其中的每个⽂件常建⽴在不同的硬盘驱动器上,这样可以减轻每个磁盘驱动器的存储压⼒,提⾼数据库的存储效率,从⽽达到提⾼系统性能的⽬的。
SQL Server采⽤⽐例填充策略使⽤⽂件组中的每个⽂件提供的存储空间。
在SQL Server中建⽴⽂件和⽂件组时,应注意以下两点:每个⽂件或⽂件组只能属于⼀个数据库,每个⽂件也只能成为⼀个⽂件组的成员,⽂件和⽂件组不能跨数据库使⽤;⽇志⽂件是独⽴的,它不能成为⽂件组的成员。
也就是说,数据库的资料内容和⽇志内容不能存⼊相同的⽂件或⽂件组。
基本T-SQL语句1.增加(插入)语句插入一条记录Insert into表名(列名1,列名2,列名3)Values (值1,值2,值3)插入多条记录(从表1中将数据复制到领表2中)Insert into表2(列名1,列名2,列名3)Select表1.列名1,表1.列名2,表1.列名3From 表1注:执行这条语句之前,表2必须事先已经建好插入多条记录(从表1中将数据复制到新建的表2中)Select表1.列名1,表1.列名2,表1.列名3,identity(int,1,1) as idInto表2From表1注:常用于创建临时表插入多条记录Insert into 表1 (列名1,列名2,列名3)Select 值1,值2,值3 unionSelect值1,值2,值3 unionSelect值1,值2,值3注:这里值1,值2,值3必须是常量插入语句注意事项:1)插入的列个数必须和插入的值个数一致2)插入的值必须和插入的列的类型一致3)如果表中某列不允许为空,那么插入一行记录时必须为该列插入值4)如果表中有标识列,不能为标识列插入值5)如果表中某列有默认值,为该列插入值时,只能用Insert into 表名(列名1,列名2,列名3)Values (值1,值2,default)或者干脆就不为该列插入值2.更新(修改)语句Update表名set列名1=值1,列名2=值2【Where 更新条件】3.删除语句Delete from 表名【where 删除条件】Truncate表名注:这两种语句都只是删除表中的记录,删除过程中一定要注意如果该表有外键约束,一定要先删除外表4.查询语句基本查询语句Select列名1,列名2,列名3 from 表1【where 查询条件】或Select * from 表1 (查询表中所有的记录)为查询列重命名Select列名1 as 新命1,列名2as新命2,列名3 as新命3from表1【where 查询条件】查询中的常量列Select值1,值2,值3 from 表排序查询1)要求返回前n个记录Select top n列名1,列名2,列名3From表1Order by 列名desc2)要求返回整个表中的n%的记录Select top n% 列名1,列名2,列名3From表1注:order by 中desc 降序,asc升序(不写默认为升序)聚合函数1)求和Select sum(列名1) as 总和From 表【Where 条件】2)求平均Select avg(列名) as 平均From表【Where 条件】3)求最大值、最小值Select max(列名) as 最大值, min(列名) as 最小值From 表【Where 条件】3)统计个数Select count(*) as 个数From 表【Where 条件】分组查询Select列名1,avg(列名2) as 平均值From表1【Where 条件】Group by 列名1【having 条件】注:1)如果查询中有聚合函数还有其他列,这个列必须包含在group by 的后面2)在查询语句中,where先过滤掉整张表中不符合条件的数据,然后再根据Group by 后面的列进行分组,having是在分完组之后再过滤掉各个组内不符合条件的数据,最后再使用聚合函数统计剩下的数据常用的字符串函数1:replace函数第一个参数你的字符串,第二个参数你想替换的部分,第三个参数你要替换成什么select replace('lihan','a','b')结果:lihbn2:substring函数第一个参数你的字符串,第二个是开始替换位置,第三个结束替换位置select substring('lihan',0,3);结果li3: charindex函数第一个参数你要查找的char,第二个参数你被查找的字符串,第三个查找的起始位置,返回参数一在参数二的位置select charindex('a','lihan',1)结果:44:stuff函数(四个参数)函数将字符串插入另一字符串。
-------------------------------------------------------创建数据库Student------------------create database Studenton primary(name='Student_dat',filename='D:\Program Files\SQLServer2000\Data\StudentDatabase\Student_dat.mdf', size=10mb,maxsize=50,filegrowth=10%)log on(name='Student_log',filename='D:\Program Files\SQLServer2000\Data\StudentDatabase\Student_dat.ldf', size=10,maxsize=50,filegrowth=10%)-------------------------------------------------------修改数据库Student------------------use Studentgo--alter database Studentmodify file(name=Student_dat,size=20mb)go--alter database Studentmodify file(name=Student_log,size=20mb)go--查看Student信息----------------use Studentgo--exec sp_helpdb Student----收缩数据库容量---------------use Studentgoexec sp_dboption 'Student','single user',truegodbcc shrinkdatabase('Student')goexec sp_dboption 'Student','single user',falsego-------------------------------------------------------数据表的基本操作-----------------use studentgo---------创建表---------‘管理员’表--create table 管理员(用户名varchar(12) constraint pk_gly primary key not null,密码varchar(12) null,级别char(2) null)go--‘系部’表 --create table 系部(系部代码char(2) constraint pk_xbdm primary key not null,系部名称varchar(30) not null,系主任varchar(8) not null)--‘专业’表 --create table 专业(专业代码char(4) constraint pk_zydm primary key not null,专业名称varchar(20) not null,系部代码char(2) constraint fk_zyxbdm references 系部(系部代码))--‘班级’表 --create table 班级(班级代码char(9) constraint pk_bjdm primary key not null,班级名称varchar(20) not null,专业代码char(4) constraint fk_bjzydm references 专业(专业代码) not null, 系部代码char(2) constraint fk_bjxbdm references 系部(系部代码) not null, 备注varchar(50))--‘学生’表 --create table 学生(学号char(12) constraint pk_xh primary key not null,姓名varchar(8) ,性别char(2),出生日期datetime,入学日期datetime,班级代码char(9) constraint fk_xsbjdm references 班级(班级代码), )--‘教师’表 --create table 教师(教师编号char(12) constraint pk_jsbh primary key not null,姓名varchar(8) not null,性别char(2),出生日期datetime,学历varchar(10),职务char(10),职称char(10),系部代码char(2) constraint fk_jsxbdm references 系部(系部代码), 专业char(20),备注varchar(50))--‘课程’表 --create table 课程(课程号char(4) constraint pk_kch primary key not null,课程名称varchar(20) not null,备注varchar(50))--‘教学计划’表 --create table 教学计划(课程号char(4) constraint fk_jxjhkch references 课程(课程号),专业代码char(4) constraint fk_jxjhzydm references 专业(专业代码), 专业学级varchar(4) not null,课程类型varchar(8) ,开课学期tinyint,学分tinyint,开始周tinyint,结束周tinyint,教材编号char(6),备注varchar(50)--‘教师任课’表 --create table 教师任课(教师编号char(12) constraint fk_jsrkjsbh references 教师(教师编号) not null,课程号char(4) constraint fk_jsrkkch references 课程(课程号) not null,专业学级char(4) not null,专业代码char(4) not null,学年char(4) ,学期tinyint,学生数smallint,学时数smallint,酬金smallint,开始周tinyint,结束周tinyint)--‘课程注册’表 --create table 课程注册(注册号bigint Identity (010000000,1) not for replication constraint pk_zch primary key , 学号char(12) constraint fk_kczcxh references 学生(学号) ,课程号char(4) not null,教师编号char(12) not null,专业代码char(4) not null,专业学级char(4) not null,选课类型char(4) ,学期tinyint ,学年char(4) ,收费否bit,注册bit,成绩tinyint,学分tinyint)--‘课程收费’表 --create table 课程收费(学号char(12) constraint fk_kcsfxh references 学生(学号),课程号char(4) constraint fk_kcsfkch references 课程(课程号),收费tinyint,学年char(4),学期tinyint)------------------------------------------利用已有表创建新表--------------------/****** 对象: 表[dbo].[专业] 脚本日期: 2009-10-15 15:21:46 ******/ CREA TE TABLE [dbo].[专业备份] ([专业代码] [char] (4) COLLA TE Chinese_PRC_CI_AS NOT NULL ,[专业名称] [varchar] (20) COLLA TE Chinese_PRC_CI_AS NOT NULL , [系部代码] [char] (2) COLLA TE Chinese_PRC_CI_AS NULL) ON [PRIMARY]GO--查看表信息-----------exec sp_help 专业go--修改表---------添加列:alter table 学生add 家庭住址varchar(30) nullgo--修改列:alter table 学生alter column 家庭住址varchar(50) not nullgo--删除列:alter table 学生drop column 家庭住址go--删除表select * from 专业备份godrop table 专业备份go--------------------------------------------------------------------------------数据操作-----------------------------------添加数据----------------insert [into] 表名(字段1,字段2...) values('值1','值2'...)/*-- 1、向‘系部’表添加数据--*/--select* from 系部insert into 系部(系部代码,系部名称,系主任) values('01','计算机系','杨学全') /*-- 2、向‘专业’表添加数据--*/--select* from 专业insert into 专业(专业代码,专业名称,系部代码) values('0101','软件工程','01')/*-- 3、向‘班级’表添加数据--*/--select* from 班级insert into 班级(班级代码,班级名称,专业代码,系部代码) values('060101001','06级软件工程班','0101','01')/*-- 4、向‘学生’表添加数据--*/--select* from 学生insert into 学生(学号,姓名,性别,出生日期,入学日期,班级代码) values('060101001001','张小泽','男','1985-06-04','2006-09-18','060101001')/*-- 5、向‘课程’表添加数据--*/--select* from 课程insert into 课程(课程号,课程名称,备注) values('0001','SQL Server 2005','')/*-- 6、向‘教学计划’表添加数据--*/--select* from 教学计划insert into 教学计划(课程号,专业代码,专业学级,课程类型,开课学期,学分,开始周,结束周) values('0001','0101','2006','公共必修','1','4','1','18')/*-- 7、向‘教师’表添加数据--*/use Studentgo--select* from 教师INSERT INTO 教师(教师编号,姓名,性别,出生日期,学历,职务,职称,系部代码,专业)V ALUES('010*********','杨学全','男', '1967-02-02','研究生','主任','副教授','01','计算机')/*-- 8、向‘教师任课’表添加数据--*/USE studentGO--select* from 教师任课INSERT INTO 教师任课(教师编号,课程号,专业学级,专业代码,学年,学期,学生数,学时数,酬金,开始周,结束周)V ALUES ('010*********','0001', '2006', '0101','2006', '1',0,0,0,0,0)/*-- 9、向‘课程注册’表添加数据--*/-USE studentGO--select * from 课程注册INSERT INTO 课程注册(学号,教师编号,课程号,专业学级,专业代码,选课类型,学期,学年,收费否,注册,成绩,学分)SELECT DISTINCT 学生.学号,教师任课.教师编号,教师任课.课程号,教学计划.专业学级,教学计划.专业代码,' ',教学计划.开课学期,0,0,0,0,0FROM 学生JOIN 班级ON 学生.班级代码=班级.班级代码JOIN 教学计划ON 班级.专业代码=教学计划.专业代码JOIN 教师任课ON 教学计划.课程号=教师任课.课程号--*--?这里不理解?--*--------------------------------- 数据添加完成---------------------------------------------------------------------------修改数据--update 表名set 字段1='值1' , 字段2='值2' , ...use studentgoupdate 教学计划set 开始周=2 where 专业代码='0101'go--select * from 教学计划--select * from 课程注册update 课程注册set 成绩=(注册号-9999999),学分=3goupdate 课程注册set 成绩=85 where 课程号='0001' and 学号='060101001001' --------------------- 数据修改完成--------------------------------------------------------------------------删除一行数据--delete from 表名where 条件--将表清空--delete from 表名--------------- 删除结束--------------------------------------------------------------------------------将‘系部备份’表,而且数据来源于‘系部’表------------------------------------------use Studentgocreate table 系部备份(系部代码char(2) constraint pk_xbdmbf primary key not null,系部名称varchar(30) not null,系主任varchar(8) not null)goinsert into 系部备份(系部代码,系部名称,系主任)select 系部代码,系部名称,系主任from 系部go-----------------------------------------------------------------------------------简单查询----------------------------/*--基本语法如下:select select_list[into new_table_name]from table_list[where search_condition][group by group_by_list][having search_condition][order by order_list[asc|desc]]*/--select 课程号,课程名称from 课程go----运算select 姓名,year(getdate())-year(出生日期) as 年龄from 学生go----为字段指定别名的三种方式select 姓名name, 性别as sex, birttday=出生日期from 学生go----取消重复值select 学号from 课程注册goselect distinct 学号from 课程注册go----限制返回行数select top 3 * from 课程注册goselect top 20 percent 注册号,学号,课程号,教师编号from 课程注册goselect * from 课程注册go----查询满足条件的元祖select * from 教师go----比较大小select * from 教师where year(getdate())-year(出生日期)<=35go----确定范围select 教师编号,姓名,出生日期from 教师where 出生日期between '1971-01-01'and '1980-12-31' go----确定集合select 班级代码,班级名称from 班级where 系部代码in('01','02')go--字符匹配,类型如下/*a%b -->以a开头,以b结束的任何字符串_ -->代表任意一个字符串[] -->a[bcdef]表示以a 开头,以b/c/d/e/f 中任意一个结尾的字符[^] -->表示不再[]中列出的任意一个字符*/select * from 学生where 姓名like '刘%'go--insert into 课程(课程号,课程名称,备注) values('0005','Delphi_6.0','程序设计') go----escape 表示'/'不再有转义字符的作用select 课程号,课程名称from 课程where 课程名称like 'Delphi/_6.0' escape'/' go----涉及空值查询select * from 班级where 备注is nullgo------order by 对查询结果排序(asc 升序desc 降序)select * from 教师where 性别='男' order by year(getdate())-year(出生日期) desc go--select * from 学生order by 班级代码desc,学号ascgo----统计数据/*count([distinct|all]*)count([distinct|all]<列名>)sum([distinct|all]<列名>)avg([distinct|all]<列名>)max([distinct|all]<列名>)min([distinct|all]<列名>)*/select count(*) as 学生总数from 学生go--select avg(year(getdate())-year(出生日期)) as 平均年龄from 学生go------group by 列名[having 筛选条件表达式]select 课程号,count(*) as 选课人数from 课程注册group by 课程号having count(*)>3go --[查询‘课程注册’表中选课人数在3人以上的各个课程号和相应的选课人数]----compute 集合函数[by 列名]select * from 课程注册order by 学号compute sum(成绩)go --[查询所有学生的所有成绩的综合]--select sum(成绩) from 课程注册【同上等效】--select * from 课程注册order by 学号compute sum(成绩) by 学号go --[统计每个学生的成绩]----用查询结果生成新表select * into 班级副本from 班级go--select * from 班级副本select * into 学生副本from 学生where 1=2go --【由于1=2永远不成立,新表中将不会插入任何的数据】--select * from 学生副本----Union 合并结果集select * from 课程注册where 专业代码='0101'unionselect * from 课程注册where 成绩>78go --[查出0101专业的所有选课学生与成绩高于78分的学生并集【类似‘或’的作用】] --select 学号,'选择了0001号课程'as 备注from 课程注册where 课程号='0001'unionselect 学号,'选择了0002号课程'as 备注from 课程注册where 课程号='0002'go --选择了0001号课程,或是0002号课程的学生-------------基本查询案例-----------1.模糊查询select * from 学生where 姓名like '[刘,张,罗]%' order by 姓名go --[查询姓刘,张,罗的所有学生]--2.集合查询select 课程号,学号,成绩from 课程注册where 课程号in('0001','0002','0003')order by 课程号asc ,成绩descgo --【可以尝试用union实现】--3.使用集合函数select count(*)as 学生总数,max(成绩) as 最高分,min(成绩) as 最低分,avg(成绩) as 平均成绩from 课程注册where 课程号='0001'go--4.结果分组select 学号,sum(成绩)as 总成绩from 课程注册group by 学号having sum(成绩)>300go--------------------*基本查询结束*----------------------------use studentgo---------------------数据高级查询-----------------------------1.连接查询---------------1.1、交叉连接查询/*select column_list from 表1 cross join 表2*/--[生成‘学生1’和‘单科成绩’表,插入数据,交叉连接查询‘学生1’与‘单科成绩’]select 学号,姓名into 学生1 from 学生where 1=2go --利用‘学生’生成‘学生1’的表结构,但无数据【因为where 1=2 不成立】select 学号,成绩into 单科成绩from 课程注册where 1=2go --‘课程注册’生成‘单科成绩’表结构execute sp_help 学生1goinsert into 学生1(学号,姓名) values('11','杨文生')insert into 学生1(学号,姓名) values('12','唐国栋')insert into 学生1(学号,姓名) values('14','梁亮')goinsert into 单科成绩(学号,成绩) values('11','80')insert into 单科成绩(学号,成绩) values('13','98')insert into 单科成绩(学号,成绩) values('15','76')go --向两个新表插入数据select * from 学生1 cross join 单科成绩go --交叉连接查询--1.2、等值与非等值查询/*[<表1>.]<列> <比较运算符> [<表1>.]<列>比较运算符:=、>、<、>=、<=、!=*/--等值查询/*select column_list from table1 [inner]join table2 on table1.column=table2.column通常以‘on 主键=外键’的形式作为连接条件*/--等值连接select * from 学生1 inner Join 单科成绩on 学生1.学号=单科成绩.学号go--自然连接:去掉等值连接中重复的属性列select 学生1.学号,姓名,成绩from 学生1 inner Join 单科成绩on 学生1.学号=单科成绩.学号go--表的别名select s.学号,姓名,成绩from 学生1 as s inner join 单科成绩as c on s.学号=c.学号go--1.3、自身连接查询/*自身连接中,必须为表指定别名*/select distinct a.学号,a.课程号from 课程注册as a Join 课程注册as b on a.学号=b.学号and a.课程号!=b.课程号order by a.学号go --[查询选修了两门或两门以上的课程的学生的学号和课程号]--1.4、外连接查询:左外连接、又外连接、全连接--左外连接/*select column_listfrom table1 left [outer]join table2on 表1.列=表2.列以table1【左表】为主表,与table2 连接,满足记录的,将table2.column 数据输出,不满足的填充null example:*/select * from 学生1 left outer Join 单科成绩on 学生1.学号=单科成绩.学号go--右外连接/*与左外连接相反【反上】example:*/select * from 学生1 right outer join 单科成绩on 学生1.学号=单科成绩.学号go--全连接/*select column_listfrom table1 full [outer]join table2on 表1.列=表2.列相当于先进行右外连接,再进行左外连接example:*/select * from 学生1 full outer join 单科成绩on 学生1.学号=单科成绩.学号go--1.5、复合连接条件查询/*on连接中有多个条件,成为复合连接条件。
T-SQL语言一、数据库1.创建数据库CREATE DATABASE database_name[ON{[PRIMARY] (NAME=logical_file_name,FILENAME=’os_filename_name’,[,SIZE=size][,MAXSIZE={m ax_size︳UNLIMITED}][,FILEGROWTH=grow_increment])}[,……n]LOG ON(NAME=logical_file_name,FILENAME=’os_filename_name’,[,SIZE=size][,MAXSIZE={max_size︳UNLIMITED}][,FILEGROWTH=grow_increment])}[,……n]][COLLATE collation_name]2.使用T-SQL语句管理数据库(1)打来数据库USE database_name(2)查看数据库信息[EXEC[UTE]]sp_helpdb database_name(3)增长或减少数据库容量ALTER DATABASE database_nameADD FILE (NAME=logical_file_name,FILENAME=’os_filename_name’,[,SIZE=size][,MAXSIZE={max_size︳UNLIMITED}][,FILEGROWTH=grow_increment])ADD LOG FILE (NAME=logical_file_name,FILENAME=’os_filename_name’,[,SIZE=size][,MAXSIZE={max_size︳UNLIMITED}][,FILEGROWTH=grow_increment])MODIFY FILE (NAME=file_name,SIZE=newsize)REMOVE FILE logical_file_name(4)收缩数据库容量DBCC SHRINKDATABASE (database_name)(5)查看数据库选项EXEC sp_dboption (‘database_name’)二、数据表的基本操作1、创建数据表:create table table_name(列定义,计算列定义,表约束定义)2、表的修改与删除:alter table 表名alter column 列名修改表列属性add (列定义,计算列定义,表约束定义)drop column 列名删除列三、数据的基本操作1、数据的添加Insert into table_name (column1,column2,column3, …)Values (‘expression1’,’expression2’,’expression3’, …)2、数据的修改:update table_namesetcolumn_name=…where <search_conditions>3、数据的删除:1)使用DELETE语句删除数据:Delete talbe_nameWhere search_conditions2)使用TRUNCA TE清空表格:Truncate table table_name4、简单查询SELECT语句的基本语法格式:Select select_listInto new_table_nameFrom talbe_listWhere search_conditionsGroup by group_by_listHaving search_conditionsOrder by order_list[ASC | DESC]选择表中的若干列:1)输出表中的部分列:Select column1,column2,…From talbe_name2)输出表中的所有列:Select *From table_name3)输出计算列:(例)Select 姓名,year(getdate()) - year(出生日期)From 学生4)为结果集内的列指定别名:Select 列名(表达式)列别名FROM 数据源Select 列名(表达式)AS 类别名FROM 数据源Select 列别名=列名(表达式)FROM 数据源5、选择表中的若干记录(以实例为例)1)消除取值重复的行Select distinct 学号From 课程Go2)限制返回行数Select top 3 * 或select n percent *From 课程注册返回前三条记录或者表中前20%的记录Go3)查询满足条件的元组比较大小:Where + 条件表达式确定范围:列表达式【NOT】BETWEEN 起始值AND 终止值例:Where 出生日期between ‘1971-01-01’ and ’1980-12-31’确定集合:where [not] in (列表值1,列表值2……)字符匹配:[not] like ‘<匹配串>’【ESCAPE’<换码字符>’】涉及空值的查询:[not] column_name IS NULL多重条件查询:[not] 逻辑表达式and | or [not] 逻辑表达式6、对查询结果排序order by column1[ASC|DESC] , column[ASC|DESC] , …7、对数据进行统计1)使用集合函数Count ( [ distinct | all ] * ) 统计记录个数Count ( [ distinct | all ]<列名> )统计一列中值的个数Sum ( [ distinct | all ]<列名> )统计一列值的总和(此列必须是数值型)Avg ( [ distinct | all ]<列名> )统计一列值的平均值(此列必须是数值型)Max ( [ distinct | all ]<列名> )统计一列值的最大值Min ( [ distinct | all ]<列名> )统计一列值的最小值Distinct 是去掉制定列中的重复值,all是不取消重复值,默认状态下是all。
SQL TOP 子句TOP 子句TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
注释:并非所有的数据库系统都支持 TOP 子句。
SQL Server 的语法: SELECT TOP number|percent column_name(s) FROM table_nameMySQL 和 Oracle 中的 SQL SELECT TOP 是等价的MySQL 语法 SELECT column_name(s) FROM table_name LIMIT number例子 SELECT * FROM Persons LIMIT 5Oracle 语法 SELECT column_name(s) FROM table_name WHERE ROWNUM <= number例子 SELECT *FROM Persons WHERE ROWNUM <= 5原始的表 (用在例子中的):Persons 表:IdLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing4ObamaBarackPennsylvania AvenueWashingtonSQL TOP 实例现在,我们希望从上面的 "Persons" 表中选取头两条记录。
我们可以使用下面的 SELECT 语句:SELECTTOP 2* FROM Persons结果: Id LastName FirstName Address City1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew YorkSQL TOP PERCENT 实例现在,我们希望从上面的 "Persons" 表中选取 50% 的记录。
部分常用T-SQL语句:使用T-SQL创建数据库:格式:CREATE DATABASE 数据库名ON(NAME=数据文件逻辑文件名,FILENAME=‘数据文件物理文件名’,SIZE=文件的初始长度,FILEGROWTH=增长率)[……]LOG ON(NAME=日志文件逻辑文件名,FILENAME=‘日志文件物理文件名’,SIZE=文件的初始长度,FILEGROWTH=增长率)[……]格式:USE <数据库名>功能:打开指定的数据库。
格式:sp_helpdb [数据库名]功能:查看数据库信息,若没指定数据库名,则查看所有数据库的信息。
格式:sp_databases功能:查看当前服务器上所有可以使用的数据库。
格式:sp_helpfile [@文件名]功能:查看当前数据库中指定文件的信息,若文件名缺省,则查看当前数据库上的所有文件。
包括数据文件和日志文件。
格式:sp_helpfilegroup [@文件组名]功能:查看当前数据库中指定文件组的信息,若文件组名缺省,则查看当前数据库上的所有文件组。
包括PRIMARY和USER_DEFINED文件组。
使用T-SQL语句修改数据库:格式:ALTER DATABASE 数据库名ADD FILE<文件定义>[,...N]|ADD LOG FILE<文件定义>[,...N]|REMOVE FILE 逻辑文件名|MODIFY FILE<文件定义>其中:<文件定义>:(NAME=数据文件逻辑文件名,FILENAME=‘数据文件物理文件名’,SIZE=文件的初始长度,FILEGROWTH=增长率)ADD FILE <文件定义> :添加新的数据文件ADD LOG FILE<文件定义>[,...N]:添加日志文件REMOVE FILE 逻辑文件名:删除数据库文件MODIFY FILE<文件定义>:修改数据库文件删除数据库:格式:DROP DATABASE 数据库名[,…n]使用T- SQL语句格式:CREATE TABLE 表名(列定义[,...N]|列名AS 计算表达式[,...N]|表约束[,...N])列定义::=列名数据类型[[默认表达式]| [IDENTITY[(标识列的起始值,增量)][列约束][,...N]修改列属性:列属性包括:列名、数据类型、数据长度及是否允许为空值。
SQL 命令汇总例题:一、对库的操作代码命令(其中fox是数据库名称)1、CREATE DA TABAES fox (新建一个名为fox的数据库)2、USE DATABAES fox (打开fox数据库)3、DROP DATABASE fox (删除fox数据库)二、对表的操作代码命令(其中fox_t、fox_t1是数据表名称)1、CREATE TABLE fox_t (新建一个名为fox_t的数据表)2、DROP TABLE fox_t (删除fox_t数据表)3、ALTER TABLE fox_tALTER COLUMN s_id int (修改fox_t数据表中的s_id列的属性为int型数据)ALTER TABLE fox_tALTER COLUMN id_ip int IDENTIEY(1,1) (修改fox_t数据表中的id_ip列的属性为int型数据并且为自增字段每次增加1)4、ALTER TABLE fox_tADD name varchar (在fox_t数据表中添加一个name字段且数据类型为varchar)5、ALTER TABLE fox_tDROP COLUMN name (删除字段name)6、ALTER TABLE fox_tADD CONSTRAINT constraint_name PRIMARY KEY s_id(添加s_id为主键约束,约束名为constraint_name)7、ALTER TABLE fox_tADD CONSTRAINT constraint_name_1 (添加id_ip作为外键)FOREIGN KEY id_ip REFERENCES fox_t1 id_ip_18、ALTER TABLE fox_tADD CONSTRAINT constraint-A_2 DEFAULT 1000FOR constraint-A9、ALTER TABLE fox_tADD CONSTRAINT constraint-B_2 CHECK sex in(‘男’, ‘女’)10、ALTER TABLE fox_tADD CONSTRAINT constraint-C-3 UNIQUE (name)练习:use abcselect * from 学生基本信息表where 总分>=60 order by 总分descuse abcselect 学号as '学生编码',姓名,总分as '总分大于60分' from 学生基本信息表where 总分>=60use abcselect top 50 percent * from 学生基本信息表use abcselect sum(部门工资) as '发放工资总额' from 工资清单use abcselect max(部门工资) as '所的工资最高的部门' from 工资清单use abcselect max(工资) as '不同工种的薪水' from 工资表group by 工种use abcselect max(工资) as '不同工种的薪水' from 工资表where 工资>2000 group by 工种having max(工资)<8000。
USE[master]GO--列出数据库中的所有架构select*from sys.schemas--列出数据库中的所有用户EXEC sp_helpuser--列出所有服务器级别的权限selecttype,permission_name from sys.server_permissions--列出所有数据库级别的权限selectdistincttype,permission_name from sys.database_permissions --列出所有数据库select database_id,create_date,name from sys.databases--列出所有的登录名select*from sys.sql_logins--列出所有数据类型和最大长度select name,max_length from sys.types--列出所有的视图select name from sys.views;--列出所有的登录名select*from testDB.sys.syslogins--列出所有用SQL验证方式登录的登录名select*from testDB.sys.sql_logins--列出数据库的用户名列表(issqlrole=0)select*from testDB.sys.sysusers where issqlrole=0--列出用户创建的数据库中的数据库角色(issqlrole=1)select*from TicketSysDB.sys.sysusers where issqlrole=1--列出master数据库中的数据库角色(issqlrole=1)select*frommaster.sys.sysusers where issqlrole=1--获得每个角色是的特定权限exec sp_dbfixedrolepermission--获得固定数据库角色的列表exec sp_helpdbfixedrole--获得具体给出的数据库中的数据库角色select*frommaster.sys.sysusers where issqlrole=1--查找出数据库用户名(如testUser)对应的登录名select as dbname, as loginnamefrom testDB.sys.database_principals a,testDB.sys.server_principals b where a.sid=b.sid--and ='testUser'--找出数据库用户名(如sys)对应的默认架构select name,default_schema_name from testDB.sys.database_principals--whe re name='sys'--根据数据库用户所对应的登录名select as dbname, as loginnamefrommaster.sys.database_principals a,master.sys.server_principals b where a.sid=b.sid--根据系统存储过程得出数据库用户--和该用户所对应的数据库角色和登录名use testDB IF OBJECT_ID('tempdb.dbo.#dbUser_Role')ISNOTNULLDROPTABLE#dbUser_Rolecreatetable#dbUser_Role(UserName sysname,RoleName sysname,LoginName sysname NULL,DefDBName sysname NULL,DefSchemaName sysname NULL,UserID smallint NULL,SIDsmallint NULL,primarykey(UserName,RoleName))insertinto#dbUser_Role exec sp_helpuserselect*from#dbUser_Role--为数据库用户添加数据库角色USE[testDB]GOEXEC sp_addrolemember N'db_datareader',N'sqlLogin1'GO--为数据库用户取消数据库角色USE[testDB]GOEXEC sp_droprolemember N'db_datareader',N'sqlLogin1'GO--添加登录名对数据库的用户映射--默认在数据库中创建的是与登录名同名的数据库用户--架构选择dboUSE[TicketSysDB]GOCREATE USER[sqlLogin1]FORLOGIN[sqlLogin1]GOUSE[TicketSysDB]GOALTER USER[sqlLogin1]WITHDEFAULT_SCHEMA=[dbo]GO--修改数据库用户名的名字USE[TicketSysDB]GOALTER USER[sqlLogin1]WITH NAME=[sqlLogin2]GO--修改login的密码USE[master]GOALTERLOGIN[sqlLogin1]WITHPASSWORD=N'password1'GO--为登录名添加服务器角色EXECmaster..sp_addsrvrolemember@loginame=N'sqlLogin1',@rolename=N'dbc reator'GO--为登录名取消服务器角色EXECmaster..sp_dropsrvrolemember@loginame=N'sqlLogin1',@rolename=N'db creator'GO--创建SQL Server登录名sqlLogin1--强制密码策略--强制密码过期--用户在下次登录时必须更改密码USE[master]GOCREATELOGIN[sqlLogin1]WITHPASSWORD=N'pa$$w0rd_123'MUST_CHANGE,DEFAULT _DATABASE=[master],CHECK_EXPIRATION=ON,CHECK_POLICY=ONGO--创建SQL Server登录名sqlLogin1--强制实施密码策略USE[master]GOCREATELOGIN[sqlLogin1]WITHPASSWORD=N'pa$$w0rd_123',DEFAULT_DATABASE=[ master],CHECK_EXPIRATION=OFF,CHECK_POLICY=ONGO--拒绝登录名连接服务器--登录名禁用USE[master]GODENYCONNECTSQLTO[sqlLogin1]GOALTERLOGIN[sqlLogin1]DISABLEGO--授予登录名连接服务器--登录名启用USE[master]GOGRANTCONNECTSQLTO[sqlLogin1]GOALTERLOGIN[sqlLogin1]ENABLEGO用SQL语句添加删除修改字段1.增加字段ALTER TABLE [yourTableName] ADD [newColumnName] newColumnType(length)2.删除字段ALTER TABLE [yourTableName] DROP COLUMN [ColumnName]3.修改字段类型ALTER TABLE [yourTableName] ALTER COLUMN [ColumnName] newColumnType(length)4.更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
SQL Server语句总结Select语句Select select_listFrom table_listWhere search_conditionsOrder by order_list(asc[升序]or desc[降序])例子:1、Select*from employee2、Select name,title from employee3、Select*from employeeWhere salary>4000Where子句操作符操作符说明=用于测试两个表达式是否相等Not和其他操作符一起使用,取反的操作And组合两个条件,并在两个条件都为true是取值Between指定值的包含范围。
使用and分隔开始值和结束值Is[not]null根据使用的关键字,指定是否搜索空值或非空值,如果有任何一个操作数为NULL,则包含运算符或算术运算符的表达式的计算结果为nullLike指示字符串要进行的模式匹配例子:1、select*from employeesWhere salary between3000and40002、select*from employeesWhere name like'张%'3、select*from employeesOrder by salary desc数据库修改:Insert:向表内插入数据,将一行或多行数据插入表中。
Update:更新表中的数据,修改表中的数据。
Delect:删除表中的数据,删除数据行。
语法:Insert[Into]table[(colunm_list)]date_values例:insert into employeesValues(10,'王燕','销售员','1986-11-30',4500)将查找的内容导入另一个表中Select*into employeesnewFrom employees更改表中的数据Update employeesSet dalary=salary*1.1Where title='销售员'删除表中的数据:语法:DelectFrom tableWhere search_condition例:Delect from employeesWhere name='李芳'删除表中所有行Delect from employeesnew创建/删除数据库:creat/drop database t203新建表:Creat table表名(编号int,not null姓名char(10),年龄tinyint,....)授权:Grant权限On表名To姓名2009-6-2720:45:21数据库语句太多,这里仅是很小很小一部分,请自己再查一些!!!。