T-SQL语句精华
用于数据库、数据表操作的T-SQL语句总结

高等教育“十一五”国家级规划教材
《 数据库与程序设计 》
山东大学出版社
1、创建用户数据库(续)
其中filespec定义为: < filespec > ::= ( NAME = logical_file_name , FILENAME = ' os_file_name ' [ , SIZE = size[ KB | MB | GB | TB ] ] [ , MAXSIZE = { max_size[ KB | MB | GB | TB ] | UNLIMITED } ]
《 数据库与程序设计 》
山东大学出版社
1、创建用户数据库(续)
CREATE DATABASE student ON PRIMARY
( NAME=student,
FILENAME='E:\student\student.mdf', SIZE=3, MAXSIZE=UNLIMITED, FILEGROWTH=10% ) LOG ON ( NAME=student_log, FILENAME='E:\student\student_log.ldf', SIZE=4, MAXSIZE=UNLIMITED, FILEGROWTH=10% )
打开或切换数据库的命令如下:
USE database_name
其中,database_name表示想打开或切换的数据库名称。
《 数据库与程序设计 》 山东大学出版社
高等教育“十一五”国家级规划教材
2、修改用户数据库(续)
(2)修改数据库的语法格式
修改数据库使用ALTER DATABASE语句,它可以增加或删除数据库中的 文件,也可以修改文件的属性。其简化的语法格式如下: ALTER DATABASE database_name { ADD FILE < filespec > [ ,…n ] [ TO FILEGROUP { filegroup_name} ]
T-SQl命令语句

select * from Student where Email is null or Email=''
select * from Student where Email is not null and Email !=''
--6、使用常量列 注意列名和常量的区别
order by StudentResult
--7、查询学号为‘s1101003’的学生参加过得所有考试信息,并按照时间前后次序显示
select * from Result
where StudentNo=23
order by ExamDate
--8、查询学号为‘s1101003’的学生参加过得所有考试中的最高分及时间,科目
SELECT DATENAME(qq,getdate())
--日期中指定日期部分的整数形式
SELECT DATEPART(day, '01/15/2000')
select datepart(dw,GETDATE())
select * from Student
where DATEPART(MM,BornDate)=DATEPART(MM,GETDATE())
--2、*********日期函数**********
--取得当前的系统日期
select getdate()
SELECT GETDATE()
--将指定的数值添加到指定的日期部分后的日期
select dateadd(DAY,80,GETDATE())
select DATEADD(YEAR,-4,GETDATE())
select top 3 * from Student
T-SQL查询语句总结

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语句集合及示例

《数据库应用与开发教程》书内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语法⼀、数据库存储结构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常用语句总结

基本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函数(四个参数)函数将字符串插入另一字符串。
T-SQL常用语法汇总

建立一个 SC 表,定义 SNO,CNO 为 SC 的外部键。 USE STUDENT CREATE TABLE SC (SNO CHAR(5) NOT NULL CONSTRAINT S_FORE FOREIGN KEY REFERENCES S(SNO), CNO CHAR(5) NOT NULL CONSTRAINT C_FORE FOREIGN KEY REFERENCES C(CNO), SCORE NUMERIC(3), CONSTRAINT S_C_PRIM PRIMARY KEY (SNO,CNO));
删除表 SC 的索引 SCI DROP INDEX SC.SCI
SQL 数据查询
SELECT〈列名〉[{,〈列名〉}] FROM〈表名或视图名〉[{,〈表名或视图名〉}] [WHERE〈检索条件〉] [GROUP BY <列名 1>[HAVING <条件表达式>]] [ORDER BY <列名 2>[ASC|DESC]];
建立一个 S 表,定义 SNO 为 S 的主键 USE STUDENT CREATE TABLE S (SNO CHAR(5) NOT NULL CONSTRAINT S_PRIM PRIMARY KEY, SN CHAR(8), AGE NUMERIC(2));
建立一个 SC 表,定义 SNO+CNO 为 SC 的主键 USE STUDENT CREATE TABLE SC (SNO CHAR(5) NOT NULL, CNO CHAR(5) NOT NULL, SCORE NUMERIC(3), CONSTRAINT SC_PRIM PRIMARY KEY(SNO,CNO));
最全面的T-SQL语句

-------------------------------------------------------创建数据库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连接中有多个条件,成为复合连接条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
from学生
inner join专业on
学生.专业代码=专业.专业代码
go
’学生’和’专业’交叉查询
usestudent
go
select学号,姓名,性别,
学生.系部代码,
学生.专业代码,
专业.专业代码,专业名称,
专业.系部代码
from学生
cross join专业
go
自然连接’学生’和’专业’表
go
select课程号,count(*) as选课人数
from课程注册
GROUP BY课程号
HAVING COUNT(*)>=4
GO
查询教师总数
usestudent
go
select count(*)
as教师总数
FROM教师
GO
查询学生成绩平均分
usestudent
go
selectavg(成绩)
AS平均分
入学时间datetime,
班级代码char(9)
constraintfk_bjdm
references班级(班级代码),
系部代码char(2),
专业代码char(4))
go
增加’家庭住址’列
usestudent
go
alter table学生
add家庭住址varchar(40)
go
删除数据库student
usestudent
go
select教师编号,姓名,性别,学历,职务,职称
FROM教师
WHERE系部代码=
(SELECT系部代码
FROM教师
WHERE姓名='王钢' )[and姓名<>'王钢' ]
go
使用’学生’表,’课程’表和’课程注册’表查询选修了’高等数学’和’计算机基础’的学生的学号和姓名
usestudent
usestudent
go
select学号,成绩
from课程注册
where课程号='0001'
and成绩>=70 and成绩<=79
go
查询备注为空的教师信息
usestudent
go
select*
from教师
where备注isnull
go
查询课程选课人数4人以上的
课程号和相应的选课人数
usestudent
go
executesp_help专业
go
在’专业’表中添加数据
usestudent
go
insert专业
values
('0103','电子商务','01')
go
T-SQL语句代码
创建’课程’表的副本’课程1’,将’课程’表数据全部加进’课程1’
usestudent
go
createtable课程1
(课程号char(4) NOT NULL,
usestudent
go
delete课程注册
where
课程注册.课程号='0001'
and学号
=(select学号
from学生
where姓名like'张斌')
go
查询’教师’表中全体教师的姓名及年龄
usestudent
go
select姓名,year
(getdate())-year(出生日期)
as年龄
专业.系部代码
from学生
left outer join专业
on学生.专业代码=专业.专业代码
GO
’学生’完全外连接’专业’表
usestudent
go
select学号,姓名,性别,
学生.系部代码,
学生.专业代码,
专业.专业代码,专业名称,
专业.系部代码
from学生
full outer join专业
on学生.专业代码=专业.专业代码
ORDER BY出生日期
GO
使用’教师’表查询与’王钢’同在一个系的教师的基本信息
(使用EXISTS运算符)
usestudent
go
select教师编号,姓名,性别,学历,职务,职称
where
成绩>=70 and成绩<=79
order by成绩desc
go
查询选修了课程’0001’或’0002’的学生信息(升序)
usestudent
go
select*
from课程注册
where课程号='0001'
union
select*
from课程注册
where课程号='0002'
order by课程号asc
[ where专业代码='0101' ]
go
删除’教师’中无姓名的记录
usestudent
go
delete教师
where姓名isnull
go
清空’课程注册’表
usestudent
go
truncate table课程注册
go
删除’课程注册’的所有记录
usestudent
go
delete课程注册
go
删除’课程注册’表中’张斌’的课程号为’0001’的选课信息
usestudent
go
select学号,姓名,性别,
学生.系部代码,
专业.专业代码,专业名称
[ into学生选专业]
from学生join专业
on学生.专业代码=专业.专业代码
go
将’学生’左外连接’专业’表
usestudent
go
select学号,姓名,性别,
学生.系部代码,
学生.专业代码,
专业.专业代码,专业名称,
filename='e:\jsjx_db_log.ldf',
size=10MB,
filegrowth=2MB)
collate chinese_prc_ci_as
go
增改数据库jsjx_db容量
USEjsjx_db
GO
ALTER DATABASEjsjx_db
MODIFY FILE
(NAME=jsjx_db_data,
SIZE=newsize)
GO
增改日志文件容量
USEjsjx_db
GO
ALTER DATABASEjsjx_db
MODIFY LOG FILE
(NAME=jsjx_db_log,
SIZE=newsize)
GO
缩减数据库jsjx_db容量,
缩减比例为1
USEjsjx_db
GO
DBCC SHRINKDATABASE
FROM课程注册
GO
对每个学生各科的成绩求和
usestudent
go
select*
from课程注册
order by学号
computesum(成绩)by学号
go
所有学生的所有成绩总和
usestudent
go
select*
from课程注册
order by学号
computesum(成绩)
go
创建空的’教师’表副本
查询姓’周’的同学的信息
usestudent
go
select*from学生
where姓名like '周%'
go
查询’课程注册’前三条信息
usestudentgoΒιβλιοθήκη select top 3*
from课程注册
go
查询计算机系经济管理系的班级名称与代码
usestudent
go
select班级代码,班级名称
from班级
usestudent
go
select学号,姓名,性别,出生日期,系部代码
FROM学生
WHERE出生日期>ANY
(SELECT出生日期
FROM学生
WHERE系部代码=
(SELECT系部代码
FROM系部
WHERE系部名称='计算机系'))
AND系部代码<>(SELECT系部代码FROM系部
WHERE系部名称='计算机系')
from教师
go
查询全体学生记录
usestudent
go
select*
from学生
go
查询选修了课程的学生号
usestudent
go
selectdistinct学号
from课程注册
go
查询课程名为’Photoshop_7.1’的课程号和课程名
usestudent
go
insert into课程
(课程号,课程名,学分)
usestudent
go
select学号,姓名
FROM学生
WHERE学号not IN
(SELECT学号
FROM课程注册
WHERE课程号NOT IN
(SELECT课程号
FROM课程
WHERE
课程名='高等数学'
OR课程名='计算机基础'))
GO
使用’学生’表和’系部’表查询其他系中比’计算机系’中任一学生小的学生名单
usestudent
go
select*
into教师副本
from教师
where1=2
go
查询’课程注册’表中0102专业的学生学号及成绩在70~79之间的学生学号,按成绩降序排列