SQL常用語句

来源:http://www.cnblogs.com/xiaz/archive/2016/03/26/5324251.html
-Advertisement-
Play Games

...


1、資料庫約束為了保證數據的完整性(正確性)而實現的一套機制
2、非空約束
3、主鍵約束(pk)唯一且不為空
4、預設約束(df)唯一,允許為空,但只能出現一次
5、檢查約束(ck)範圍以及及格式限制
6、外鍵約束(fk)表關係
7、增加外鍵約束時,設置級聯更新,級聯刪除:

主鍵就是數據行的唯一標識。不會重覆的列才能當主鍵。一個表可以沒有主鍵,但是會非常難以處理,因此沒有特殊理由表都
要設定主鍵
主鍵有兩種選用策略:業務主鍵和邏輯主鍵,業務主鍵是使用沒有業務意義上的欄位做主鍵,比如身份證號,銀行賬號,邏輯
主鍵是沒有任何業務意義的欄位做主鍵,完全給程式看的,業務人員不會看的數據,因此很難保證業務主鍵不會重覆,(身份證號重覆)
不會變化(身份證重覆)、不會變化(賬號升位),因此推薦用邏輯主鍵
 ----------------------------------------------------------- -----------------------------------------------------------
sql(SqlServer)編程基本語法
 一、定義變數
 --簡單賦值
declare @a int
set @a=5
print @a
  -----------------------------------------------------------
--使用select語句賦值
declare @user1 nvarchar(50)
select @user1='張三'
print @user1
declare @user2 nvarchar(50)
select @user2 = Name from ST_User where ID=1
print @user2
  -----------------------------------------------------------
--使用update語句賦值
declare @user3 nvarchar(50)
update ST_User set @user3 = Name where ID=1
print @user3
 -----------------------------------------------------------
二、表、臨時表、表變數
--創建臨時表1
create table #DU_User1
(
     [ID] [int]  NOT NULL,
     [Oid] [int] NOT NULL,
     [Login] [nvarchar](50) NOT NULL,
     [Rtx] [nvarchar](4) NOT NULL,
     [Name] [nvarchar](5) NOT NULL,
     [Password] [nvarchar](max) NULL,
     [State] [nvarchar](8) NOT NULL
);
 -----------------------------------------------------------
--向臨時表1插入一條記錄
insert into #DU_User1 (ID,Oid,[Login],Rtx,Name,[Password],State) values (100,2,'LS','0000','臨時','321','特殊');
  -----------------------------------------------------------
--從ST_User查詢數據,填充至新生成的臨時表
select * into #DU_User2 from ST_User where ID<8
  -----------------------------------------------------------
--查詢並聯合兩臨時表
select * from #DU_User2 where ID<3 union select * from #DU_User1
  -----------------------------------------------------------
--刪除兩臨時表
drop table #DU_User1
drop table #DU_User2
  -----------------------------------------------------------
--創建臨時表
CREATE TABLE #t
(
    [ID] [int] NOT NULL,
    [Oid] [int] NOT NULL,
    [Login] [nvarchar](50) NOT NULL,
    [Rtx] [nvarchar](4) NOT NULL,
    [Name] [nvarchar](5) NOT NULL,
    [Password] [nvarchar](max) NULL,
    [State] [nvarchar](8) NOT NULL,
)
  -----------------------------------------------------------
--將查詢結果集(多條數據)插入臨時表
insert into #t select * from ST_User
--不能這樣插入
--select * into #t from dbo.ST_User
 -----------------------------------------------------------
--添加一列,為int型自增長子段
alter table #t add [myid] int NOT NULL IDENTITY(1,1)
--添加一列,預設填充全球唯一標識
alter table #t add [myid1] uniqueidentifier NOT NULL default(newid())
 
select * from #t
drop table #t

---------------------------------------------------------------------------

--給查詢結果集增加自增長列
 
--無主鍵時:
select IDENTITY(int,1,1)as ID, Name,[Login],[Password] into #t from ST_User
select * from #t
 
--有主鍵時:
select (select SUM(1) from ST_User where ID<= a.ID) as myID,* from ST_User a order by myID
---------------------------------------------------------------------------

--定義表變數
declare @t table
(
    id int not null,
    msg nvarchar(50) null
)
insert into @t values(1,'1')
insert into @t values(2,'2')
select * from @t
---------------------------------------------------------------------------
三、迴圈

--while迴圈計算1到100的和
declare @a int
declare @sum int
set @a=1
set @sum=0
while @a<=100
begin
    set @sum+=@a
    set @a+=1
end
print @sum
---------------------------------------------------------------------------
四、條件語句
--if,else條件分支
if(1+1=2)
begin
    print ''
end
else
begin
    print ''
end
 
--when then條件分支
declare @today int
declare @week nvarchar(3)
set @today=3
set @week=case
    when @today=1 then '星期一'
    when @today=2 then '星期二'
    when @today=3 then '星期三'
    when @today=4 then '星期四'
    when @today=5 then '星期五'
    when @today=6 then '星期六'
    when @today=7 then '星期日'
    else '值錯誤'
end
print @week
---------------------------------------------------------------------------
五、游標

declare @ID int
declare @Oid int
declare @Login varchar(50)
 
--定義一個游標
declare user_cur cursor for select ID,Oid,[Login] from ST_User
--打開游標
open user_cur
while @@fetch_status=0
begin
--讀取游標
    fetch next from user_cur into @ID,@Oid,@Login
    print @ID
    --print @Login
end
close user_cur
--摧毀游標
deallocate user_cur
 
---------------------------------------------------------------------------
六、觸發器
觸發器中的臨時表:

  Inserted 
  存放進行insert和update 操作後的數據 
  Deleted 
  存放進行delete 和update操作前的數據

--創建觸發器
---------------------------------------------------------------------------
Create trigger User_OnUpdate 
    On ST_User 
    for Update
As
    declare @msg nvarchar(50)
    --@msg記錄修改情況
    select @msg = N'姓名從“' + Deleted.Name + N'”修改為“' + Inserted.Name + '' from Inserted,Deleted
    --插入日誌表
    insert into [LOG](MSG)values(@msg)
     
--刪除觸發器
drop trigger User_OnUpdate
---------------------------------------------------------------------------
七、存儲過程
--創建帶output參數的存儲過程
CREATE PROCEDURE PR_Sum
    @a int,
    @b int,
    @sum int output
AS
BEGIN
    set @sum=@a+@b
END
 
--創建Return返回值存儲過程
CREATE PROCEDURE PR_Sum2
    @a int,
    @b int
AS
BEGIN
    Return @a+@b
END
     
--執行存儲過程獲取output型返回值
declare @mysum int
execute PR_Sum 1,2,@mysum output
print @mysum
 
--執行存儲過程獲取Return型返回值
declare @mysum2 int
execute @mysum2= PR_Sum2 1,2
print @mysum2
---------------------------------------------------------------------------
八、自定義函數

  函數的分類:

    1)標量值函數

    2)表值函數

        a:內聯表值函數

        b:多語句表值函數

    3)系統函數

  --新建標量值函數
create function FUNC_Sum1
(
    @a int,
    @b int
)
returns int
as
begin
    return @a+@b
end
 
--新建內聯表值函數
create function FUNC_UserTab_1
(
    @myId int
)
returns table
as
return (select * from ST_User where ID<@myId)
 
--新建多語句表值函數
create function FUNC_UserTab_2
(
    @myId int
)
returns @t table
(
    [ID] [int] NOT NULL,
    [Oid] [int] NOT NULL,
    [Login] [nvarchar](50) NOT NULL,
    [Rtx] [nvarchar](4) NOT NULL,
    [Name] [nvarchar](5) NOT NULL,
    [Password] [nvarchar](max) NULL,
    [State] [nvarchar](8) NOT NULL
)
as
begin
    insert into @t select * from ST_User where ID<@myId
    return
end
 
--調用表值函數
select * from dbo.FUNC_UserTab_1(15)
--調用標量值函數
declare @s int
set @s=dbo.FUNC_Sum1(100,50)
print @s
 
--刪除標量值函數
drop function FUNC_Sum1
 
---------------------------------------------------------------------------
談談自定義函數與存儲過程的區別:

一、自定義函數:

  1. 可以返回表變數

  2. 限制頗多,包括

    不能使用output參數;

    不能用臨時表;

    函數內部的操作不能影響到外部環境;

    不能通過select返回結果集;

    不能update,delete,資料庫表;

  3. 必須return 一個標量值或表變數

  自定義函數一般用在復用度高,功能簡單單一,爭對性強的地方。

二、存儲過程

  1. 不能返回表變數

  2. 限制少,可以執行對資料庫表的操作,可以返回數據集

  3. 可以return一個標量值,也可以省略return

   存儲過程一般用在實現複雜的功能,數據操縱方面。
---------------------------------------------------------------------------

請在地址欄內輸入 about:config,然後將項 signed.applets.codebase_principal_support 值該為true

---------------------------------------------------------------------------

修改列類型
alter table 表名
alter column 列名 要修改的類型

添加列
alter table 表名
add 要添加列名 類型
---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
1、基本操作
關於列類型
    文本類型:區分var首碼、n首碼
    對於不帶var的情況、表示不可變長度,如果賦的值不夠指定的位數,則末尾使用空格補齊
    對於帶var的情況,表示可變長度,如果賦的值不夠指定的位數,以實際賦的值為準
---------------------------------------------------------------------------
對於unicode這個編碼格式
    如果是帶了n的,則每個字元占2個位元組
    如果不帶n的,則英文字元占1個位元組,中文位元組占兩個位元組

---------------------------------------------------------------------------
2、表的創建
做主鍵
做標識:由系統自己維護這個列的值
做非空約束
---------------------------------------------------------------------------



---------------------------------------------------------------------------

Employee eID:員工對應ID
Task tID:任務表
外鍵
對應關係:1對1,1對多,多對多
1對1的關係:這種數據存儲到雙方任一表裡面都行
1對多的關係:將關係的數據存儲到多的一方的表裡面
多對多的關係:講關係的數據存儲到多的一方的表裡
多對多的關係,單獨建立一個表,用於存儲關係
根據關係創建出來的列所存儲的信息,需要你滿足第3NF
    示例:部門-員工的關係是1:n
只要在員工表中建立了eDId這個列,就已經存儲了部門與員工的關係
外鍵只是一個約束,保證數據的有效性
外鍵需要建立在關係列上

多對多練習
    新建工作任務表Task:工作名稱
    經分析,員工表-任務表的對應關係是m:n
---------------------------------------------------------------------------
約束:
主鍵約束:(PK)primary key constraint唯一且不為空
唯一約束:(UQ)unique constraint唯一,允許為空,單隻能出現一次
預設約束: (DF)default constraint預設值
檢查約束: (CK)check constraint範圍及格式限制
外鍵約束: (FK)foregin key constraint 表關係
------------------------------------------------------
增加外鍵約束時,設置級聯更新,級聯刪除:
[on update {no actino|cascade|set null|set default} ]
[on delete {no actino|cascade|set null|set default} ]
------------------------------------------------------
sql結構化查詢語言,是關係資料庫管理系統的標準語言。
sql語言是和dbms"交談"專用的語句,不同的dbms都對應sql語句。
sql語句中字元串用單引號表示,單等號。
sql主要分3中:
DDL(數據定義語言)、
DML(數據操作語言)、
DCL(資料庫控制語言)、
------------------------------------------------------
DDL包含:
創建表 create table,
刪除表 drop table,
修改表 alter table------------------------------------------------------
添加約束(constraint )
格式:
    alter table 表名
    add constraint  約束種類 
修改列類型
    alter table 表名
    alter column 列名 類型9
------------------------------------------------------
腳本一:DDL
create創建 alter約束 drop刪除
database table column
約束關鍵字
腳本二:DML  數據操作
insert into 表名(列名1,列名2...)values(值1,值2)
delete 表名 set 列名1= 值1,列名2=值2,...[where]
update [from]表名 [where ...]
    註意:一般不使用物理刪除,一旦刪除不可恢復
    建議使用邏輯刪除,即為表加一個表示"是否刪除"的bit類型的列
    刪除後,編號繼續向後排,不會恢復到種子值
    truncate table 表名:清空表,將所有數據刪除的執行效率要比delete高
    使用這種方法刪除後,再插入數據時,標識會恢復到種子值
select

-----------------------------------------------------------------------------
資料庫的名詞有哪些?
     資料庫管理系統DBMS
     表table
     列column
     欄位field
     行row
     範式:
     第一範式:列的原子性
     第二範式:不可重覆性
     第三範式:引用其他表的主鍵信息
約束:
    問:包含哪些約束
    主鍵約束:primary key
    唯一約束:uniqun
    外鍵約束:foreign key
    預設約束:default
    非空約束:not null
    檢查約束:check
    
    
存儲過程:可以理解為方法
if object_id('up_dent','p')is not null

create procecure dent
as
select * from dent
go
exec dent


---------------------------------------------------------------------------
---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Oracle存儲過程基本語法 存儲過程 1 CREATE OR REPLACE PROCEDURE 存儲過程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle資料庫去創建一個叫做skeleton ...
  • ...
  • 1 關於資料庫索引 主索引是候選索引的特例,能唯一標識一條記錄,只能由一個欄位組成。一個表只能建立一個主索引。 主索 引的關鍵字絕對不允許有重覆值。 2.候選索引也能唯一標識一條記錄,但不一定只由一個欄位組成,可以由兩個或兩個以上欄位組成,一個表可以建立多個候選索引。 它的值也 不允許在指定的欄位或 ...
  • 頻繁項集 的非空子集也必須是頻繁項集 非頻繁項集的任一超集也必然不是頻繁項集 如果K-維頻繁項集集合中包含單個項目i的個數小於K-1,則i不可能在頻繁K項集中(apriori演算法中並沒有用到這個性質,可以藉助這個性質來進行優化,性質會在後面舉例) ...
  • 1.創建表並插入數據 在Sql Server2008中創建測試資料庫Test,接著創建資料庫表並插入數據,sql代碼如下: 執行完上述sql代碼以後我們會發現在Test資料庫中多出了一張emp_pay表,資料庫表的內容如下圖所示: 2.無索引查找 從上圖我們可以看出資料庫中存儲的數據排列順序與我們插 ...
  • 在資料庫中單獨創建一張表,保存當前存儲狀態,“存儲過程” 設置訪問條件root初始值為“0” 如果root值不為0的時候就不可訪問併進行相關操作。 在事務執行前將root值設置為1,事務結束後將root值設置為0. ...
  • Transact-SQL中的存儲過程,非常類似於Java語言中的方法,它可以重覆調用。當存儲過程執行一次後,可以將語句緩存中,這樣下次執行的時候直接使用緩存中的語句。這樣就可以提高存儲過程的性能。 Ø 存儲過程的概念 存儲過程Procedure是一組為了完成特定功能的SQL語句集合,經編譯後存儲在數 ...
  • LINQ的書寫格式如下: from 臨時變數 in 集合對象或資料庫對象 where 條件表達式 [order by條件] select 臨時變數中被查詢的值 [group by 條件] Lambda表達式的書寫格式如下: (參數列表) => 表達式或者語句塊 其中: 參數個數:可以有多個參數,一個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...