zoukankan      html  css  js  c++  java
  • 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();

        

        

  • 相关阅读:
    第一部分 题目要求
    完全卸载oracle
    zabbix的面试题目总结
    性能优化之MySQL调优篇
    select与epoll、apache与nginx实现原理对比
    深度优化LNMP之PHP
    深度优化LNMP之Nginx (转)
    git常用命令
    ansible 安装与卸载软件
    java8两个List集合取交集、并集、差集、去重并集
  • 原文地址:https://www.cnblogs.com/sauerkraut/p/6661889.html
Copyright © 2011-2022 走看看