1. 程式人生 > >探索SQL Server元資料(一)

探索SQL Server元資料(一)

簡介

  在資料庫中,我們除了儲存資料外,還儲存了大量的元資料。它們主要的作用就是描述資料庫怎麼建立、配置、以及各種物件的屬性等。本篇簡單介紹如何使用和查詢元資料,如何更有效的管理SQLServer 資料庫。

  對一些有經驗的資料庫開發和管理人員而言,元資料是非常有價值的。下面我會介紹一下簡單的原理,然後儘量用程式碼的方式直接說明,畢竟“talk is cheap show me the code ”。

什麼是動態線上目錄?

  每一個關係型資料庫系統,比如SQL Server 一定要提供關於它的結構的資訊,這些資訊往往需要通過sql語法來查詢。通常這些資訊被儲存在指定資料表的結構中。這意味著資料庫中有兩種不同的表:一是使用者自定義的表和系統表或者檢視(包含元資料)。從SQL Server 2005開始,只有檢視可以查詢了,不能直接看到資料表了。

 

系統檢視

這種系統表或者檢視的結合通常參考關係型資料庫理論的文獻叫做作為系統目錄或者資料字典。

在資料庫內部,有一些系統表一直追蹤資料庫中發生的每一件事情。系統表儲存像表、活動、列、索引等事情。這些完全符合Edgar Codd 的關係型資料庫試試的十三條準則直譯。這個準則就是定義動態線上目錄,它就是“關於資料的資料”,也叫作元資料。

 Edgar Codd  準則4, 描述如下:

‘The database description is represented at the logical level in the same way as ordinary data, so that authorized users can apply the same relational language to its interrogation as they apply to the regular data.’

翻譯:像普通資料一樣,在邏輯層的資料表達了對資料庫的描述,以便於授權使用者能應用相同的SQL語言來查詢元資料,就如同查詢常規資料一樣。

在SQL Server中,可以通過系統檢視或者架構檢視直接訪問動態線上目錄,方便使用者更為快捷的開發和管理資料庫。

如何獲得以上資訊?

因為我們不能直接訪問,需要使用檢視和函式來看這些資訊。只能看到你許可權內的資料。有更好的方法在使用者資料庫中使用資料定義語言(DDL),這些DDL語句包括CREATE, DROP, ALTER, GRANT, DENY, REVOKE 和sp_rename statements 等。總有一種方法可以使用DDL來修改檢視中的任何資訊,即使並不總是顯而易見的。

關係型資料庫使用動態的系統檢視中的資料描述資料庫,但是目前還有沒有標準化。但是有一個包含在每個資料庫內的架構可以讀取這些資訊:就是Information Schema

不走運的是,這個架構不足以提供足夠資訊,這意味著我們需要使用SQL Server 系統資料庫的檢視和函式來補充資訊。接下來需要解釋一些術語和技術,我會盡可能少的細節足以讓大家輕鬆地理解這些示例

如圖所示,如何訪問元資料,及其介面

 

系統檢視

Information Schema

這個架構是一套檢視,檢視中是當前資料庫的資訊。每一個數據庫中都有這個架構,只能看到當前資料庫的物件資訊。可以直接訪問這些架構的資料在主要的關係型資料中。其中架構檢視不包含資料庫部署資訊。

對於不同的關係型資料庫之間的處理工作這個架構尤其重要。它們非常適合日常工作,例如在訪問錢檢查是否存在,但是如果需要詳細報告則會受到限制。他們還使用一種稍有不同的標準命名法:例如,資料庫被稱為目錄,使用者定義的資料型別被稱為“domain”。

之前看到MSDN上有人警告說不要使用INFORMATION_SCHEMA檢視來確認物件架構,我理解是因為SQL Server允許在不同的架構中有相同的表名字,因此當只有表名稱的時候會有混淆。所以我認為儘管放心使用就好了。

相容性檢視

相容性檢視是維護元資料的檢視,在SQL Server 2005之前是有系統表支援的,並且只向後相容。只在2005之後的版本支援對於某些系統表的查詢,例如分割槽表等,只有部分元資料或者特性是對使用者可見的。對於帶有很多使用者、群組、角色或者2000版本資料型別的資料庫而言,使用相容性檢視是有潛在風險的,因為檢視中有的列儲存了使用者的ID或者型別ID,可能會返回NULL或者觸發溢位。

目錄檢視

目錄檢視提供了關於資料庫架構的資訊。它們也被資料庫引擎自己本身使用,尤其在查詢優化環節。因此這些檢視需要更高效的方式來獲取元資料。除了複製、備份、資料庫維護計劃或SQL Server代理目錄資料之外,所有元資料都通過這些編目檢視公開。

這些檢視用一種相當特殊的方式排列,SQL Server物件的共有資訊都儲存在sys.objects裡面。有許多派生檢視,比如外來鍵、約束、服務佇列、表、檢視和過程,這些檢視用特定於被編目的物件型別的資訊來補充一般的物件資訊

並非SQL Server元資料中的所有內容都是物件。例如,一個列、索引或分佈統計資訊不是物件。一些如主鍵約束或擴充套件屬性有一個奇怪的兩面性,因為它們被被當做為一個物件,當被強制鍵索引的例項化時,它就不是一個物件。有些物件(主要是約束)與另一種型別的物件具有父/子關係;父即表。

資料層應用程式檢視

資料層應用程式檢視被用於訪問註冊伺服器資訊。特殊版本的伺服器和資訊用來檢查這些版本是否漂移。這是一種作為容易的檢查當前註冊資料庫版本的方式,直接用T-SQL查詢。

動態管理檢視和功能(DMVs)

DMV一般用來調優,診斷問題和監控資料庫伺服器狀態。最重要的作用就是提供了一種方式來查詢資料庫的使用資訊。例如,不僅查詢到索引,而且可以查詢到使用量的排序和耗時等。

元資料function

還有很多元資料函式,如object_name()或col_name(),它們提供關於當前資料庫中的模式作用域物件的資訊。通過避免在元資料表示式中進行顯式連線,它們提供了獲取資訊的捷徑,因此,當與編目檢視一起使用時,它們可以幫助您更快地獲取關於元資料的資訊。

目錄儲存過程

有許多儲存過程的主要功能是為SQL Server的ODBC驅動程式提供元資料資訊。當您建立ODBC連線時,該資訊作為資料物件的集合。但是,這些資訊通常是可用的,並且可以像任何其他儲存過程一樣從SQL中使用。它們通常被認為不如目錄檢視有用,因為儲存過程返回的結果必須使用INSERT插入一個表或者表變數中,需要使用INSERT ... EXECUTE 語法。

為什麼元資料檢視和功能很重要?

元資料檢視和函式允許您搜尋元資料,提供對資料庫報告和總結,找出誰有許可權檢視或改變什麼資料,讓你減少重複輸入,讓幾乎所有隱藏在SQL Server Management Studio的資訊可查詢,使部署指令碼更安全,更可靠,找出最近的改變或建立,快速處理一些函式或過程,確定已註冊資料庫的版本,審計用於編碼實踐的資料庫程式碼,發現重複索引並且允許減少低效的點選操作。當與其他SQL Server工具(如預設跟蹤和動態管理物件)結合使用時,使用強大的SQL指令碼用於開發和管理資料庫是相當快速的。

元資料檢視和函式允許執行幾乎不可能執行的操作,例如查詢依賴於指定的CLR使用者定義型別或別名型別的引數。

我是如何逐漸使用的?

學習使用元資料檢視和函式的第一階段是收集從各種著名的資料來源(如SQL Server Central)中使用它們的查詢。可以在MSDN上查詢到。使用記錄工具儲存這些查詢。如果它是一個用來儲存註釋或片段的工具,可以讓您在任何地方輕鬆地獲取查詢,那麼它將會有所幫助。一段時間後,就可以根據使用需要對這些查詢稍作修改。然後,不需要在object browser窗格中搜索表列表,您很快就可以從集合中獲取適當的查詢,執行它,並快速獲取資訊。

比較有用的查詢例項

下面我會展示的例子都已經在2008和2012 兩個版本中測試。當然只用到了各自版本的最後一個版本更新後的資料庫。

下圖中展示了所有繼承sys.objects列的檢視。這意味著它們除了擁有這些列以外,還有列的對應型別。這是檢視所有的資訊比如create_date也都來自sys.objects

 

要列出資料庫中的所有檢視(儲存過程和外來鍵),只需執行以下操作 …

SELECT  object_schema_name(object_id)+'.'+name FROM sys.views;

 SELECT  object_schema_name(object_id)+'.'+name FROM sys.procedures;

SELECT name AS Foreign_key,
object_schema_name(parent_object_ID)+'.'+object_name(parent_object_ID) AS parent,

object_schema_name(referenced_object_ID)+'.'+object_name(referenced_object_ID) AS referenced

FROM sys.foreign_keys;

對於所有其他的,您需要使用一個系統函式來過濾您想要的物件。下面的程式碼提供了一些有用的示例。因為我們只獲取物件的名稱,所以使用sys.objects,它具有所有資料庫物件共有的基本資訊的檢視。如果我們需要特定於特定型別物件的資訊,比如主鍵是否具有系統生成的名稱,那麼您就必須為該特定型別的物件使用檢視。

/* The Tables */
  --資料庫中的所有使用者表
    SELECT
      ob.name AS User_Table, Coalesce(ep.value, '') AS documentation
    FROM sys.objects AS ob
      LEFT OUTER JOIN sys.extended_properties AS ep
        ON ep.major_id = ob.object_id
           AND ep.class = 1
           AND ep.minor_id = 0
    WHERE ObjectProperty(ob.object_id, 'IsUserTable') = 1 
/* The Views */
  --檢視
  SELECT ob.name AS ViewName, Coalesce(ep.value, '') AS documentation
  FROM sys.objects ob  LEFT OUTER JOIN sys.extended_properties AS ep
      ON ep.major_id = ob.object_id
         AND ep.class = 1
         AND ep.minor_id = 0
  WHERE objectproperty(ob.object_id,'IsView')= 1 


/* The Check Constraints */
 --Check約束
    SELECT
      objects.name AS Name_of_Check_Constraint,
      Object_Schema_Name(objects.parent_object_id) + '.' + Object_Name(objects.parent_object_id) AS parent,
	  Coalesce(ep.value,'') AS documentation
   FROM sys.objects
      LEFT OUTER JOIN sys.extended_properties AS ep
        ON ep.major_id = objects.object_id AND ep.class=1
  	    AND ep.name='MS_Description'--microsoft 公約
    WHERE ObjectProperty(objects.object_id, 'IsCheckCnst') = 1 

/* The Constraints */ 
SELECT --約束 objects.name AS Name_of_Constraint, --see all constraints and parent table Lower(Replace(type_desc,'_',' ')),--the type of constraint Object_Schema_Name(objects.parent_object_id) + '.' + Object_Name(objects.parent_object_id) AS parent, Coalesce(ep.value, '') AS documentation FROM sys.objects LEFT OUTER JOIN sys.extended_properties AS ep ON ep.major_id = objects.object_id AND ep.class = 1 AND ep.name = 'MS_Description' WHERE ObjectProperty(objects.object_id, 'IsConstraint') = 1; /* The Defaults */ --預設 SELECT objects.name, Coalesce(ep.value, '') AS documentation FROM sys.objects LEFT OUTER JOIN sys.extended_properties AS ep ON ep.major_id = objects.object_id AND ep.class = 1 AND ep.name = 'MS_Description' WHERE ObjectProperty(objects.object_id, 'IsDefault') = 1; /* The Default Constraints */ --資料庫及其父表中的所有預設約束 SELECT objects.name AS Name_of_Default_Constraint,--see all Default constraints and parent table Coalesce(ep.value,'') AS documentation, object_schema_name(objects.parent_object_id)+'.'+object_name(objects.parent_object_id) AS parent, Coalesce(EP_parent.value,'') AS documentation FROM sys.objects LEFT OUTER JOIN sys.extended_properties AS ep ON ep.major_id = objects.object_id AND ep.class = 1 AND ep.name = 'MS_Description' --the microsoft convention LEFT OUTER JOIN sys.extended_properties AS EP_parent ON ep.major_id = objects.parent_object_id AND ep.name = 'MS_Description' --the microsoft convention WHERE objectproperty(objects.object_id,'IsDefaultCnst')= 1; /* The Executables */ --資料庫中的所有可執行檔案(過程、函式等) SELECT oe.name AS Name_Of_Executable, Replace(Lower(oe.type_desc), '_', ' ') AS Type_Of_Executable, Coalesce(EP.value, '') AS Documentation FROM sys.objects AS oe LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = oe.object_id AND EP.name = 'MS_Description' WHERE ObjectProperty(oe.object_id, 'IsExecuted') = 1; /* The Extended Stored Procedures */ --資料庫中的所有擴充套件儲存過程 SELECT oep.name AS Name_of_Extended_Procedure, Coalesce(EP.value, '') AS Documentation FROM sys.objects AS oep LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = oep.object_id AND EP.name = 'MS_Description' WHERE ObjectProperty(oep.object_id, 'IsExtendedProc') = 1; /* The Inline Functions */ --資料庫中的所有行內函數 SELECT ilf.name AS Inline_function, Coalesce(EP.value, '') AS Documentation FROM sys.objects AS ilf LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = ilf.object_id AND EP.name = 'MS_Description' WHERE objectproperty(ilf.object_id,'IsInlineFunction')= 1; /* The Primary Keys */ --資料庫中的所有主鍵及其父表 SELECT pk.name AS Primary_key, Object_Schema_Name(pk.parent_object_id) + '.' + Object_Name(pk.parent_object_id) AS parent, Coalesce(EP.value, '') AS KeyDoc, Coalesce(EPParent.value, '') AS TableDoc FROM sys.objects AS pk LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = pk.object_id AND EP.name = 'MS_Description' LEFT OUTER JOIN sys.extended_properties AS EPParent ON EPParent.major_id = pk.parent_object_id AND EPParent.minor_id = 0 AND EPParent.name = 'MS_Description' WHERE ObjectProperty(pk.object_id, 'IsPrimaryKey') = 1; /* The Stored Procedures */ --資料庫中的所有儲存過程 SELECT sp.name AS Stored_procedure, Coalesce(EP.value, '') AS Documentation FROM sys.objects AS sp LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = sp.object_id AND EP.minor_id = 0 AND EP.name = 'MS_Description' WHERE ObjectProperty(sp.object_id, 'IsProcedure') = 1; /* The Queues */ --資料庫中的所有佇列 SELECT q.name AS QueueName, Coalesce(EP.value, '') AS Documentation FROM sys.objects AS q LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = q.object_id AND EP.name = 'MS_Description' WHERE ObjectProperty(q.object_id, 'IsQueue') = 1; /* The Rules */ --資料庫中的所有舊式規則 SELECT ru.name AS RuleName, --old-fashioned sybase-style rule Coalesce(EP.value, '') AS Documentation FROM sys.objects AS ru LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = ru.object_id AND EP.name = 'MS_Description' WHERE ObjectProperty(ru.object_id, 'IsRule') = 1; /* The Scalar Functions */ --資料庫中的所有標量函式。 SELECT sf.name AS Scalar_function, Coalesce(EP.value, '') AS Documentation FROM sys.objects AS sf LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = sf.object_id AND EP.name = 'MS_Description' WHERE ObjectProperty(sf.object_id, 'IsScalarFunction') = 1; /* The System Tables */ --據庫中的所有系統表 SELECT st.name AS System_table, Coalesce(EP.value, '') AS Documentation FROM sys.objects AS st LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = st.object_id AND EP.name = 'MS_Description' WHERE ObjectProperty(st.object_id, 'IsSystemTable') = 1; --資料庫中的所有表,包括系統表 SELECT at.name AS TableName, Lower(Replace(type_desc,'_',' ')),--約束的型別 Coalesce(EP.value, '') AS Documentation FROM sys.objects AS at LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = at.object_id AND EP.name = 'MS_Description' WHERE ObjectProperty(at.object_id, 'IsTable') = 1; /* The TVFs*/ --資料庫中的所有表值函式 SELECT tvf.name AS Table_Valued_Function, Coalesce(EP.value, '') AS Documentation FROM sys.objects AS tvf LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = tvf.object_id AND EP.name = 'MS_Description' --the microsoft convention WHERE ObjectProperty(tvf.object_id, 'IsTableFunction') = 1; --資料庫及其所有觸發器。 SELECT tr.name AS TriggerName, Object_Schema_Name(tr.parent_object_id) + '.' + Object_Name(tr.parent_object_id) AS parent, Coalesce(EP.value, '') AS TriggerDoc, Coalesce(EPParent.value, '') AS TableDoc FROM sys.objects AS tr LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = tr.object_id AND EP.name = 'MS_Description' LEFT OUTER JOIN sys.extended_properties AS EPParent ON EPParent.major_id = tr.parent_object_id AND EPParent.minor_id = 0 AND EPParent.name = 'MS_Description' WHERE ObjectProperty(tr.object_id, 'IsTrigger') = 1; /* The Unique Constraints */ --資料庫及其父表中的所有惟一約束 SELECT uc.name AS Unique_constraint,--所有唯一的約束 object_schema_name(uc.parent_object_id)+'.'+object_name(uc.parent_object_id) AS parent, Coalesce(EP.value, '') AS ConstraintDoc, Coalesce(EPParent.value, '') AS TableDoc FROM sys.objects AS uc LEFT OUTER JOIN sys.extended_properties AS EP ON EP.major_id = uc.object_id AND EP.name = 'MS_Description' LEFT OUTER JOIN sys.extended_properties AS EPParent ON EPParent.major_id = uc.parent_object_id AND EPParent.minor_id = 0 AND EPParent.name = 'MS_Description' WHERE objectproperty(uc.object_id,'IsUniqueCnst')= 1;

當然我們也可以調整這些語句來方便我們的精確查詢,比如:

--資料庫中的所有檢視在過去兩週內被修改的有:

SELECT name AS ViewName, convert(char(11),modify_date,113)

FROM sys.objects WHERE objectproperty(OBJECT_ID,'IsView')= 1

AND modify_date > dateadd(week,-2, GetDate());

--上個月建立的所有物件的名稱和型別

SELECT coalesce(object_schema_name(obj.object_ID)+'.','')+obj.name AS ObjectName,

convert(varchar(30),lower(replace(type_desc,'_',' ')))

FROM sys.objects obj

WHERE create_date > dateadd(month,-1, GetDate());

--DBO架構中所有基本物件的名稱和型別

SELECT coalesce(object_schema_name(obj.object_ID)+'.','')+obj.name AS ObjectName,

convert(varchar(30),lower(replace(type_desc,'_',' '))) as ObjectType

FROM sys.objects obj

WHERE parent_object_ID=0

AND schema_ID = schema_ID('dbo'); 

總結

  如上,到這級別簡單實用足夠了。們已經介紹了一般的理論,並介紹了查詢資料庫中的內容的基本方法。在下一篇中我將會深入介紹觸發器並且找到有效資訊的排序以便於可以通過系統檢視從動態線上目錄中收集的有用資訊。

相關推薦

探索SQL Server資料

簡介   在資料庫中,我們除了儲存資料外,還儲存了大量的元資料。它們主要的作用就是描述資料庫怎麼建立、配置、以及各種物件的屬性等。本篇簡單介紹如何使用和查詢元資料,如何更有效的管理SQLServer 資料庫。   對一些有經驗的資料庫開發和管理人員而言,元資料是非常有價值的。下面我會介紹一下簡單的原理,然後

探索SQL Server資料

背景   上一篇中,我介紹了SQL Server 允許訪問資料庫的元資料,為什麼有元資料,如何使用元資料。這一篇中我會介紹如何進一步找到各種有價值的資訊。以觸發器為例,因為它們往往一起很多問題。 那麼如何找到觸發器的資料?   以sys.system_viewsis表開始。讓我們查詢出資料庫中使用觸發器的資

探索SQL Server資料:索引資料

背景 在第一篇中我介紹瞭如何訪問元資料,元資料為什麼在資料庫裡面,以及如何使用元資料。介紹瞭如何查出各種資料庫物件的在資料庫裡面的名字。第二篇,我選擇了觸發器的主題,因為它是一個能提供很好例子的資料庫物件,並且在這個物件中能夠提出問題和解決問題。 本篇我將會介紹元資料中的索引,不僅僅是因為它們本身很重要,更

SQL Server進階T-SQL查詢和編程的背景

.com src 編程 server 分享 bubuko 進階 分享圖片 img SQL Server進階(一)T-SQL查詢和編程的背景

vue 與 json-server 新增資料

列表頁server.vue <!-- 按鈕 --> <div class="tj"> <span class="demonstration">ID</span> <el-input class="int-1" v-mode

SQL Server 到 MySQL :異構資料庫遷移

背景 滬江成立於 2001 年,作為較早期的教育學習網站, 當時技術選型範圍並不大: Java 的版本是 1.2,C# 尚未誕生,MySQL 還沒有被 Sun 收購, 版本號是 3.23。 工程師們選擇了當時最合適的微軟體系,並在日後的歲月裡, 逐步從 ASP 過度到 .net,資料庫也跟隨 SQL Ser

SQL Server資料庫基礎,資料庫表、時間、建立約束

管理器: 系統資料庫有四個: master:系統資訊,要經常備份 model:模板資料庫 tempdb:臨時資料庫 msdb:代理服務資料庫 資料庫的轉移: 直接找到資料庫的位置是不能剪下複製的,要先通過分離,斷開資料庫與SQL Server的連線

SQL-SELECT-檢索資料

1. 檢索資料 SELECT 從一個或者多個表中檢索資訊 -- 檢索單個列 SELECT prod_name FROM products; -- 檢索多個列 SELECT prod_id, prod_name, prod_price FROM produc

Annotation資料我之心得

Annotation元資料(一) 一、Annotation究竟是什麼? 是java5.0中的新特徵 資料的資料(元資料) Annotation和訪問修飾符一樣,應用於包、型別、構造方法、方法、成員變數、引數、本地變數的宣告中。 資訊以“name=value”方式儲存 ann

SQL Server 安全篇——安全資料5——資料自身安全性

    隨著元資料的使用頻率越來越高,安全性也越來越凸顯,因為從元資料中可以得到很多不應該隨意暴露的系統資訊。所以,絕大部分的元資料並不能隨意被檢視,通常都需要授權。    比如當一個使用者A被授權查詢B表,那麼這個使用者A就自動獲得了在sys.tables和sys.obje

SQL Server 安全篇——安全資料3——稽核資料

稽核除了應對使用者行為之外,還能進行“稽核稽核”以避免別人對自己的懷疑。比如一個惡意的 DBA關閉了稽核, 然後執行的是一個危險的行為, 則該操作本身將不會被稽核, 但 由於DBA已經關閉了審計,

崔華基於oracle的SQL優化讀書筆記如何得到真實的執行計劃

hash mes getting binary oracl only 中文 fun roc ---恢復內容開始--- 得到目標SQL的執行計劃,大致有以下四種方式: 1.explain plan 命令 2.DBMS_XPLAN包 3.SQLPLUS中的autotrace開關

PL/SQL批處理語句BULK COLLECT

數據 使用 for循環 差異 code 基於 name 從表 允許 我們知道PL/SQL程序中運行SQL語句是存在開銷的,因為SQL語句是要提交給SQL引擎處理,這種在PL/SQL引擎和SQL引擎之間的控制轉移叫做上下文卻換,每次卻換時,都有額外的開銷。然而,FORALL和

Exchange Server 2013 部署先決條件

Exchange 2013 部署 ExchangeServer 2013 Exchange 2013 先決條件 將需要安裝Exchange Server 2013 的服務器預先安裝好Windows Server 2012 R2 操作系統,並將操作系統進行初始化:更新Windows 操作系統補丁。1

SQL Server進階表表達式

ins upd 逗號 csdn 引用 ssd 優點 暫存 可讀性 概述   SQL Server支持四種類型的表表達式:派生表,公用表表達式,視圖和內聯表值函數。 派生表 派生表是一個查詢結果生成的表,類似於臨時表。 派生表可以簡化查詢,避免使用臨時表。相比手動生成

SQL Server進階集合運算

nbsp 分享圖片 src 函數 server -c 計算 lec 括號 概述 為什麽使用集合運算:   在集合運算中比聯接查詢和EXISTS/NOT EXISTS更方便。 並集運算(UNION) 並集:兩個集合的並集是一個包含集合A和B中所有元素的集合。

SQL Server進階查詢

解決方案 查詢 小結 練習 數據 分組 函數 sql 方案 開窗函數 透視數據 逆透視數據 分組集 小結 練習 解決方案SQL Server進階(八)查詢

pandas 常用清洗資料

資料來源獲取: https://www.kaggle.com/datasets   1、 Look at the some basic stats for the ‘imdb_score’ column: data.imdb_score.describe() Select a colu

PL/SQL程式設計基礎知識

--PL/SQL變數的宣告和賦值 declare v_ename varchar2(30);--定義變數 begin v_ename:='&請輸入名字';--接受鍵盤輸入 dbms_output.put_line(v_ename); end; --put_line :列印換行

Redtiger SQL註入練習

username shu The 查詢 info format print 多次 ali 感覺會的東西太少了,以後要多練習,多寫博客。要堅持學習,一定不能放棄,為夢想奮鬥。 redtiger 這個平臺早就開始做了,但是才做到第4關。。。。 第一關: 打開題,