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

    

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM