sqlserver語法

創建表

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 KEYUNIQUE約束創建聚集或非聚集索引的關鍵字。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)
)
  1. 數據定義語言
  2. 數據控制語言
  3. 數據操縱語言
SELECT 子句
FROM 子句
where 子句
group by 子句
having 子句
order by 子句

變量

  1. 局部變量
    局部變量的聲明需要使用DECLARE語句
DECLARE
{
@varaible_name datatype
}

declare @songname char(10)
  1. 局部變量賦值
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都不指定,不能只寫其中一個值,不然會出錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章