創建表
create TABLE yftest
(
name NVARCHAR(30),
age int,
subject NVARCHAR(30),
score int
)
添加數據
insert into yftest
(name,age,subject,score) values ('yf',20,'語文',90)
修改數據
UPDATE yftest
set subject='英語'
where name='yf'
刪除數據
delete from yftest
where name='yf'
非空約束
alter table yftest
alter column name nvarchar(30) not null
主鍵約束
CONSTRAINT PK_ID PRIMARY KEY爲創建一個主鍵約束,PK_ID爲用戶自定義的主鍵約束名稱
create TABLE yftest
(
stuID int CONSTRAINT PK_ID PRIMARY KEY,
name NVARCHAR(30),
age int,
subject NVARCHAR(30),
score int
)
在現有表中創建主鍵約束
alter table yftest
ADD CONSTRAINT PRM_stuID PRIMARY KEY(stuID)
CONSTRAINT:創建約束的關鍵字
PRIMARY KEY:表示所創建約束的類型爲主鍵約束
CLUSTERED | NONCLUSTERED:是表示爲PRIMARY KEY 或UNIQUE約束創建聚集或非聚集索引的關鍵字。PRIMARY KEY約束默認爲CLUSTERED,UNIQUE約束默認爲NONCLUSTERED
刪除主鍵約束
alter table yftest
drop CONSTRAINT PRM_stuID
唯一約束UNIQUE用於強制實施列集中的唯一性。根據UNIQUE約束,表中的任何兩行都不能有相同的列值。主鍵也強制實施唯一性,但主鍵不允許NULL作爲一個唯一值。
創建表時創建唯一約束
create TABLE yftest
(
stuID int CONSTRAINT UQE_ID UNIQUE,
name NVARCHAR(30),
age int,
subject NVARCHAR(30),
score int
)
在現有表中創建唯一約束
alter table yftest
add CONSTRAINT UQE_ID UNIQUE(stuID)
刪除唯一約束
alter table yftest
drop CONSTRAINT UQE_ID
創建外鍵約束
通過定義FOREIGN KEY約束來創建外鍵,在外鍵引用中,當一個表的列被引用作爲另一個表的主鍵值的列時,就在兩表直接創建了鏈接。
create table cource
(
stuID int,
cource nvarchar(30),
score nvarchar(30),
CONSTRAINT FKEY_ID FOREIGN KEY(stuID)
REFERENCES yftest(stuID)
)
- 數據定義語言
- 數據控制語言
- 數據操縱語言
SELECT 子句
FROM 子句
where 子句
group by 子句
having 子句
order by 子句
變量
- 局部變量
局部變量的聲明需要使用DECLARE語句
DECLARE
{
@varaible_name datatype
}
declare @songname char(10)
- 局部變量賦值
SELECT @varible_name = expression
from table_name
where clause
select語句賦值
declare @student_number int
select @student_number=stuID from yftest
where name='yf'
print @student_number
局部變量賦值
SET @varible_name = expression
DECLARE @song char(20)
SET @song='I love flower'
流程控制
BEGIN…END語句用於將多個語句組合爲一個邏輯塊。
BEGIN
{sql_statement}
END
IF選擇判斷結構
IF<條件表達式>
{命令行|程序塊}
IF…ELSE
IF<條件表達式>
{命令行1|程序塊1}
ELSE
{命令行2|程序塊2}
CASE
使用CASE語句可以很方便的實現多重選擇的情況。
select *,備註=case
when score>=90 then '成績優秀'
when score<90 and score>=80 then '成績良好'
when score<80 and score>=70 then '成績及格'
else '不及格'
end
from DW.dbo.yftest
WHILE子句循環結構
WHILE<條件表達式>
BEGIN
<命令行|程序塊>
END
declare @n int,@sum INT
set @n=1
set @sum=0
while @n<=10
BEGIN
set @sum=@sum+@n
set @n=@n+1
END
print @sum
WHILE…CONTINUE…BREAK
循環結構WHILE子句還可以用CONTINUE和BREAK命令控制WHILE循環中語句的執行
WHILE<條件表達式>
BEGIN
<命令行|程序塊>
[break]
[CONTINUE]
[命令行|程序塊]
END
聚合函數對一組值進行計算並返回單一的值,通常聚合函數會與SELECT語句的GROUP BY子句一同使用,在與GROUP BY子句使用時,聚合函數會爲每一個組產生一個單一值,而不會爲整個表產生一個單一值。
LEFT(取左邊指定個數的字符)函數
LEFT函數返回字符串從左邊開始指定個數的字符。
LEFT(character_expression,integer_expression)
select LEFT('明日科技有限公司',4)
LEN(返回字符個數)函數
LEN函數返回字符串表達式中的字符數。
REPLACE(替換字符串)函數
REPLACE函數將表達式中的一個字符串替換爲另一個字符串或空字符串後,返回一個字符表達式。
REPLACE(character_expression,searchstring,replacement)
select REPLACE('BEIJINGSHANGHAINANJING','NANJING','CHUZHOU') as '替換結果'
SUBSTRING(取字符串函數)
SUBSTRING(value_expression,start_expression,length_expression)
GETDATE(返回當前系統日期和時間)函數
GETDATE函數返回系統的當前日期。
select GETDATE() as '現在時間'
DATEDIFF(返回日期和時間的邊界數)函數
DATEDIFF函數用於返回日期和時間的邊界數
DATEDIFF(datepart,startdate,enddate)
select DATEDIFF(DAY,'2019-10-12','2019-12-12') as 時間差距
轉換函數
CAST函數
CAST函數用於將某種類型的表達式顯示轉換爲另一種數據類型。
CAST(expression AS data_type)
select ROW_NUMBER() OVER (PARTITION by carrier_code_1+CAST(carrier_code_1_cave as VARCHAR(10)) order by collect_time desc) as rows,carrier_code_1,carrier_code_1_cave,circle_code from DW.dbo.t_tb_txtcollect_60
CONVERT函數
CONVERT函數與CAST函數的功能相似。可以按照指定的格式將數據轉換爲另一種數據類型。
CONVERT(data_type,expression,style)
select
getdate() as UnconvertedText,
CAST(GETDATE() as datetime) as UsingCast,
CONVERT(datetime,GETDATE(),126) AS UsingConvertFrom_ISO0601
UNION ALL合併表
union加上關鍵字ALL,功能是不刪除重複行也不對行進行自動排序。
嵌套查詢
嵌套查詢是指將一個查詢塊嵌套在另一個查詢塊的where子句或HAVING短語的條件中的查詢。
select * from Student
where Sno=(select Sno from SC where Grade>90)
帶IN的嵌套查詢
where 查詢表達式 IN(子查詢)
select * from Student
where Sno in (select Sno from SC where Grade>90)
帶EXISTS的嵌套查詢
select * from Student
where EXISTS
(select Sno FROM SC WHERE Student.Sno=SC.Sno)
聯結多表
SELECT fieldlist
FROM table1,table2,table3...
where table1.column=table2.column
and table2.column=table3.column and
使用CASE函數進行查詢
CASE函數用於計算條件列表並返回多個可能結果表達式之一。
CASE函數具有以下兩種格式:
1.簡單CASE函數將某個表達式與一組簡單表達式進行比較以確定結果。
2.CASE搜索函數計算一組布爾表達式以確定結果
SELECT stuID,name=
CASE name
when 'yf' then 'yangfei'
when 'qq' then 'qianqian'
when 'lb' then 'liubei'
else 'error'
END,
age,
subject,
score
from DW.dbo.yftest
update yftest
set score=
case when age>18 THEN score-1
when age <18 then score+1
when age=18 then 60
end
identity表示該字段的值會自動更新,不需要我們維護,通常情況下我們不可以直接給identity修飾的字符賦值,否則編譯時會報錯
2.語法
列名 數據類型 約束 identity(m,n)
m表示的是初始值,n表示的是每次自動增加的值
如果m和n的值都沒有指定,默認爲(1,1)
要麼同時指定m和n的值,要麼m和n都不指定,不能只寫其中一個值,不然會出錯