国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SQL server關(guān)鍵字】

這篇具有很好參考價值的文章主要介紹了【SQL server關(guān)鍵字】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

打怪升級:第81天
【SQL server關(guān)鍵字】

提前聲明:

  1. SQL中的語法不區(qū)分大小寫,下方博主為了書寫方便,并沒有刻意去將關(guān)鍵字大寫,希望不會對大家?guī)砀蓴_。
  2. 本篇文章為博主為了期末考試,考前一周臨時學習時進行的自我總結(jié),由于時間精力有限,并沒有寫的足夠全面,如果各位在學習過程中發(fā)現(xiàn)問題或有所疑問都可以在評論區(qū)提出,【SQL server關(guān)鍵字】會及時查看,感激不盡。

希望本篇文章可以為有需要的朋友提供幫助。

一、CREATE – 創(chuàng)建

創(chuàng)建數(shù)據(jù)庫與表

CREATE DATABASE testdb-- 創(chuàng)建  數(shù)據(jù)庫  數(shù)據(jù)庫名稱

use testdb
CREATE TABLE T1(
CID INT NOT NULL PRIMARY KEY,
CNAME VARCHAR(20) ,
CAGE INT
);
CREATE TABLE T2(...);
CREATE TABLE T3(...);
go

創(chuàng)建一個名為TEST14的數(shù)據(jù)庫,創(chuàng)建三個表T1、T2、T3,
表T1有三個列,分別為 ID、NUME、AGE,且ID列為主鍵,非空。


二、INSERT INTO + VALUES – 插入數(shù)據(jù)

insert into 公司
values ('g010', '哪兒都通快遞公司', 10)
go

【SQL server關(guān)鍵字】

插入操作可以同時插入多行數(shù)據(jù),通過逗號分割,示例:

insert into table1
values 
(data1, data1),
(data2, data2),
(data3, data3)
go

三、SELECT + FROM – 查找數(shù)據(jù)

1.SEKECT簡單了解

查找操作也是數(shù)據(jù)庫中十分重要的一個功能,可以根據(jù)用戶的需求,進行各種各樣的查找。

以下為最基本的查找模板:

SELECT 屬性1, 屬性2, ...        
FROM   table1, table2, ...
WHERE  查找條件    --  可選

查找學生表中,學號大于等于陳靈均同學的學號的同學。

select 學號, 姓名
from 學生
where 學號 >= ( select 學號  -- 小括號-子查詢
from 學生
where 姓名 ='陳靈均')

【SQL server關(guān)鍵字】

2.函數(shù)的使用

目標:
統(tǒng)計不同畢業(yè)去向的人數(shù)。
實現(xiàn):
使用group by 按照畢業(yè)去向分組,使用 count函數(shù),統(tǒng)計各個分組的行數(shù),并且給該列起一個新的列名 – 人數(shù)

SELECT 畢業(yè)去向, COUNT(*) AS 人數(shù)
FROM 學生
GROUP BY 畢業(yè)去向

【SQL server關(guān)鍵字】

3.選擇列表與group by子句的對應

選擇列表就是 select 后面跟著的一堆列名、表達式、聚合函數(shù)等。

select cid, count(*) as scount
	from sc
	group by cid

在這段代碼中,選擇列表中的表達式是 “cid, count( * ) as scount”,而 GROUP BY 子句中的表達式是 “cid”,它們不完全相同。但是這是合法的 SQL 查詢,因為 “cid” 是 GROUP BY 子句中的唯一列,而 “count( * ) as scount” 是一個聚合函數(shù),它將對每個分組計算 “cid” 列中的唯一值數(shù)量,并將結(jié)果命名為 “scount”。

在這個查詢中,“cid” 列用于確定分組,而 “count(*) as scount” 列用于顯示每個分組中 “cid” 列的唯一值數(shù)量。因此,這個查詢將返回每個 “cid” 值及其對應的唯一值數(shù)量。

總之,雖然選擇列表和 GROUP BY 子句中的表達式不完全相同,但它們的含義是一致的,因此這個查詢是合法的。

4.exists子查詢

如果子查詢需要返回多個列,你可以使用 EXISTS 子查詢來解決這個問題。EXISTS
子查詢只需要返回一個布爾值,因此可以用于檢查一個表中是否存在符合條件的記錄。下面是一個使用 EXISTS 子查詢的示例查詢:

SELECT *
FROM c
WHERE EXISTS (
    SELECT 1
    FROM sc
    WHERE sc.cid = c.cid
    GROUP BY sc.cid
    HAVING COUNT(*) >= 3
);

在這個查詢中,子查詢返回一個布爾值,指示是否存在至少 3 個學生選修了每個課程。如果子查詢返回 TRUE,則 EXISTS 子句將返回 TRUE,否則將返回 FALSE。因此,這個查詢將返回選修人數(shù)不少于 3 人的課程信息。

[ 注 ] :select這部分寫的有些混亂,在最后的《小小示例》中,有許多查找樣例參考。


四、UPDATE + SET – 更改數(shù)據(jù)

在 SQL Server 中,UPDATE 語句用于更新表中的現(xiàn)有記錄。它允許您更改表中的一行或多行數(shù)據(jù)。

下面是一些使用 UPDATE 語句的示例:

  1. 更新單個記錄:
UPDATE 表名
SET 列名 = 新值
WHERE 條件;

例如,如果您要將公司表中一個公司的招收人數(shù)改為10,則可以使用以下語法:

use 大學生畢業(yè)去向
update 公司
set 招收人數(shù) = 10
where 公司id = 'g090';

【SQL server關(guān)鍵字】

  1. 更新多個記錄:
UPDATE 表名
SET 列名 = 新值
WHERE 條件;

例如,如果您要將客戶表中的所有客戶的郵政編碼更改為新郵政編碼,則可以使用以下語法:

use 大學生畢業(yè)去向
update 公司
set 招收人數(shù) = 0

【SQL server關(guān)鍵字】

  1. 更新多個列:
UPDATE 表名
SET1 = 新值1,2 = 新值2,WHERE 條件;

例如,如果您要將客戶表中的某個客戶的電話號碼和郵政編碼同時更改,則可以使用以下語法:

UPDATE Customers
SET Phone = '123-456-7890', PostalCode = '12345'
WHERE CustomerID = 1;

五、ALTER + DROP、ADD-- 修改屬性

ALTER 是 SQL 中用于修改已經(jīng)存在的數(shù)據(jù)庫對象(如表、列、索引等)的關(guān)鍵字。常見的使用場景包括:

  1. 修改表的結(jié)構(gòu):可以使用 ALTER TABLE 語句來添加、修改或刪除表的列、約束(如主鍵、外鍵、唯一性約束等)等。

  2. 修改列的定義:可以使用 ALTER TABLE 語句來修改列的數(shù)據(jù)類型、長度、默認值等屬性。

  3. 修改索引:可以使用 ALTER INDEX 語句來修改已經(jīng)存在的索引的屬性,例如添加或刪除索引列、更改索引類型等。

  4. 修改視圖:可以使用 ALTER VIEW 語句來修改已經(jīng)存在的視圖的定義,例如更改視圖的查詢語句、視圖的列名等。

  5. 修改存儲過程、觸發(fā)器等:可以使用 ALTER PROCEDURE、ALTER TRIGGER 等語句來修改已經(jīng)存在的存儲過程、觸發(fā)器等對象的定義。

總之,ALTER 在 SQL 中是一個非常常用的關(guān)鍵字,用于修改已經(jīng)存在的數(shù)據(jù)庫對象,以滿足不同的需求。

  • 添加列
ALTER TABLE STU
ADD ID INT, SEX VARCHAR(10), SCH VARCHAR(50), TOTO VARCHAR(50) -- 逗號分割,創(chuàng)建多個列
GO
  • 刪除列
USE TEST14
ALTER TABLE STU
DROP COLUMN SWA
GO
  • 修改列屬性
USE TEST14
ALTER TABLE STU 
ALTER COLUMN ID VARCHAR(50) NOT NULL ; -- 修改列屬性
ADD CONSTRAINT pk_STU PRIMARY KEY(ID);    -- 設置為主鍵   pk_表名
GO

六、JOIN + ON-- 鏈接多個表

1. join初始

JOIN 是 SQL 中用于連接多個表的關(guān)鍵字。它將兩個或多個表中的行基于一個共同的列進行匹配,從而生成一個新的結(jié)果集。JOIN
通常需要指定連接條件,以確定哪些行應該被連接在一起。

常用的 JOIN 類型包括:

  • INNER JOIN:返回兩個表中匹配的行。
  • LEFT JOIN:返回左表中的所有行和右表中匹配的行。
  • RIGHT JOIN:返回右表中的所有行和左表中匹配的行。
  • FULL OUTER JOIN:返回左右兩個表中的所有行和匹配的行。

JOIN 的語法如下:

SELECT1,2, ...
FROM1
JOIN2 ON 連接條件
[JOIN3 ON 連接條件 ...]
WHERE 篩選條件

其中,JOIN 關(guān)鍵字后面跟著要連接的表名,ON 關(guān)鍵字后面指定連接條件,多個表之間可以使用多個 JOIN 進行連接。
最后使用 WHERE 子句對結(jié)果進行篩選。

需要注意的是,使用 JOIN 進行表連接時,應該確保連接條件是準確的,否則可能會得到不正確的結(jié)果。

示例:

USE 大學生畢業(yè)去向
select *
from 學生, 公司
where 去向id = 公司id  
GO

USE 大學生畢業(yè)去向
select *
from 學生
left join 公司 on 去向id = 公司id
where 公司id is not null             -- 篩選出第三個表中有對應公司的學生和公司信息
go

USE 大學生畢業(yè)去向
select *
from 學生
left join 公司 on 去向id = 公司id
go

【SQL server關(guān)鍵字】

2.inner join

Inner Join 和 Join 是 SQL 語言中的兩種 Join 操作,它們的區(qū)別在于:

  1. Inner Join 只返回兩個表中共有的記錄,而 Join 返回兩個表中所有的記錄。
  2. Inner Join 只返回滿足連接條件的記錄,而 Join 則返回所有記錄,其中未匹配的記錄將以 NULL 值填充

因此,Inner Join 可以看作是 Join 的一種特殊情況,它只返回兩個表中共有的記錄,而 Join 則返回兩個表中所有的記錄。

在實際應用中,Inner Join 更常用,因為通常我們只需要查詢兩個表中共有的記錄。
而 Join則需要在后續(xù)的數(shù)據(jù)處理中進行額外的過濾和處理,比較繁瑣。


七、分支語句

1.IF

IF 關(guān)鍵字用于控制流程,根據(jù)條件執(zhí)行不同的代碼塊。

IF語句的基本語法如下:

IF condition
BEGIN
    -- code to be executed if condition is true
END
ELSE
BEGIN
    -- code to be executed if condition is false
END

其中,condition是一個布爾表達式,如果為true,則執(zhí)行第一個BEGIN和END之間的代碼塊,否則執(zhí)行第二個BEGIN和END之間的代碼塊。您還可以使用ELSE IF子句來添加更多的條件分支。

以下是一個簡單的示例,演示如何在SQL Server中使用IF語句:

DECLARE @score INT = 80;

IF @score >= 90
BEGIN
    PRINT 'A';
END
ELSE IF @score >= 80
BEGIN
    PRINT 'B';
END
ELSE IF @score >= 70
BEGIN
    PRINT 'C';
END
ELSE
BEGIN
    PRINT 'F';
END

在這個例子中,我們聲明了一個變量@score,并使用IF語句根據(jù)不同的分數(shù)范圍打印不同的成績等級。如果@score大于或等于90,則打印’A’,否則檢查下一個條件分支,以此類推。

2.CASE

CASE 是 SQL 中的一種條件表達式,用于在查詢中根據(jù)條件返回不同的結(jié)果。

它的語法如下:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

其中,condition1condition2 等是條件表達式,result1、result2 等是對應條件成立時返回的結(jié)果,default_result 是所有條件都不成立時返回的默認結(jié)果。在 CASE 表達式中,可以包含多個 WHEN 子句,每個子句都可以有不同的條件和返回結(jié)果。

栗子1:獲取學生學號、姓名、考試科目以及考試成績,并且根據(jù)考試成績劃分等級。

select s.sid, sname, cid, score,
	case 
		when score >= 90 then  'a' 
		when score >= 80 then 'b'
		else 'c'
	end as grade

from s inner join sc on s.sid  = sc.sid

【SQL server關(guān)鍵字】

栗子2:因為課程號不方便我們查看,要求通過課程號為各個科目命名(假設sc表沒有存課程名)求各科平均成績


select
	case 
		when cid = 1 then 'course1' 
		when cid = 2 then 'course2'
		else 'other_course'
	end as grade, 
	avg(score) as course   -- 求均值
from sc 
group by
	case 
		when cid = 1 then 'course1' 
		when cid = 2 then 'course2'
		else 'other_course'
	end

【SQL server關(guān)鍵字】

3.IF 與 CASE 對比

CASE 表達式和 IF 語句雖然都是用于條件判斷和流程控制,但它們的語法和使用場景是不同的。

IF 語句通常用于程序中的控制流程,例如在編寫存儲過程或函數(shù)時,可以使用 IF 語句來判斷輸入?yún)?shù)的值,以便執(zhí)行不同的邏輯。而 CASE 表達式則是用于查詢語句中的條件判斷,可以根據(jù)不同的條件返回不同的結(jié)果集。


八、循環(huán)語句

1.WHILE

WHILE 循環(huán)是 SQL Server 中一種基于條件的循環(huán)結(jié)構(gòu),它可以在滿足指定條件的情況下重復執(zhí)行一段代碼塊。

WHILE 循環(huán)的語法如下:

WHILE condition
BEGIN
    -- Code block to be executed while condition is true
END

其中,condition 是一個邏輯表達式,用于指定循環(huán)的條件。只要 condition 的值為真,就會重復執(zhí)行 BEGINEND 之間的代碼塊。

在 WHILE 循環(huán)中,需要注意以下幾點:

  1. 必須在代碼塊中修改循環(huán)條件,否則循環(huán)會一直執(zhí)行下去,導致死循環(huán)。

  2. 可以在代碼塊中使用 BREAK 語句來提前結(jié)束循環(huán)。

  3. 可以在代碼塊中使用 CONTINUE 語句來跳過當前循環(huán),直接進入下一次循環(huán)。

  4. WHILE 循環(huán)通常與游標一起使用,用于處理從數(shù)據(jù)庫中檢索的記錄。

下面是一個簡單的 WHILE 循環(huán)示例,用于計算 1 到 10 的和:

DECLARE @i INT = 1
DECLARE @sum INT = 0

WHILE @i <= 10
BEGIN
    SET @sum = @sum + @i
    SET @i = @i + 1
END

SELECT @sum -- 輸出結(jié)果為 55

在這個例子中,我們首先定義了兩個變量 @i@sum,分別用于存儲計數(shù)器和累加器的值。然后使用 WHILE 循環(huán)重復執(zhí)行累加操作,直到計數(shù)器的值達到 10。最后輸出累加器的值,即 1 到 10 的和。

  • 變量
    在 SQL Server 中,變量可以用來存儲臨時數(shù)據(jù),以便在查詢或存儲過程中使用。變量必須在使用之前聲明,并且必須指定變量的數(shù)據(jù)類型。以下是一個聲明和使用變量的示例:
DECLARE @myVariable INT;
SET @myVariable = 10;
SELECT @myVariable;

在上面的示例中,我們聲明了一個名為 @myVariable 的整數(shù)類型變量,并將其設置為 10。然后,我們使用 SELECT 語句檢索變量的值。


2.FOR + TO

在 SQL Server 中,for 通常用于循環(huán)語句的控制,可以與 while 一起使用。for循環(huán)包括三個部分:初始化、循環(huán)條件和循環(huán)迭代。

其基本語法結(jié)構(gòu)如下:

DECLARE @counter INT = 0

FOR @counter = 1 TO 10
BEGIN
    -- 循環(huán)體
END

其中,@counter 變量被初始化為 0,然后在 for 循環(huán)中被設置為 1,循環(huán)條件為 @counter <= 10,循環(huán)迭代為 @counter = @counter + 1。在每次循環(huán)中,@counter 的值都會自動遞增,直到循環(huán)條件不再滿足為止。需要注意的是,for 循環(huán)僅在 SQL Server 2016 及以上版本中才支持,如果使用早期版本,則需要使用 while 循環(huán)來實現(xiàn)類似的功能。

FOR 循環(huán)和 WHILE 循環(huán)是 SQL Server 中兩種不同的循環(huán)結(jié)構(gòu),它們的用法和使用場景有所不同。

FOR 循環(huán)是一種基于計數(shù)器的循環(huán),通常用于執(zhí)行已知次數(shù)的循環(huán)操作。FOR
循環(huán)在執(zhí)行前需要明確指定循環(huán)次數(shù),然后在每次循環(huán)中遞增計數(shù)器的值,直到計數(shù)器達到指定的循環(huán)次數(shù)為止。FOR
循環(huán)通常用于處理固定數(shù)量的數(shù)據(jù),例如數(shù)組或表格。

WHILE 循環(huán)則是一種基于條件的循環(huán),通常用于執(zhí)行未知次數(shù)的循環(huán)操作。WHILE
循環(huán)在執(zhí)行前不需要指定循環(huán)次數(shù),而是在每次循環(huán)中檢查一個條件,只要條件為真,就會繼續(xù)執(zhí)行循環(huán)操作。WHILE
循環(huán)通常用于處理不確定數(shù)量的數(shù)據(jù),例如從數(shù)據(jù)庫中檢索的記錄。

總的來說,F(xiàn)OR 循環(huán)適合處理已知數(shù)量的數(shù)據(jù),
而 WHILE循環(huán)適合處理未知數(shù)量的數(shù)據(jù)。在實際應用中,需要根據(jù)具體的需求選擇合適的循環(huán)結(jié)構(gòu)。


九、DECLARE + CURSOR-- 游標

1.初識游標

游標是一種用于在 SQL Server 中遍歷結(jié)果集的機制。游標可以讓我們逐行地讀取結(jié)果集中的數(shù)據(jù),并對每一行數(shù)據(jù)進行處理。在 SQL
Server 中,使用游標需要以下步驟:

  1. 聲明游標:使用 DECLARE 語句聲明游標,并指定要遍歷的結(jié)果集。

  2. 打開游標:使用 OPEN 語句打開游標,準備開始遍歷結(jié)果集。

  3. 讀取數(shù)據(jù):使用 FETCH 語句讀取游標當前指向的行,并將數(shù)據(jù)存儲到變量中。

  4. 處理數(shù)據(jù):對于每一行數(shù)據(jù),可以進行相應的處理,例如輸出、更新等操作。

  5. 關(guān)閉游標:使用 CLOSE 語句關(guān)閉游標,釋放資源。

  6. 釋放游標:使用 DEALLOCATE 語句釋放游標占用的內(nèi)存空間。

2.游標的定義

最簡單的游標聲明語法如下:

DECLARE cursor_name CURSOR FOR
SELECT column1, column2, ...
FROM table_name

其中,cursor_name 是游標的名稱,table_name 是要查詢的表名,column1、column2 等是要查詢的列名。這條語句將創(chuàng)建一個游標,將查詢結(jié)果集中的所有行放入游標中,游標的指針初始位置為第一行。

3.見見豬跑

以下是一個示例代碼,用于讀取 student 表中的女生信息,并將第二個女同學的年齡改為 20:
(略看即可)

DECLARE female_cursor CURSOR FOR
SELECT name, age FROM student WHERE gender='female'

OPEN female_cursor

DECLARE @name VARCHAR(50), @age INT
FETCH NEXT FROM female_cursor INTO @name, @age

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 處理數(shù)據(jù)
    PRINT 'Name: ' + @name + ', Age: ' + CAST(@age AS VARCHAR(10))
    IF @@CURSOR_ROWS = 2
    BEGIN
        -- 修改第二個女同學的年齡為 20
        UPDATE student SET age = 20 WHERE CURRENT OF female_cursor
        PRINT 'Age updated to 20'
    END
    FETCH NEXT FROM female_cursor INTO @name, @age
END
CLOSE female_cursor
DEALLOCATE female_cursor

在上面的示例代碼中,我們使用 DECLARE 語句聲明了一個名為 female_cursor 的游標,用于遍歷 student 表中的女生信息。然后使用 OPEN 語句打開游標,使用 FETCH 語句讀取第一行數(shù)據(jù),并將數(shù)據(jù)存儲到 @name@age 變量中。在循環(huán)中,我們對每一行數(shù)據(jù)進行相應的處理,包括輸出、更新等操作。在讀取完所有數(shù)據(jù)后,使用 CLOSE 語句關(guān)閉游標,使用 DEALLOCATE 語句釋放游標占用的內(nèi)存空間。

4.吃“豬肉”

在 SQL Server 中,使用 FOR 關(guān)鍵字聲明游標時,它是用來指定游標的循環(huán)方式的。在 FOR
關(guān)鍵字后面指定了游標的循環(huán)方式,可以是 FORWARD_ONLY,SCROLLSTATIC,默認情況下為FORWARD_ONLY。

  • FORWARD_ONLY:指定游標只能向前滾動,不能回滾。這是最快的游標類型,因為它不需要額外的資源來維護游標位置。

  • SCROLL:指定游標可以向前和向后滾動,可以隨意定位到表中的任何位置。這種類型的游標需要額外的資源來維護游標的位置,因此比 FORWARD_ONLY 類型的游標慢。

  • STATIC:指定游標是靜態(tài)的,它不會隨著表的修改而改變。這種類型的游標可以提供一致的結(jié)果,但是需要較多的資源來維護游標。

例如,以下代碼聲明了一個 FORWARD_ONLY 類型的游標:

DECLARE myCursor CURSOR FORWARD_ONLY FOR
SELECT column1, column2, column3
FROM myTable

5.FETCH使用細節(jié)

@@FETCH_STATUS 是一個系統(tǒng)變量,用于檢查最近一次 FETCH 語句的執(zhí)行結(jié)果。
如果 FETCH 語句成功讀取了一行數(shù)據(jù),則 @@FETCH_STATUS 的值為 0。
如果 FETCH 語句沒有讀取到數(shù)據(jù),則 @@FETCH_STATUS 的值為 -1。
如果 FETCH 語句執(zhí)行出錯,則 @@FETCH_STATUS 的值為-2。
在使用游標時,通常需要在循環(huán)中檢查 @@FETCH_STATUS 的值,以便在讀取完所有數(shù)據(jù)后正確地退出循環(huán)。

在 SQL Server 中,可以使用 FETCH 語句來從游標中檢索數(shù)據(jù),并且可以使用 關(guān)鍵字來顯式地移動游標指針。

`FETCH` 語句有多種形式,可以使用 `FETCH NEXT` 語句來檢索下一行數(shù)據(jù),例如:

FETCH NEXT FROM cursor_name;  -- 如不顯示聲明,默認為 NEXT


可以使用 `FETCH PRIOR` 語句來檢索上一行數(shù)據(jù),例如:

FETCH PRIOR FROM cursor_name;


可以使用 `FETCH FIRST` 語句來檢索第一行數(shù)據(jù),例如:

FETCH FIRST FROM cursor_name;


可以使用 `FETCH LAST` 語句來檢索最后一行數(shù)據(jù),例如:

FETCH LAST FROM cursor_name;


此外,還可以使用 `FETCH ABSOLUTE``FETCH RELATIVE` 語句來檢索指定行號或相對位置的數(shù)據(jù),例如:

FETCH ABSOLUTE 5 FROM cursor_name;
FETCH RELATIVE 2 FROM cursor_name;

需要注意的是,游標的移動是有限制的,當游標移動到結(jié)果集的第一行或最后一行時,再次移動游標將不會有任何效果。此外,在使用游標時,還應該注意游標的關(guān)閉和釋放,以免占用過多的系統(tǒng)資源。


十、CREATE VIEW – 視圖

視圖(View)是一種虛擬的表,它不像物理表一樣存儲數(shù)據(jù),而是基于一個或多個物理表的查詢結(jié)果集來創(chuàng)建的。視圖可以看作是一個“虛擬表格”,它包含了從一個或多個表中查詢出來的數(shù)據(jù),并且可以像表一樣被查詢、過濾、排序等。

視圖的創(chuàng)建方式類似于查詢語句,它是基于一個或多個表的查詢結(jié)果集來創(chuàng)建的,可以包含任意的 SQL 語句,例如
SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY 等。

視圖可以使用 CREATE VIEW 語句來創(chuàng)建,語法如下:

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

其中,view_name 是視圖的名稱,column1, column2, ... 是要查詢的列,table_name 是要查詢的物理表,condition 是查詢條件。

創(chuàng)建視圖后,可以像查詢普通表一樣使用視圖。例如,可以使用以下語法來查詢視圖:

SELECT * FROM view_name;

在查詢視圖時,實際上是執(zhí)行了視圖定義中的 SELECT語句,并返回結(jié)果集。
可以使用視圖來簡化復雜查詢,提高查詢效率,增強數(shù)據(jù)安全性等。視圖可以多次使用,也可以在其他查詢語句中嵌套使用。

創(chuàng)建一個保存sc表中前兩名同學所有信息的視圖:

create view top_tow_sc
as
select top(2) * from sc order by score desc  -- 降序

視圖的使用:


select * from top_tow_sc;

select s.sid, s.sname, score from s join top_tow_sc on s.sid = top_tow_sc.sid;

【SQL server關(guān)鍵字】

一個視圖創(chuàng)建后可以當做實際的表來使用,并且可以多次使用。


十一、CREATE PROCEDURE – 存儲過程

存儲過程是一種預編譯的數(shù)據(jù)庫對象,可以在數(shù)據(jù)庫中創(chuàng)建和保存,由一組 SQL語句和流程控制語句組成。存儲過程可以接收參數(shù),執(zhí)行一系列操作,返回結(jié)果集或輸出參數(shù)。存儲過程通常用于實現(xiàn)復雜的業(yè)務邏輯,可以提高數(shù)據(jù)庫的性能和安全性,減少網(wǎng)絡傳輸?shù)臄?shù)據(jù)量。存儲過程還可以被其他程序或存儲過程調(diào)用,提高代碼的重用性和可維護性。
在SQL Server 數(shù)據(jù)庫系統(tǒng)中,存儲過程可以使用 Transact-SQL 語言編寫,并使用 SQL Server ManagementStudio 工具進行管理和調(diào)試。

CREATE PROCEDURE get_score  -- 創(chuàng)建存儲過程
@id int                     -- 一個變量
as 
begin
select score from sc where sid = @id  -- 存儲過程執(zhí)行的操作
end

exec get_score @id = 202121;   -- 調(diào)用存儲過程

上方創(chuàng)建一個存儲過程,來查找學號為 @id的學生的成績。

【SQL server關(guān)鍵字】

存儲過程不管是定義還是使用都很類似于C語言等計算機語言的函數(shù)調(diào)用。


EXEC – 執(zhí)行

在SQL Server中,EXEC是一個用于執(zhí)行存儲過程、函數(shù)和動態(tài)SQL語句的關(guān)鍵字。

它的語法如下:

EXEC procedure_name [parameter1, parameter2, ...]

其中,procedure_name是要執(zhí)行的存儲過程或函數(shù)的名稱,parameter1, parameter2, ...是可選的輸入?yún)?shù)。如果存儲過程或函數(shù)沒有參數(shù),則可以省略方括號中的參數(shù)部分。

EXEC關(guān)鍵字還可以用于執(zhí)行動態(tài)SQL語句,即在運行時動態(tài)構(gòu)建SQL語句并執(zhí)行。

例如:

DECLARE @sql NVARCHAR(MAX);           -- 聲明變量  變量名  數(shù)據(jù)類型
SET @sql = 'SELECT * FROM my_table';  -- 變量賦值
EXEC (@sql);                          --  執(zhí)行

這里,我們首先聲明一個變量@sql來存儲SQL語句,然后使用EXEC關(guān)鍵字來執(zhí)行該語句。請注意,在執(zhí)行動態(tài)SQL語句時,需要非常小心,以避免SQL注入等安全問題。

示例:

USE TEST14
--CREATE TABLE [STU](aaa INT);            -- 創(chuàng)建表,一列,列名為 aaa
EXEC sp_rename 'STU.aaa', 'S', 'COLUMN';  --  更改列明  '舊名' , '新名', '列'


十二、CREATE FUNCTION – 函數(shù)

在 SQL Server中,函數(shù)(Function)是一種特殊的存儲過程,用于在查詢中返回一個標量值或表格。函數(shù)可以接受一個或多個輸入?yún)?shù),并根據(jù)這些參數(shù)計算結(jié)果。函數(shù)可以用于簡化復雜的查詢和數(shù)據(jù)處理操作,提高查詢性能和代碼重用性。

SQL Server 中有三種類型的函數(shù):標量函數(shù)(Scalar Function)、表值函數(shù)(Table-Valued Function)和聚合函數(shù)(Aggregate Function)。其中,標量函數(shù)返回一個標量值(例如整數(shù)、字符串或日期),表值函數(shù)返回一個表格,而聚合函數(shù)返回一個聚合值(例如總和、平均值或計數(shù))。

下面是一個標量函數(shù)的定義示例:

CREATE FUNCTION GetSLen(@targetS VARCHAR(1000))
RETURNS INT
AS
BEGIN
    RETURN LEN(@targetS);
END

該函數(shù)名為 GetSLen,接受一個 VARCHAR 類型的參數(shù) @targetS,返回參數(shù)字符串的長度。在函數(shù)體中,使用 RETURN 語句返回計算結(jié)果。

函數(shù)調(diào)用:

select dbo.GetSLen('helloworld')   -- 注意使用調(diào)用模式

【SQL server關(guān)鍵字】

在 SQL Server中,每個對象都必須屬于某個模式(Schema),模式是數(shù)據(jù)庫對象的邏輯容器,用于對數(shù)據(jù)庫對象進行分類和組織。
如果在創(chuàng)建 UDF時沒有指定模式,則 SQL Server 會將其分配給默認模式 dbo。因此,當調(diào)用 UDF 時,需要使用函數(shù)名前綴 dbo.,以指定UDF 的所有者模式。如果使用的是 SQL Server 的默認模式,則可以省略 dbo. 前綴,直接使用函數(shù)名調(diào)用UDF。但是,為了避免可能的歧義,建議始終在函數(shù)名前面加上 dbo. 前綴。


十三、小小示例

該樣例從建庫開始,所有操作都可以直接復制運行,并且?guī)в胁糠肿⑨?,希望對大家有所幫助?/p>

  -- 1.建數(shù)據(jù)庫
create database ssc                         
go


  -- 2.建表
use ssc
create table s   -- 學號,姓名,性別
(
	sid int not null  primary key ,    --  非空 主鍵
	sname varchar(50) ,
	sex char(10),
);
create table c   -- 課程號,課程名,教師
(
	cid int not null primary key,
	cname varchar(50) ,
	teacher varchar(50)
);
create table sc  -- 學號,課程號,成績
(
	sid int not null,
	cid int not null,
	score int,
	constraint pk_sc primary key(sid, cid)
)
GO


  -- 3.插入數(shù)據(jù)
use ssc
insert into s
values (202121, 's1', 'man'),
(202122, 's2', 'man'),
(202123, 's3', 'woman'),
(202153, 's4', 'man');
go

use ssc
insert into c
values 
	(01, 's1', 'tea1'),
	(02, 's2', 'tea2'),
	(07, 's7', 'tea7');
go

use ssc
insert into sc
values 
	(202121, 01, 91),
	(202122,02, 67),
	(202123, 01, 97),
	(202153,01, 91);
go


  -- 4.查找練習
use  ssc
select s.sid , sname, score   --  查看學生成績
from s join sc on s.sid = sc.sid
go

use ssc
select s.sid , sname, score   --  同上
from  s, sc
where s.sid = sc.sid
go


use ssc
select *          -- 查找學生學號中含有 212 的學生信息
from s
where sid like '%212%' 


use ssc
select *
from c join sc on c.cid = sc.cid -- 篩選有學生選修的課程信息
go

use ssc
select teacher, count(*) as 報課人數(shù)
from c join sc on c.cid = sc.cid
group by teacher                   -- 按照老師分組,開始統(tǒng)計報課人數(shù)
go


use ssc
select *                      --  查找有學生報名的課程的信息 -- 去重
from c                
where teacher IN        -- 判斷 teacher是否在子查詢中
( 
	select c.teacher           -- 子查詢,查找所有學生選課的信息
	from sc
	where sc.cid = c.cid
)
go

use ssc                   --  同上
select *
from c
where exists
(
	select 1
	from sc
	where sc.cid = c.cid
)
go



-- 查找不學習課程s7的學生
select sid, sname
from s
where sid not in   -- 查找不在的
(
select sid        -- 子查詢:查找在的
from sc
where cid = 1
)


-- 查詢選修人數(shù)不少于3人的課程信息  
select *
from c 
where cid in
(
	select cid     
	from sc
	group by cid
	having count(*) >= 3    -- 判斷人數(shù)
)

-- 查詢選修人數(shù)不少于3人的課程信息  --  同上
select *
from c 
where exists                 --  使用  exists子查詢
(
	select 1
	from sc
	where c.cid = sc.cid
	group by cid
	having count(*) >= 3    -- 判斷人數(shù)
)


-- 查詢選修人數(shù)不少于3人的課程信息  --  同上 -- 返回結(jié)果略有不同,會帶上子查詢的結(jié)果
select *
from c inner join    -- 鏈接子查詢返回的結(jié)果集
(
	select cid, count(*) as scount
	from sc
	group by cid
	having count(*) >= 3    -- 判斷人數(shù)
) as tmp                    -- 起個名字,便于下方使用
on c.cid = tmp.cid


	--  5. 修改數(shù)據(jù)
use ssc
update c                    
set cid = 06, cname = 'c6', teacher = 'newtea'  -- 沒有人報名的課,更換老師,跟換新課程
-- 按照教師分組,并統(tǒng)計各個教師所教課程的報課人數(shù),等于0就替換
where not exists
(
	select 1
	from sc
	where c.cid = sc.cid
)
go



	--  6.修改屬性
use ssc
alter table sc
alter column score int ;
go

    -- 7.while循環(huán)的使用,print函數(shù)只能打印字符串
-- 使用循環(huán)中的print語句,打印學生信息以及它的成績
use ssc
declare @minid int = (select min(sid) from s);
declare @maxid int = (select max(sid) from s);
declare @i int = @minid;

while @i <= @maxid
begin
	if exists (select 1 from s where sid = @i)     -- 判斷學生是否存在
	begin
	declare @name  varchar(50) = (select sname from s where sid = @i)
	declare @score int = (select score from sc where sid = @i)
		print 'sname: ' + @name +  ', score: ' + cast (@score as varchar(10)); -- 使用cast函數(shù),將整形score轉(zhuǎn)換為varchar,以便于字符串連接
	end

	set @i = @i + 1;
end

  
    --   8.游標
-- 使用游標,查找第二個成績大于90分的同學的姓名與成績
DECLARE S_CURSOR CURSOR FORWARD_ONLY FOR
SELECT SNAME, SCORE FROM SC JOIN S ON SC.SID = S.SID 
WHERE SCORE >= 90

OPEN S_CURSOR

DECLARE @NAME VARCHAR(50), @SCORE INT;
FETCH FROM S_CURSOR INTO @NAME, @SCORE

WHILE @@FETCH_STATUS = 0
BEGIN
		PRINT @NAME + ': ' + CAST(@SCORE AS VARCHAR(10) );
		FETCH FROM S_CURSOR INTO @NAME, @SCORE
END

CLOSE S_CURSOR
DEALLOCATE S_CURSOR




總結(jié)

  1. SQL關(guān)鍵字不區(qū)分大小寫。

  2. 在 SQL 中,引號用于表示字符串類型的值。如果公司id是字符串類型的話,那么需要使用引號將其括起來。如果招收人數(shù)是數(shù)值類型的話,就不需要使用引號。所以,需要根據(jù)數(shù)據(jù)類型來決定是否使用引號。

  3. 子查詢是指在一個 SQL 語句中嵌套另一個完整的 SQL 語句,用于查詢嵌套查詢中所需要的數(shù)據(jù)。子查詢返回的是一個結(jié)果集,這個結(jié)果集可以是一個標量值、一個行或多行數(shù)據(jù)。
    子查詢的結(jié)果可以作為另一個 SQL 語句的一部分,用于過濾、排序、分組等操作。例如,我們可以使用子查詢來查詢某個表中滿足某個條件的記錄數(shù),或者查詢某個表中的最大或最小值等。

  4. 在 SQL Server 中,變量名前面必須加上 “@” 符號,這是為了區(qū)分變量名和列名或表名。

  5. 游標通過declare聲明。

  6. 視圖是一種虛擬表,通過create創(chuàng)建,一個視圖創(chuàng)建后可以當做實際的表來使用,并且可以多次使用。

  7. CREATE 和 DECLARE 是 SQL Server 中用于創(chuàng)建對象的兩個關(guān)鍵字,它們的使用場景和語法有所不同。
    CREATE 用于創(chuàng)建新的數(shù)據(jù)庫對象,例如、視圖、存儲過程、函數(shù)等。CREATE 語句通常需要指定對象名稱、列定義、約束、索引等詳細信息,以及必要的權(quán)限和選項。CREATE 語句的語法通常比較復雜,需要考慮多種因素,例如數(shù)據(jù)類型、長度、精度、性能等。
    DECLARE 用于聲明變量、游標表變量臨時對象,這些對象通常只在當前會話中存在,并且不會被持久化保存。DECLARE 語句通常只需要指定對象名稱、數(shù)據(jù)類型、長度等基本信息,不需要考慮復雜的約束和索引。
    關(guān)于為什么游標使用 DECLARE 而視圖和存儲過程使用 CREATE,主要是因為它們的作用和使用場景不同。游標是一種臨時對象,通常只在當前會話中使用,并且不需要被其他程序或會話調(diào)用,因此使用 DECLARE 更加合適。而視圖和存儲過程是一種可重用的數(shù)據(jù)庫對象,可以在多個查詢或程序中使用,并且需要被持久化保存,因此使用 CREATE 更加合適。文章來源地址http://www.zghlxwxcb.cn/news/detail-499112.html



到了這里,關(guān)于【SQL server關(guān)鍵字】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 【SQL】SQL的基礎知識-語法、關(guān)鍵字、函數(shù)

    SQL(Structured Query Language)是一種用于管理關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)的語言。在本文中,我們將討論SQL的基礎知識,包括語法、和函數(shù)。 SQL語法由多個和操作符組成,用于完成對數(shù)據(jù)的操作。以下是SQL的基礎語法: 其中, SELECT 用于選擇要查詢的列,

    2024年02月06日
    瀏覽(19)
  • 數(shù)據(jù)庫--SQL關(guān)鍵字的執(zhí)行順序

    數(shù)據(jù)庫--SQL關(guān)鍵字的執(zhí)行順序

    數(shù)據(jù)庫-- 數(shù)據(jù)類型 : http://t.csdn.cn/RtqMD 數(shù)據(jù)庫-- 三大范式、多表查詢、函數(shù)sql: http://t.csdn.cn/udJSG 數(shù)據(jù)庫-- MySQL增刪改查: http://t.csdn.cn/xkiti select? ?from? ?join? ?where? ?group by? ?having? ?order by? ?聚合函數(shù)? ?limit? ?top? 以及邏輯運算符not? and? ? or? ? 一: 語法順序 ? ?

    2024年02月12日
    瀏覽(22)
  • SQL語句——DESC關(guān)鍵字,降序練習

    SQL語句——DESC關(guān)鍵字,降序練習

    學習 1、DESC是descend下降的縮寫,降序,只要放在需要降序的字段前面就可以了, 2、對多個字段執(zhí)行降序排列的話就是字段名+DESC以逗號隔開再字段名+DESC.....最后以分號結(jié)尾 3、select xxx(字段) from xxx(表) where (條件xxxx) ,排序、分組操作都是在where條件之后的,查詢xxxx字段從

    2024年02月16日
    瀏覽(17)
  • MySQL索引3——Explain關(guān)鍵字和索引優(yōu)化(SQL提示、索引失效、索引使用規(guī)則)

    MySQL索引3——Explain關(guān)鍵字和索引優(yōu)化(SQL提示、索引失效、索引使用規(guī)則)

    目錄 Explain 索引性能分析 Id ——select的查詢序列號 Select_type——select查詢的類型 Table——表名稱 Type——select的連接類型 Possible_key ——顯示可能應用在這張表的索引 Key——實際用到的索引 Key_len——實際索引使用到的字節(jié)數(shù) Ref??? ——索引命中的列或常量 Rows——預

    2024年02月14日
    瀏覽(48)
  • SQL FULL OUTER JOIN 關(guān)鍵字:左右表中所有記錄的全連接解析

    SQL FULL OUTER JOIN 關(guān)鍵字:左右表中所有記錄的全連接解析

    SQL RIGHT JOIN返回右表(table2)中的所有記錄以及左表(table1)中的匹配記錄。如果沒有匹配,則左側(cè)的結(jié)果為0條記錄。 注意:在某些數(shù)據(jù)庫中,RIGHT JOIN被稱為RIGHT OUTER JOIN。 在本教程中,我們將使用著名的Northwind示例數(shù)據(jù)庫。 以下是“Orders”表的部分選擇: OrderID C

    2024年02月05日
    瀏覽(18)
  • Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 關(guān)鍵字

    報錯提示: Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 本人分析:未找到from,說明from前的sql語句格式有問題(并不一定是缺少from這個或者from拼寫錯誤)。 舉個代碼報錯的例子: 正確的sql語句: select \\\'123‘ XX ’123\\\' from dual; 錯誤

    2024年02月11日
    瀏覽(22)
  • MySQL索引3——Explain關(guān)鍵字和索引使用規(guī)則(SQL提示、索引失效、最左前綴法則)

    MySQL索引3——Explain關(guān)鍵字和索引使用規(guī)則(SQL提示、索引失效、最左前綴法則)

    目錄 Explain 索引性能分析 Id ——select的查詢序列號 Select_type——select查詢的類型 Table——表名稱 Type——select的連接類型 Possible_key ——顯示可能應用在這張表的索引 Key——實際用到的索引 Key_len——實際索引使用到的字節(jié)數(shù) Ref??? ——索引命中的列或常量 Rows——預

    2024年02月14日
    瀏覽(19)
  • MySQL java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax 關(guān)鍵字異常處理

    MySQL java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax 關(guān)鍵字異常處理

    使用mybatis插入數(shù)據(jù)時出現(xiàn)java.sql.SQLSyntaxErrorException異常 收到錯誤“由:java.sql.SQLSyntaxErrorException:您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,了解在第14行的“”附近使用的正確語法。 liquibase回答: You have an error in your SQL syntax; check the manual that corresponds to

    2024年02月15日
    瀏覽(22)
  • static關(guān)鍵字和final關(guān)鍵字

    在java的中,static和final是兩個必須掌握的。static和final用法多樣,且在一定環(huán)境下使用,可以提高程序的運行性能,優(yōu)化程序的結(jié)構(gòu)。下面將依次介紹static和final。注意,某些場景下,staic和final可以聯(lián)合使用

    2024年02月09日
    瀏覽(98)
  • 搜索引擎優(yōu)化指南:SEO關(guān)鍵字、長尾關(guān)鍵字、短尾關(guān)鍵字以及反向鏈接

    SEO 代表“搜索引擎優(yōu)化”。它是一種數(shù)字營銷策略,旨在提高網(wǎng)站或網(wǎng)頁在搜索引擎未付費結(jié)果中的在線可見性。通常,網(wǎng)站在搜索結(jié)果頁面中排名越高,或在搜索結(jié)果列表中顯示的頻率越高,它將從搜索引擎用戶那里獲得的訪問者就越多。 SEO 策略可以針對各種類型的搜索

    2024年02月04日
    瀏覽(511)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包