(二) SQL语句 模糊查询 空值处理 聚合函数
自己学习笔记,转载请注明出处,谢谢!---酸菜
SQL :结构化查询语言(Structured Query Language),关系数据库管理系统的标准语言.
Sybase与Mircosoft对标准SQL做了扩展:T-SQL (Transact-SQL);
注:①SQL对大小写的敏感取决于排序规则,一般不敏感;
②SQL对单引号的转义,用两个单引号来表示一个单引号;
③SQL执行顺序: 1→2→3→4
select * --------------------------------3
from Users--------------------------1
where UserAge>20------------2
order by UserAge desc----4
1.SQL语句创建数据库
create database MyDataBase
2.SQL语句删除数据库
drop database MyDataBase
3.SQL语句创建数据库时,设置一些参数选项
create database MyDataBase
on primary
(
---配置主数据文件选项
name=‘MyDataBase‘,---主数据文件的逻辑名
filename=‘C:/MyDataBaseOne.mdf‘,---主数据文件的实际保存路径
size=5MB,---主数据文件初始大小
maxsize=15MB,---主数据文件的最大大小
filegrowth=20%---主数据文件的增长量
---注:最后一个选项 不用逗号结尾
)
log on
(
---配置日志文件的选项
name=‘MyDataBase_log‘,---日志文件的逻辑名
filename=‘C:/MyDataBase_log.ldf‘,---日志文件的实际保存路径
size=5mb,---日志文件的初始大小
filegrowth=20%---日志文件的增长方式
)
4.SQL语句在对应数据库中创建/删除表
use database MyDataBase
create table Users
(
UserID int identity(1,1) primary key,---主键自动不为空,所以不用手动not null
UserCode varchar(10) ,----默认可为空
UserGender varchar(2),
UserAge int,
UserDeptID int not null,
UserName nvarchar(50) not null---(null:不允许为空)
---最后一列不用加逗号
)
use database MyDataBase
drop table Users
5.SQL语句----Insert 插入数据
insert into Users (UserCode,UserName) values(‘1001‘,‘Tom‘)
insert into Users(‘1002‘,‘Jerry‘)
①默认不可向表中的自增列插入数据;
②如果向表中全部列(除自增列外)插入数据,那么可以省略列名,同时必须保证插入值顺序和列表列顺序一致;
③必须要向自增列插入值:启动表的"自动编号列"手动插入值的功能;
set Identity_Insert Users on
insert into Users(UserID,UserCode,UserName) values(500,‘1500‘,‘Bob‘)
set Identity_Insert Users off
注:自增列将以500接着自动增长,即再自动插入自增列值为:501;
④当前数据库排序规则不是简体中文时,需要插入简体中文时前加 N;
insert into Users values(‘1502‘,N‘鲍勃希尔‘);
6.SQL语句----Update更新数据
update Users set UserCode=‘1111‘,UserName=‘NoName‘
7.SQL语句----Delete/Truncate删除数据
delete from tableName where ... 删除对应条件的数据
truncate table tableName
①delete 删除数据后,再插入数据自增列没有恢复默认,继续编号.而truncate 删除数据后,自增列恢复默认值;
②truncate 后不可跟where语句,就是不会根据where条件来判断删除数据;
③truncate删除数据比delete效率高,因为delete记录日志比较详细多;
④truncate删除数据不会触发 触发器;
8.约束----保证数据的完整性
非空约束:在对应列后勾选是否为null项;
①设计器:在对应列后勾选是否为null项;
②t-sql: alter table Users alter column UserName varchar(50) not null;(以修改列方式)
主键约束:(PK)primary key constraint 唯一且不为空;
①设计器:右键对应列标志主键;在键中多一个PK项;
②t-sql:alter table Users add constraint PK_Users_UserID primary key (UserID);
外键约束:(FK)foreign key constraint 表关系;要在外键表中增加;增加外键约束时,设置级联更新/级联删除;
①设计器:任意右击→关系→添加→表和列的规范里设置;
②t-sql:alter table Users add constraint FK_Users_Depts foreign key (UserDeptID) references Depts(deptid);
唯一约束:(UQ)unique constraint 唯一允许为空,但只能有一个空值;
①设计器:任意右击→索引/键→唯一键
②t-sql:alter table Users add constraint UQ_Users_UserName unique(UserName);
默认约束:(DF)default constraint 默认值;
①设计器:选对应列,列属性中默认值/绑定中设置默认值;
②t-sql: alter table Users add constraint DF_Users_UserGender default(‘男‘) for UserGender;
检查约束:(CK)check constraint 范围以及格式限制;
①设计器:随意列右击→check约束→添加:表达式(约束条件)/名称(一般规则:CK_TableName_列名);
②t-sql:alter table Users add constraint CK_Users_UserGender check(UserGender=‘男‘or UserGender=‘女‘);
alter table Users add constraint CK_Users_UserAge check(UserAge>=18 and UserAge<=40);
删除约束: alter table Users drop constraint DF_Users_UserGender ,CK_Users_UserGender (逗号加要删除的约束)
批量增加约束:alter table Users add constraint CK_Users_UserGender check(UserGender=‘男‘or UserGender=‘女‘)
constraint CK_Users_UserAge check(UserAge>=18 and UserAge<=40)
创建表时增加约束:
create table Depts
(
deptID int identity(1,1) primary key,
deptName varchar(50) not null unique check(len(deptName)>2),
deptAllSum int check(deptAllSum>5 and deptAllSum<20),
deptAddress varchar(100) default(‘北京市海淀区中关村‘) ,
companyID int not null foreing key references CompanyInfo(CompanyID) on delete cascade ---级联删除
)
9.SQL语句----修改表结构
删除一列:alter table Users drop column UserCode;
新增一列:alter table Users add (column) UserCode varchar(50); (默认是增加列)
修改一列:alter table Users alter UserCode varchar(100);
10.distinct 关键字 :针对已查出整个结果集去重,不是针对于某个列
11.order by 排序
①select * from Users order by UserAge desc ---降序排序
②select * from Users order by UserAge asc ---升序排序
③select * from Users order by UserAge (asc)---默认是升序排序
④order by 必须一定在SQL语句最后;
⑤多列排序,order by UserCode desc,UserAge desc
⑥order by 后可用表达式来排序;
⑦order by 查出来的有序的内容,不再是集合;无序内容叫集合;有序内容叫游标;当查询出的数据被另一个查询使用,不能用order by ,因为order by 后就不是集合了.
11.Top 关键字:一般会跟order by一起用
select top 5 * from User order by UserAge desc
select top (2*2) * from User order by UserAge desc ---top后跟的不是数字,是表达式时必须用括号括起来,不然会报错
select top 50 percent * from User order by UserAge desc ---top 后取结果集的百分比 如果不是整数,会向上取整
12.常见聚合函数:max(最大)/min(最小)/sum(求和)/count(求条数)/avg(求平均值)
select max(UserAge) from Users
select min(UserAge) from Users
select count(*) from Users
select sum(age) from Users
select avg(age) from Users
注:①聚合函数不统计null值;avg不统计null值;sum认为null值为0;
②聚合函数统计分组后才能聚合,没有group by 的是默认把查出来的数据分成一个组了;
13.条件查询
①对于in/or查询,如果查询是连续几个数字,最好使用>=/<=/between...and...,会提高效率;between ..and.. 在什么之间. (闭集合,包含两端值 )
②模糊查询:针对字符串列的;
常用通配符:
<1>_(任意的单个字符): select * from Users where UserName like ‘张_‘ ; (带张两个字的) ‘张__‘(带张三个字的)
<2>%(匹配任意多个任意字符): select * from Users where UserName like ‘张%‘ ;(带张任意长度字符) (like ‘张%‘ and len(UserName)=2 等同于 like ‘张_‘ )
<3>[](筛选范围): select * from Users where UserName like ‘张[0-9]妹‘ /‘张[a-z]妹‘/‘张[0-9a-z]妹‘;[a-z]默认排序规则不区分大小写,所以大小写都可以出来
<4>^(非): select * from Users where UserName like ‘张[^0-9]妹‘ (中间不要数字)/not like ‘张[0-9]妹‘(不要带‘张[0-9]妹‘的数据);
注:<1>转义符: select * from Users where UserName like ‘%[%]%‘ 用[]转义%
<2>转义符:select * from Users where UserName like ‘%/[%‘ ESCAPE ‘/‘ ;用ESCAPE 来指定转义符
<3> like ‘a%‘ 可以使用索引;like ‘%a‘/like ‘%a%‘ 不可以使用索引 效率相对低;
14.null值处理
①SQL里null无法用=/!= 计算;
②is null /is not null;
③任何值与null计算,结果还都是null;
注:①常见错误:将截断字符串或二进制数据:插入数据长度大于字段设置的长度;
②快捷键:打开/关闭查询结果窗口:Ctrl+R;
③当前系统时间函数:getdate();