SQL Server之 (二) SQL语句 模糊查询 空值处理 聚合函数

(二) 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();

时间: 2024-10-10 09:13:51

SQL Server之 (二) SQL语句 模糊查询 空值处理 聚合函数的相关文章

sqlserver 模糊查询,连表,聚合函数,分组

1 use StudentManageDB 2 go 3 select StudentName,StudentAddress from Students 4 where StudentAddress like '天津%' 5 6 select StudentName,StudentAddress from Students 7 where StudentName like '%小%' 8 9 select * from ScoreList 10 where CSharp between 80 a

【SQL Server性能优化】运用SQL Server的全文检索来提高模糊匹配的效率

原文:[SQL Server性能优化]运用SQL Server的全文检索来提高模糊匹配的效率 今天去面试,这个公司的业务需要模糊查询数据,之前他们通过mongodb来存储数据,但他们说会有丢数据的问题,我从业务上了解到,显然对他们公司而言,丢数是绝对不能允许的. 另外,他们说之前也用过SQL Server的全文检索,但速度不够快,不如用mongodb快,当然我不太清楚他们所谓快的具体定义,比如查询只需要1秒,还是1分钟.他们的系统现在采用的是SQL Server,通过复制来实现高可用性,因为他们

SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)

为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程. 关系和存储引擎 如图所示,SQL Server被分为2个主要引擎:关系引擎和存储引擎.关系引擎有时也被称为查询处理器,因为它的主要功能是查询优化和执行.它包含检查查询语法和准备查询树的命令解析器:查询优化器毫无疑问是任何数据库系统中皇冠上的宝石:查询执行器对执行(查询计划)负责. 存储引擎对所有数据输入.输出管理负责.它包

SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)

计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓存的计划,然后命令分析器(Command Parser)在T-SQL基础上生成一个查询树(query tree).查询树(query tree)的内部结构是通过树上的每个结点代表查询中需要的执行操作.这个树然后被传给查询优化器(Query Optimizer)去处理.我们的简单查询没有一个存在的计划

SQL Server快速生成SQL增删改查语句

你还在手敲代码生成SQL语句吗?你还在为因为马虎出错的SQL语句而感到无语吗?你还在为不知怎样表达复杂的SQL语句而纠结吗?如果你的回答为"是",那你就OUT啦,快来试试应用SQL Server资源管理器快速生成SQL语句吧. 首先,打开SQL Server2008,在菜单栏"查询"下拉菜单中找到"在编辑器中设计查询",如下图: 在打开的查询设计器窗口中添加要进行操作的数据库表. 在添加的表内下方空白部分右键单击鼠标,在弹出菜单中单击"

SQL总结(二)连表查询

SQL总结(二)连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两个或多个 SELECT 语句的结果集. UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是

SQL Server FOR XML PATH 语句的应用---列转行

经常在论坛看到高手使用了 for xml path,由于是搜索一下,记录了详细的使用方法.在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例. DECLARE @TempTable table(UserID int , UserName nvarchar(50));insert into @TempTable (UserID,UserName) values (1,'a')insert into @TempTable (UserID

SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)

原文:SQL Server 2012:SQL Server体系结构--一个查询的生命周期(第3部分)(完结) 一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法(Access Methods)前,更新操作和刚才SELECT语句流程是一模一样的. 这次存取方法(Access Methods)需要修改数据,因此在I/O请求传递前,修改的细节要存放于硬盘

MS SQL Server带有时间的记录怎样查询

原文:MS SQL Server带有时间的记录怎样查询 比如某一张表[A]有一个保存日期包含时间字段[B],如果以这个段[B]作查询条件对数据记录进行查询.也我们得花些心思才能查询到我们想得到的记录. 现在我们需要查询这天2014-06-21的所有记录: SELECT * FROM [A] WHERE [B] = '2014-06-21' 上面的语法,将查询不到任何记录.也许会有网友想到使用BETWEEN: SELECT * FROM [A] WHERE [B] BETWEEN '2014-06