SQL笔记
根据李天生SQL Server 2008视频教程学习所得
——————————————————————————————————————————————————————————————————————————————
一、SQL Server讲解
1、标识种子和标识自增量:
标识种子:从多少开始增加
标识自增量:每次增加多少
2、T-SQL语句
创建数据库:create database 仓库1
删除(一个或者多个)数据库:drop database 仓库1,仓库2
更改数据库名称:exec sp_renamedb 仓库1,仓库2
3、关键字:一个表中在一列中绝对不会相同的字段
4、外部关键字:字段在本表中不是关键字,在其它表中是关键字
5、主键:一列,它的值能唯一区分表中每一行
主键可以使用多个列,所有主键应该满足以下条件:
满足以下条件:
* 任意两行都不具有相同的主键值
* 每个行都必须具有一个主键值(主键列不允许NULL值)
二、T-SQL语句详解
1、 创建数据库:
name 数据库名
filename 文件所在名
size 数据库文件初始化大小
maxsize 最大文件大小
filegrowth 增长率
2、创建表
建表设置主键,标识种子和标示量identity(1,1),初始自增AUTO_INCREMENT=100
create table user(id int identity(1,1) primary key auto_ increment);
3、修改表名称
exec sp_rename "techer","教师表"
4、增加表字段
alert from techer add Email VARCHAR(60) default ‘123@qq.com’
5、修改表字段
alert from techer
alert column A varchar(50)
6、删除表字段
drop column A
7、更改表字段记录值
update techer set A=100,B=100,C=100,D=100 where A=1
8、删除表记录
delete from techer where A=100
9、新增表字段记录
insert into techer(A,B,C,D) values(100,100,100,100)
10、使用IN关键字(表示字段值在指定集范围内的)
select * from techer where A in(0,1,100)
11、where子句检索是否为NULL值的列(IS NULL空值检查)
select name from HR_APPLYPLAN where orgId IS NULL;
select name from HR_APPLYPLAN where orgId IS NOT NULL;
12、where子句使用BETWEEN操作符检索(可能漏掉开始结束时间的数据)
select * from techer where createDate BETWEEN '2017-6-16' and '2017-6-23';
select * from techer where A NOT BETWEEN 20 and 100;
13、distinct关键字指示消除重复值,返回一列中不同的值——(放在列前面)
select distinct state from HR_APPLYPLAN;
14、嵌套查询
select * from techer where A>=(select A from techer where B=100)
15、 多表嵌套查询
select * from techer where A in(select A from techer where B=100)
16、排序检索的数据
* 子句控制检索数据的排序——(Order By)
select name from HR_APPLYPLAN order by createDate;
* Order By增加ALL关键字,分组会使用所有行的值,即使规定不能显示
* 子句控制检索数据按两个列排序
Select name from APPLYPLAN order by createDate,createUser;
* 子句控制检索数据按升序(asc)/降序(desc)排序
select * from HR_APPLYPLAN order by createDate desc;
select * from HR_APPLYPLAN order by createDate asc;
/
* 子句检索对多个列进行排序,则都需要指定关键字
select * from HR_APPLYPLAN order by createDate desc,name desc;
* 检索字段让其为中文名称显示
select personnel_No as 序号,personnel_name as 姓名 from rsgl_personnel_BaseInfo
* 检索前n行用top关键字:
select top 5 * from HR_APPLYPLAN;
* 检索前百分之n数据用percent关键字
select top 10 percent * from HR_APPLYPLAN;
* 使用完全限定表名列名的方式检索数据库
select HR_APPLYPLAN.name from wxtDb.dbo.HR_APPLYPLAN;
17、统计函数
① COUNT函数——只统计有内容的
统计所有记录行数
select COUNT(*) as 行数 from techer;
统计单独一列记录行数
select COUNT(name) as 行数 from techer;
② SUM函数——统计总和
select SUM(工资) as 工资 from techer;
③ AVG函数——统计列平均值
select AVG(年龄) as 年龄 from techer;
④ MAX函数——求列最大值
select MAX(工资) as 最高工资 from techer;
⑤ MIN函数——求列最小值
select MIN(工资) as 最低工资 from techer;
18、函数的综合运用(compute by)——排序的字段中要和分组的字段相同
select * from techer order by 名称,年龄 compute max(工资), min(工资), sum(工资), age(工资) by 年龄;
19、分组汇总(group by)——通过某字段分组(having为分组设定条件)
select 姓名,MAX(工资) as 最高工资 from techer group by 姓名 having SUM(工资)>5000;
20、谓词查询( exists )——exists判断有一个符合条件集合即可查询
select * as 最高工资 from techer where not exists(select * from techer where A=100);
21、谓词查询( any )——any集合中任意一个值
select * as 最高工资 from techer where 工资>any(select * from techer where A=100);
谓词查询( all )——all集合中所有值
select * as 最高工资 from techer where 工资>all(select * from techer where A=100);
22、检索表扩展
1、过滤数据
* where子句操作符说明
2、数据过滤
* 组合多个where子句检索(以多个AND子句或OR子句的方式)
select name from HR_APPLYPLAN where id>5 AND state=1;
* where子句组合使用OR子句,表示数据库匹配任一条件
select id,name,state from HR_APPLYPLAN where id<5 OR state=1;
* where子句组合AND和OR子句,会优先选择AND子句,需要使用”()”分组
优先级排序:not 》 and 》 or
select * from HR_APPLYPLAN where (id>10 OR id<5) AND state='0';
* where子句NOT操作符——(否定后面的所有条件)
select * from HR_APPLYPLAN where id NOT IN(5 ,7, 10);
3、通配符过滤
* LIKE操作符
百分号(%)通配符:(‘%’匹配不了以NULL做列值的行)
‘a%’ 以a起头的列值
‘%a%’ 列值包含a
‘%a’ 以a结束的列值
‘a%b’ 以a起头b结束的列值
select * from HR_APPLYPLAN where name like '%一%';
下划线(_)通配符:与’%’的作用一样,但是只能匹配单个字符而不是多个,所以可以使用多个下划线
select * from HR_APPLYPLAN where name like '第_年';
当值中存在百分号%或下划线_,使用escape运算符
select * from HR_APPLYPLAN where name like '%/%%' escape '/';
select * from HR_APPLYPLAN where name like '%*%%' escape '*';
以上SQL语句使用escape关键字指定字符解释通配符
* 正则表达式
进行OR匹配(类似OR操作符)
23、查询出的记录结果存储到另一个表中
select * into 教师表 from techer where name='于'
24、集合
①、原字段基础上更新表记录
update 教师表 set 姓名='教师表'+姓名
②、集合并运算(union)
select * from 教师表 union select * from techer
③、集合交运算(interset)
select * from 教师表 interset select * from techer
25、连接查询
①、普通连接查询
select * from student,techer where student.NO=techer.A
select * from student,techer where NO=A
②、超连接查询
1、内连接
select * from student inner join techer on student.NO=techer.A
2、左连接——保证左边表中所有记录都显示,不管是否满足后面条件
select * from student left join techer on student.NO=techer.A
3、右连接——保证右边表中所有记录都显示,不管是否满足后面条件
select * from student right join techer on student.NO=techer.A
4、全连接——左右两个表不管是否满足条件,都显示出来
select * from student full join techer on student.NO=techer.A
三、约束
四、T-SQL编程
①、数据类型
1、整数数据类型(Bigint)(Int)(Smallint)(Tinyint)
2、浮点数据类型(real)(Float)(Decimal)(Numreic)
3、二进制数据类型(Binary)(Varbinary)(Uniqueidentifier)
* 二进制大型对象(binary large object)——异常巨大的数据对象
4、逻辑数据类型(true)(false)
5、文本数据类型(Text)(Ntext)
6、图形数据类型(Image)
7、字符型数据类型(char)(nchar)(varchar)(nvarchar)
8、日期时间数据类型(DateTime)(SmallDateTime)
9、货币数据类型(Money)(SmallMoney)
10、自定义数据类型(SYSNAME)
11、可变数据与表数据类型(SQL-VARIANT)(TABLE)
②、局部变量
局部变量使用'@'声明
1、声明:使用declare
2、赋值:
Set:为单一变量赋值
DECLARE @A int,@B CHAR(60),@C CHAR(60)
Select:同时为多个变量赋值
SET @A=100
SELECT @B='于',@C='文杰'
3、输出:
Print:输出一个变量
Select:同时输出多个变量
print @A
SELECT @B,@C
③、全局变量
全局变量使用'@@'引用
④、注释
多行注释:/* abcde */
单行注释:--
⑤、程序块(就是'{}'):
Bigin … End
⑥、判断语句(使用and连接多条件):
IF @A>=80 and @B<=90
ELSE
case判断语句(直接使用返回值赋值给变量):
set @C=
case when @A>=80 and @B<=90 then '良好'
when @A>=90 and @B<=100 then '优秀'
else '不及格'
end
while判断语句(输出80以内所有整数):——整数与字符串之间连接用','
while @A<=80
bigin
set @B=@B+@A
set @A=@A+1
end
select '80以内所有整数:',@B
循环退出语句:
break、continue
⑦、goto语句:跳转到指定标签,执行语句
goto AAA
print '好'
if @A<80 goto AAA
五、函数
1、三角函数:SIN(浮点数)、COS(浮点数)、TAN(浮点数)、COT(浮点数)
2、反三角函数:ASIN(浮点数)、ACOS(浮点数)、ATAN(浮点数)
3、角度弧度转换函数:角度转弧度:DEGREES —— 弧度转角度:RADIANS
4、幂函数:EXP(浮点数)、LOG(浮点数)、LOG10(浮点数)、SQRT(浮点数)
5、取近似值函数:CELLING(数字)、FLOOR(数字)、ROUND(数字,整型)
6、符号函数:ABS(数字)、SIGN(数字)
7、随机函数(0~1之间的一个浮点数):RAND()
8、圆周率函数:PI()
9、字符串函数:
字符转ASCII码值:ASCII()
ASCII码值转字符:CHAR()
字符串全转换成大写:UPPER()
字符串全转换成小写:LOWER()
数字转换成字符:str(数字,转换后长度,保留小数位)
10、字符串长度函数:LEN()
去除字符串空格函数:去除头部:ltrim() —— 去除尾部:rtrim()
截取字符串函数:
从左到右:LEFT(字符串,字符个数)
从右到左:RIGHT(字符串,字符个数)
指定截取:SUBSTRING(字符串,开始位置,字符个数)
重复字符函数:REPLICATE(字符串,重复次数)
反向函数:REVERSE(字符串)
替换函数:REPLACE(字符串,替换前字符,替换后字符)
指定替换函数:STUFF(字符串,开始位置,结束位置,替换字符串)
加空格函数:space(空格数)
数字类型转换函数: cast(转换变量 as 转换数据类型)
convert(转换数据类型,转换变量)
11、日期函数:
系统时间:GETDATE()
年月日:year(GETDATE())、month()、day()
提取日期部分:
DATENAME(提取部分, GETDATE())——返回值:字符型
DATEPART(提取部分, GETDATE())——返回值:整型
日期加减:DATEADD(DAY,数字,GETDATE())——数字正数是增加,负数减少
日期之间的差:DATEDIFF(DAY,开始日期,结束日期)
12、创建函数:
create Function 函数名(@A int) returns int
as
begin
return @A
end
调用函数: select dbo.函数名(参数)
修改函数: alter function 函数名()
六、存储过程
七、游标
八、触发器
九、数据库安全与备份
十、报表
SQL Server报表是完整的基于服务器的平台,可以创建、管理和发布报表
使用SQL Server自带工具SQL Server Business实现数据库报表
——————————————————————————————————————————————————————————————————————————————
待续。。。。。。。