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

Posted 酸菜sauerkraut

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();

    

 

    

 

以上是关于SQL Server之 SQL语句 模糊查询 空值处理 聚合函数的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver2008从一个表中模糊查询并分页

jsp+sqlserver 2005模糊查询分页时候点击那个首页或下一页的时候老是查出所有

在SQL Server中用好模糊查询指令LIKE

SQL语句之查询(SELECT)

关于sql语句模糊查询

java模糊查询sql语句问题