目录
Select语句查询
1.查询单列数据
such as : select 学生编号 from 学生信息
结果为学生编号一列数据。
2查询所用列数据
such as:select * from 学生信息
结果为这个标的数据。
3.查询指定的列数据
such as:select 学生编号,学生姓名,------ from 学生信息
结果是(学生编号,学生姓名,---)的数据列。
4.在查询时使用别名
such as:select No as 编号,Sex as 性别,BirthDay as 出生日期 from employee
结果标题行以别名显示的表数据。
1.相等条件查询
such as:select * from 学生信息 where 性别=‘女’
结果显示所有性别是女的信息。
2.不等于条件查询
such as:select * from 学生信息 where 性别<>(!=也可以)‘女’
结果显示所用性别不是女的信息。
3.大于或小于条件查询
such as:select * from 学生信息 where 年龄<=(!>也可以)30
结果显示表中年龄小于30岁的学生信息。(>=也可以写成!<)
4.查询数值区间数据
such as:select * from 学生信息 where 年龄 Between 25 and 30
实际上Between 语句与">= and <="的执行效果是一样的
such as:select * from 学生信息 where 班级='00406' and 性别='女' and 地址='吉林'
6.OR运算符(不要过多)
such as:select * from 学生信息 where 班级='00406' or 性别='女'
7.And运算符与or预算福组合查询(and优先级高于or
such as: select * from 学生信息 where 性别='女' and 班级='00406' or 籍贯='吉林辽源'
由于and优先级高于or,所以本实例先计算' 性别='女' and 班级='00406' '然后再将该值与o
r籍贯='吉林辽源'进行or运算
1.(%【不计字符个数】,_【一个字符】通配符)
such as:select * from 学生信息 where 联系地址 like '吉林省长春市' ---使用like,这里等价于'='
select * from 学生信息 where 籍贯 like '%吉林%'
select * from 学生信息 where 联系地址 like '吉林__市'
2.[]通配符进行模糊查询
like '3[%]'==3%(百分号)
[]跟in的原理差不多
such as: select * from 学生信息 where 学生姓名 like '[王赵]%'
查询所用姓'王'或姓'赵'的学生信息
如果[]中使用了∧运算符,则将会查询出除了查询结果之外的所有数据.
select * from 学生信息 where 学生姓名 like '[∧王赵]%'
1.查询指定日期数据
such as:select * from 学生信息 where 出生日期='1977-10-06'
可以使用>符号
2.查询日期区间的数据
such as: select * from 学生信息 where 出生日期 Between '1970-01-01 ' and '1980-12-31'
3.查询大于或小于某日期的数据
such as:select * from 学生信息 where 出生日期<'1977-10-06'
select * from 学生信息 where 出生日期>'1977-10-06'
4.查询某年或某月数据
such as:select * from 学生信息 where year(出生日期)=1981 and month(出生日期)=3
5.in运算符相关的查询
such as:select * from 学生信息 where 籍贯 in ('吉林辽源','吉林长春','辽宁锦州')
查询籍贯是'吉林辽源' or '吉林长春' or '辽宁锦州'的数据
6.not in运算符条件查询
such as:select * from 学生信息 where 籍贯 not in ('吉林辽源','吉林长春','辽宁锦州')
查询籍贯不是'吉林辽源' or '吉林长春' or '辽宁锦州'的数据
1.查询是去除重复记录
such as:select distinct(籍贯) from 学生信息
2.获取指定字段的空值(不含有任何值)(is not null)[不含空值返回为True]
such as:select * from 学生信息 where 联系地址 is null and 联系电话 is null
表中的字段有没有null值,如果有则返回值将为True
3.对空值的相关处理
isnull(数据库要检验字段,向数据库修改的字段)将空值转换为有效的值
nullif(数据库要检验字段,向数据库修改的字段)根据指定的条件生成空值
such as:select 编号,货物名称,货物种类,单价,isnull(数量,0)as 数量, isnull(发货日 期, getdate())as 发货日期,isnull(发货日期,'无')as 发货地址 from 商品信息
------发货日期为null的变为了当前系统日期
select 编号,货物名称,nullif(货物种类,'蔬菜')as 货物种类,单价, 数量, 发货日期,发货地址 from 商品信息 ------货物种类为蔬菜的货物种类变为了null
4.查询前N条数据记录
such as:select top 5 * from 学生信息 ------------查询数据表中前5条数据记录
select top 5 percent * from 学生信息 ------------查询数据表中记录总数的5%
1.单列排序
such as:select * from 学生信息 order by 出生日期 ASC【默认】(desc[降序]) ----------------使查询结果按照出生日期进行升序排序
2.多列排序
such as:select * from 学生成绩 order by 英语 asc (desc),大学语文 asc (desc) ------------------根据‘英语’成绩和'大学语文'成绩进行多列排序
select * from 学生成绩 order by 英语 desc,高等数学 asc,大学语文 desc
3.采用序号进行多列排序(序号是Select 关键字后面的列名序号)
such as:select 学生编号,英语,高等数学,大学语文,计算机应用 from 学生成绩 order by 2,4 -------order by 英语,大学语文
1.转换字符串的大小写
upper----大写
lower-----小写 -----只对字母有效
such as:select upper(job_desc) as job_desc from jobs -----转换为大写
2.去除字符串中的空格
LTRIM-----去除字符串的左边的空格
RTRIM-----去除字符串的右边的空格
such as:select 学生编号,LTRIM(学生姓名)as 学生姓名,班级+'('+RTRIM(LTRIM(学生姓名))+')' as 组合信息 from 学生信息
3.提取字符串的子串
LEFT(str,length)-----------从字符串的左端开始截取指定长度的字符串
RIGHT(str,length)----------从字符串的右端开始截取指定长度的字符串
SUBSTRING(str,starlength1,length)---- 从字符串的任意位置截取指定长度的字符串
such as:select 学生编号,学生姓名,籍贯,班级,联系地址,left(联系地址,2) as 字符串1,right(联系地址,3)as 字符串2,substring(联系地址,4,2)as 字符串 from 学生信息
4.搜索字符串的子串
CHARINDE(要搜索的字符串,表中的字段) -------搜索目标字符串开头第一次出现子源字符串中的位置
such as:select job_id,job_desc,charindex( 'E',job_desc) as Position from jobs
5.替换字符串中的内容
replace(表中的字段,搜索的字符串,要替换的字符串)------------ 在'表中的字段'中搜索字符串'搜索的字符串',并且将搜索到的'搜索的字符串'全部替换成'要替换的字符串'
such as:select jop_id,job_desc,replace(job_desc,'Manager','lijunmin') as new _job_desc from jobs
6.删除字符串中的字符
stuff(指定删除的字符串,指定删除字符串的开始位置,指定删除字符串的长度,指定插入到[指定删除的字符串]中字符)--------------------删除指定长度的字符串
such as:select 学生编号,学生姓名,性别,年龄,出生日期,籍贯,stuff(联系地址,4,3,(' '[or 优秀学生])) as 联系地址 from 学生信息
7.将数值数据转换为字符串
str(要转换的数值)----------------------将数值型数据转换为字符串
such as:select 学生编号,(学生姓名+str(年龄)+'岁') as 学生信息,性别,出生日期,籍贯,联系地址 from 学生信息
1.获取日期数据中的天
date()
such as:select 编号,day(发货日期) as 具体哪天 from 商品信息
2.获取月信息
month()
such as:select 编号,month(发货日期) as 具体哪天 from 商品信息
3.获取年信息
year()
such as:select 编号,year(发货日期) as 具体哪天 from 商品信息
4.使用dateadd=函数实现日期相加
使用dateadd()可以查询推迟后的日期时间
such as:select 编号,dateadd(day【month】【year】,3,发货日期) as 到货日期 from 商品信息------------推迟3天 3月,3年
5.使用datediff()实现日期相减
使用datediff()获取两个日起数据之间的时间差
select 编号,datediff(day【month】【year】, 发货日期,’2008-11-5’) as 天数 from 商品信息 -----------计算发货日期与2008-11-5之间的间隔天数【月数】【年数】
6.获取当前系统日期
      Getdate()用于获取当前系统的日期时间
Such as:select 编号,datediff(day,发货日期,getdate()) as 天数 from 商品信息-----------获取发货日期到现在间隔几天。
1.使用round()计算四舍五入的值
Such as:select 编号,round(单价,1) as 价格 from 商品信息---------------获取’单价’四舍五入的值,并保留一位小数。
2.使用floor()获取最大的整数
Floor()可以获得小于货等于数值表达式中的最大整数
Such as:select 编号,floor(单价) as 单价取整 from 商品信息------------如果单价是3.5,则floor取值的3。
3.使用ceiling()获取最小整数
     Ceiling() 可以获得大于或等于表达式中的最小整数
Such as:select 编号,floor(单价) as 单价取整 from 商品信息------------如果单价是3.2,则floor取值的4。
4.正弦函数sin(num)
5.余弦函数cos(num)
6.正切函数tan(num)
7.使用Log函数获取对数值log(num)
8.使用power(num,x)函数返回指定幂的值
9.使用exp(num)函数返回指数值
10.使用rand(num)函数获得随机值
11.使用sqrt(num)函数计算平方根
1.对数值字段求和运算sum()
2.获得数据字段中的最大值max()
3.获得数据字段中的最小值min()
4.获得数据字段中的平均值avg()
5.获得数据字段记录的条数count()
1.使用cast()函数转换数据类型
使用cast()函数可以将某种数据类型的表达式显示转换为另一种数据类型
 Cast(str as data_type)--------------------------- Cast(‘456’ as int)
2.使用Convert()函数转换数据类型
     使用convert()函数可以将指定的格式数据转换为另外一种数据类型
      Convert(data_type[varchar………等等],字段) convert(varchar(10),年龄)
1.使用@@datefirst()函数返回日期值
 Set datefirst 1
 Select @@datefirst as ‘第一天’,datepart(dw,getdate()) as ‘今天’---------------------将每周的第一天设置为1(星期一),并假定当天是星期六。通过select 语句返回datefirst值和当天是此周的第几天。
2.使用@@dbts()函数返回数据库的时间戳
     使用@@dbts()函数可以返回当前数据库最后使用的时间戳
Select @@dbts as 当前数据库的时间戳值
3.使用@@language函数返回语言名称
Select @@language as 语言名称 --------简体中文
4.使用@@version函数返回数据库的版本
使用@@version函数返回当前sql server 的版本
@@version 与xp_msver返回的信息相似,二xp_msver更详细
Select @@version as 当前数据库版本
5.使用@@option函数返回当前设置信息
Sp_configure 与@@option 功能相似
Set nocount on
 If @@option & 512>0
Raiserror(‘nocount’,2,1)
5.使用@@servicename返回注册表项
如果当前实例为默认实例,南无@@servicename将返回mssqlserver,则返回该实例的名称
1.创建标量函数
Create function Get_WeekDay ---------自定义函数的名称
(@date datetime)----------------参数名称和数据类型
Returns int------------返回值的数据类型
As
Begin
Return datepart(weekday,@date)--------------执行函数体
End
Select dbo. Get_WeekDay(convert(datetime,’20090220’,101))-----应用
2.创建单语句表值型函数
 Use MyDateBase
Go
Create function Stud_Class(@ClassName char(10))---函数名称
Returns table -------------返回的数据类型为表(table)
As
Retrun -------------返回表中的数据来源(select语句)
(
Select 学生编号,学生姓名,性别,年龄,出生日期,籍贯 from 学生信息 where 班级=@ClassNmae
)
Select * from Stud_Class(‘00411’)-----------应用
3.创建多语句表值型函数
Use MyDateBase
Go
Create function StudAch_Fun(@math_ach float)
Returns @AchInfos TABLE ------- AchInfos       为局部变量,存放了该函数返回的表
------标的定义
学生编号 char(20)-----数据类型要与原表一致,否则插入数据时会出错
学生姓名 char(30),
班级 char(20),
高等数学 float,
大学语文 float,
英语 float,
计算机应用 float
As
-----生成表
begin
 Insert @AchInfos
Select 学生信息.学生编号,学生信息. 学生姓名, 学生信息. 班级,学生成绩. 高等数学,学生成绩. 大学语文,学生成绩. 英语, 学生成绩. 计算机应用 from 学生信息,学生成绩 where学生信息.学生编号=学生成绩. 学生编号 and学生成绩.高等数学>@math_ach
Retrun
End
    Select * from StudAch_Fun(60)--------应用[查询高等数成绩高于60的学生信息]
4.更改自定函数
    Alert function 函数名称(其他跟创建一样)
5.删除自定义函数
    Drop function function_name(函数名称)
 
1.实现多表连接
数据表之间的连接是通过FROM子句来完成的。使用FROM子句可以列出所选择列表和WHERE子句中引用列所在的表和视图
------查询学生信息表和学生成绩表中的字段信息
Select 学生信息.学生编号,学生信息. 学生姓名, 学生信息. 班级,学生成绩. 高等数学,学生成绩. 大学语文,学生成绩. 英语, 学生成绩. 计算机应用 from 学生信息,学生成绩 where学生信息.学生编号=学生成绩. 学生编号
2.内连接查询
       返回两个表中的所用相匹配的数据,舍弃不匹配的数据
Select a.学生编号,a.学生姓名,a.性别,a.班级,b.高等数学,b.大学语文,b.英语,b.计算机应用 from 学生信息 as a inner join 学生成绩 as b on a.学生编号=b.学生编号 where a.性别=‘女’
3.左外连接
在左外连接生成的结果集中,除了包含匹配的数据行外,还包括join关键字左边表不匹配的行
Select a.学生编号,a.学生姓名,a.性别,a.班级,b.高等数学,b.大学语文,b.英语,b.计算机应用 from 学生信息 as a left outer join 学生成绩 as b on a.学生编号=b.学生编号 where a.性别=‘女’
4.右外连接
在左外连接生成的结果集中,除了包含匹配的数据行外,还包括join关键字右边表不匹配的行
Select a.学生编号,a.学生姓名,a.性别,a.班级,b.高等数学,b.大学语文,b.英语,b.计算机应用 from 学生信息 as a right outer join 学生成绩 as b on a.学生编号=b.学生编号 where a.性别=‘女’
5.全外连接
在左外连接生成的结果集中,除了包含匹配的数据行外,还包括join关键字左边表和右边表不匹配的行
Select a.学生编号,a.学生姓名,a.性别,a.班级,b.高等数学,b.大学语文,b.英语,b.计算机应用 from 学生信息 as a full outer join 学生成绩 as b on a.学生编号=b.学生编号 where a.性别=‘女’
6.交叉连接查询
       指返回被连接的两个表所在数据的笛卡尔乘积
Select a.学生编号,a.学生姓名,a.性别,a.班级,b.高等数学,b.大学语文,b.英语,b.计算机应用 from 学生信息 as a CROSS join 学生成绩 as b on a.学生编号=b.学生编号 where a.性别=‘女’
7.自身连接查询
       数据表与其自身进行连接,在 实际应用中,需要使用别名来配合实现查询
1.使用union语句查询两表中的数据
       Union可以将两个不同的数据表中的行数据记录组合在一起
       ----学生信息表
Select 学生编号 as 编号,学生姓名 as 姓名,性别,年龄,联系电话 from 学生信息 where 性别=‘女’
       Union
----员工信息表
Select 员工编号,员工姓名,性别,年龄,联系电话 from 员工信息 where 性别=‘女’
2.使用union语句查询多表中的数据
       ----学生信息表
Select 学生编号 as 编号,学生姓名 as 姓名,性别,年龄,联系电话 from 学生信息 where 性别=‘女’
       Union
----员工信息表
Select 员工编号,员工姓名,性别,年龄,联系电话 from 员工信息 where 性别=‘女’
       Union
---教师信息表
Select 教师编号,教师姓名,性别,年龄,联系电话 from 教师信息 where 性别=‘男’
3.排序union语句的查询结果
       ----学生信息表
Select 学生编号 as 编号,学生姓名 as 姓名,性别,年龄,联系电话 from 学生信息 where 性别=‘女’
       Union
----员工信息表
Select 员工编号,员工姓名,性别,年龄,联系电话 from 员工信息 where 性别=‘女’
       Order by 编号 desc                 ---将数据连接后的结果按照“编号”进行降序排序
4.使用intersect语句的查询运算
       使用intersect语句可以查询两个表的“公共”数据信息
Select 学生编号,学生姓名,性别,年龄,联系电话 from 学生信息 where 性别=‘女’
       Intersect
----员工信息表
Select 员工编号,员工姓名,性别,年龄,联系电话 from 员工信息 where 性别=‘女’
5.使用except语句的查询运算
       使用except语句可以查询两个数据表中除“公共”数据以外的数据信息
Select 学生编号,学生姓名,性别,年龄,联系电话 from 学生信息 where 性别=‘女’
       except
----员工信息表
Select 员工编号,员工姓名,性别,年龄,联系电话 from 员工信息 where 性别=‘女’
 
1.使用group by语句分组列表
Select 后面的字段,除group by 后面的字段,其他字段都是集合字段
Select 货物种类,sum(单价)as 单价,sum(数量) as 数量 from 商品信息 group by货物种类
2.使用having语句分组查询条件
       Having语句的作用是对查询结果集进行筛选
Select 货物种类,sum(单价)as 单价,sum(数量) as 数量 from 商品信息 group by货物种类 having sum(数量)>6000
1在select语句中使用子查询
       Select 学生编号,学生姓名,年龄,班级,
       ------使用子查询查询学生的平均年龄
       (Select avg(年龄) from 学生信息) as 平均年龄,
----使用子查询计算“与平均年龄相差”的年龄
(年龄-( Select avg(年龄) from 学生信息))as from 学生信息
2.在from子句中使用子查询
Select * from (select 货物种类,sum(单价*数量) as 总价格 from 商品信息 group by货物种类)tab1 order by 总价格------按总价格排序
3.在where子句中使用子查询
       Select 学生编号,学生姓名,年龄,班级,
       ------使用子查询查询学生的平均年龄
       (Select avg(年龄) from 学生信息) as 平均年龄,
----使用子查询计算“与平均年龄相差”的年龄
(年龄-( Select avg(年龄) from 学生信息))as from 学生信息 where 年龄>( Select avg(年龄) from 学生信息)   ----------在where总使用子查询
4.使用in语句的子查询
       In运算符用于集合成员的测试
Select 学生编号,学生姓名,年龄,班级,性别 from 学生信息 where 学生编号 in (select 学生编号 from 学生信息 where 年龄<30)
5.在多表中使用子查询
在多表中使用子查询时,子查询可以放在select,from,where子句中
Select 学生编号,学生姓名,年龄,班级,性别 from 学生信息 as a where 学生编号 in (select 学生编号 from 学生成绩 where 英语>80)
6.使用exists语句的子查询
       Exists(为空是真)语句测试集合是否为空(not exists=false)
Select 学生编号,学生姓名,年龄,班级,性别 from 学生信息 where exists(select * from 学生成绩 where 学生编号=a.学生编号)
7.使用any运算符的子查询
      
 
1.       显示事务是指 显示的定义起开始和结束的事务,当使用begin tran 和commit tran 语句是发生的事务。
2.       隐式事务是指在当前事务提交货回滚后自动开始的事务,该事务需要用commit 语句和rollback 回滚事务货结束事务
3.       start transaction 表示事务开始执行、set constrains 在当前书屋中设置约束模式
4.       set trancaction 用于设置下一个要执行的事务属性
5.       savepoint是指在事务中设置 保存点,保存点可以理解为断点,指 用来标识重新开始时的事务位置
6.       holdlock:该语句表示持有共享锁,直到整个事务结束
7.       rowlock:表示强制使用表锁、盘区锁和行锁代替页锁等
8.       nolock:该语句执行时不发出共享锁,允许读“脏数据“(更新了的数据,但是还没有操作完成,也就是正在操作中的数据,不是原来的数据)
9.       paglock:在使用一个表锁的地方使用多个页锁
10.   readpast:   跳过任何锁定执行事务
11.   tabloakx:强制使用独占表级锁
12.   updlock:在事务结束之前,强制在读表时使用更新锁 ,而不用共享锁(可以查看数据,但不能删除数据)
13.   begin tran----开始事务
14.   select * from 商品信息 with(holdlock) ----实行(holdlock)表级锁,即共享锁
15.   waitfor delay ‘00:00:15‘---锁定的的时间
16.   commit tran----提交事务
Read uncommitted:不发出共享锁,也不接受独占锁,级别最小,跟nolock相同,可以在事务结束前更改数据
Repeatable read:将锁定查询中的所有数据,以防止其他用户更改
Serializable:将在数据集上放置一个范围锁,以防止其他用户在事务完成前将行数据插入数据集内或更新数据集中的数据信息,与HOLDLOCK一样。Serializable并发级别较低
Sql语句操作
Create database 数据库名称
----设置数据库文件
On
(
 Name=数据库名称_date,---设置数据库名称
Filename=’c:\ 数据库名称_date.mdf’,----------设置数据库文件的保存位置
Size=15,------数据库初始大小
Maxsize=30,----------数据库最大值
Filegrowth=5----数据库的增量
)
---设置日志文件
Name=数据库名称_log,---设置日志文件名称
Filename=’c:\ 日志名称_date.mdf’,----------设置日志文件的保存位置
Size=15,------日志初始大小
Maxsize=30,----------日志最大值
Filegrowth=5----日志的增量
 
Alert database数据库名称
{add file(name…..)
Remove file 数据组名称
Add file 数据组名称
Add log file(name…..)
Remove filegroup数据组名称
Modify file(name…….)
Modify name =new数据库名称
Collate ---表示用于修改数据库的 排序规则
 
-----------------------------------------------------------------
 
Alert database 数据库名称
Modify flie
Name=数据库名称_date,--- 修改数据库名称
Size=15,------ 修改数据库初始大小
Maxsize=30,----------数据库最大值
Filegrowth=5----数据库的增量
 
Drop database 数据库名称
Sp_detach_db @dbname=‘数据库名称‘
Sp_attach_db @dbname=‘数据库名称‘,
@filename1=’c:\数据库名称_date.mdf’,----指定数据库文件位置
@filename2=’c:\数据库名称.ldf ’---------指定日志文件位置
Sql语句表操作
Create table 表名称
字段一 字段数据类型,
字段二 字段数据类型…………..
Alert table 表名称
(
Add 列名 数据类型----添加列
Or drop column 列名 ---删除列
Or alert column 列名 要修改的值 ----修改列
)
Drop table 表名
Sp_rename 旧表名,新表名