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