日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

数据库分析

發布時間:2025/7/14 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.DDL?Data Definition Language?數據庫定義語言?statements are used to define the database structure or schema.

DDL是SQL語言的四大功能之一。
DDL不需要commit.
CREATE
ALTER
DROP

2.DML?Data Manipulation Language數據操縱語言?statements are used for managing data within schema objects.

DBMS提供,用于讓用戶或程序員使用,實現對數據庫中數據的操作。
DML分成交互型DML和嵌入型DML兩類。
依據語言的級別,DML又可分成過程性DML和非過程性DML兩種。
需要commit.
SELECT
INSERT
UPDATE
DELETE

LOCK TABLE

3DCLData Control Language數據庫控制語言? 授權,角色控制等
GRANT 授權
REVOKE 取消授權

?

4.TCLTransaction Control Language事務控制語言?

?

sql中any和all的區別

這兩個都是用于子查詢

?

any 是任意一個

all 是所有

select * from student where 班級=01' and age > any(select age from student where 班級='02');

以上就是說,查詢出01班中,年齡大于 02班所有人 的 同學

相當于select * from student where 班級='01' and age > (select max(age) from student where 班級='02');

select * from student where 班級='01' and age > any (select age from student where 班級='02');?就是說,查詢出01班中,年齡大于 02班任意一個 的 同學

相當于

select * from student where 班級='01' and age > (select min(age) from student where 班級='02');

select into from insert into select 的用法和區別

select into from 和 insert into select都是用來復制表,兩者的主要區別為: select into from 要求目標表不存在,因為在插入時會自動創建。insert into select from 要求目標表存在

如果兩個表結構一樣:

insert into table_name_new?select * from?table_name_old

如果兩個表結構不一樣:

insert into table_name_new(column1,column2...)?select?column1,column2... from?table_name_old

select into?from的用法:

select?a.BookId,?a.BookName,a.BookPrice,a.ChuMemo,a.FileName?into?table_name_new?from?BuyCard.dbo.Book?a

?

unionunion?all

UNION 操作符用于合并兩個或多個 SELECT 語句的結果集。

請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。

SQL UNION 語法

SELECT column_name FROM table_name1

UNION

SELECT column_name FROM table_name2

注釋:默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。

SQL UNION ALL 語法

SELECT column_name FROM table_name1

UNION ALL

SELECT column_name FROM table_name2

SQL查找重復數據

SELECT?RoleId

FROM?RoleEmployee

where?RoleId?in?(select?RoleId?from?RoleEmployee?group?by?RoleId?having?COUNT(RoleId)>1)

?

SQL中常用的函數:

--系統函數

SELECT?COL_NAME(OBJECT_ID('Role'),1)--返回表中第1個字段的名稱;

SELECT?HOST_ID();???--使用該函數返回服務器端計算機的標識號

SELECT?HOST_NAME();--返回服務器端計算機的名稱;

--數學函數

--1、ABS(X)絕對值函數;

SELECT?ABS(-2.0),ABS(2);

?

--2、PE()返回圓周率的函數;

SELECT?PI();

?

--3、SQRT(X)平方根函數;

SELECT?SQRT(9),SQRT(11);

?

SELECT?RAND()?----生成的隨機數;

--8、FLOOR(X)函數:返回比X小的最大整數;

SELECT?FLOOR(33.333),FLOOR(-33.333);

?

SELECT?SQUARE(0),SQUARE(3),SQUARE(-3),SQUARE(3.3);--SQUARE(X)函數:返回x的平方;

SQL日期和字符串函數

?

  • SQLServer,時間日期,??
  • 1.??????當前系統日期、時間??
  • select?getdate()??
  • 2.?dateadd??????在向指定日期加上一段時間的基礎上,返回新的?datetime?值??
  • 例如:向日期加上2天??
  • select?dateadd(day,2,'2004-10-15')??????--返回:2004-10-17?00:00:00.000??
  • 3.?datediff?返回跨兩個指定日期的日期和時間邊界數。??
  • select?datediff(day,'2004-09-01','2004-09-18')???????--返回:17??
  • select?datediff(day,'2004-09-18','2004-09-01')???????--返回:-17??
  • 4.?datepart?返回代表指定日期的指定日期部分的整數。??
  • SELECT?DATEPART(month,?'2004-10-15')??????--返回?10??
  • 5.?datename?返回代表指定日期的指定日期部分的字符串??
  • SELECT?datename(weekday,?'2004-10-15')??????--返回:星期五??
  • select?本年第多少周=datename(week,'2004-10-15')??
  • ,今天是周幾=datename(weekday,'2004-10-15')??
  • ?

    sql server常用字符串函數

    --返回字符表達式最左側指定數目的字符串

    select?LEFT('abcdefg',0)--''

    select?LEFT('abcdefg',1)--'a'

    select?LEFT('abcdefg',2)--'ab'

    --返回字符表達式最右側指定數目的字符串select?RIGHT('abcdefg',0)--''

    ?

    select?RIGHT('abcdefg',1)--'g'

    select?RIGHT('abcdefg',2)--'gf'

    --SUBSTRING(被截取字符串,開始位置,長度)

    SELECT?SUBSTRING('abcd',1,1)--a

    SELECT?SUBSTRING('abcd',2,2)--bc

    ?

    --返回轉換為小寫的字符串select?LOWER('abcdefg')--'abcdefg'

    --返回轉換為大寫的字符串select?UPPER('abcdefg')--ABCDEFG

    --返回去左空格的字符串select?LTRIM(' ?abcdefg')--'abcdefg'

    --返回去右空格的字符串select?RTRIM('abcdefg ???')--'abcdefg'

    --replace(被搜索字符串,要被替換的字符串,替換的字符串)

    select?REPLACE('abcdefg','cd','a')--abaefg

    select?REPLACE('abcdefg','cd','')--abefg

    --返回指定次數重復的表達式select?REPLICATE('a',4)--aaaa

    select?REPLICATE('abc|',4)--abc|abc|abc|abc|

    --返回反轉后的字符串select?REVERSE('ABC')--CBA

    --返回字符串的長度select?LEN('abcdefg')—7

    ?

    ?

    SQL自定義函數:

    一、標量值函數(返回一個值)

    CREATE??FUNCTION?MySTR(@strs?VARCHAR(50))

    RETURNS?VARCHAR(50)?

    AS

    BEGIN

    ?DECLARE?@str2?VARCHAR(30)

    ?SET?@str2=@strs

    ?RETURN?@str2

    END

    ?

    ?

    ?--執行函數

    SELECT?dbo.MySTR('aa')?AS?result

    ?

    --在sql 語句也可以這樣用:

    DECLARE?@str3?VARCHAR(30)

    ?SET?@str3=(select?name?from?userinfo?where?huji=dbo.MySTR('邯鄲')?and?id=23 )

    select?@str3

    ?

    二、表格值函數(返回多列或者一張表)

    CREATE??FUNCTION???tabcmess(@title?VARCHAR(10))

    RETURNS??TABLE?

    AS?

    return(select?a.GoodsId,a.GoodsName?from?GoodsDB.dbo.Goods?a?where?a.GoodsName?like?'%'+@title+'%')

    ?

    --執行

    ?

    SELECT?*?FROM?tabcmess('韭菜炒雞蛋')

    ?

    Sql創建臨時表

    create?table?#table1(局部臨時表)

    (

    ???id?int,

    ???name?varchar(50)

    )

    ?

    create?table?##table2(全局臨時表)

    (

    ???id?int,

    ???name?varchar(50)

    )

    select?a.GoodsId,a.GoodsName,a.GoodsNum?into?#table3?from?GoodsDB.dbo.Goods?a

    ?

    SQL條件判斷和循環語句

    if語句使用示例:

    ???????declare?@a?int

    ???????set?@a=12

    ???????if?@a>100

    ??????????begin

    ??????????????print?@a

    ??????????end????

    ?????else

    ?????????begin

    ????????????print?'no'

    ?????????end

    ?

    ?2、while語句使用示例:

    ???????declare?@i?int

    ???????set?@i=1

    ???????while?@i<30

    ?????????????begin

    ?????????????insert?into?test (userid) values(@i)

    ????????????set?@i=@i+1

    ?????????end

    ?SQL類型轉換函數

    select?CAST('123.4'?as?decimal(9,2))??-- 123.40

    select?CONVERT(decimal(9,2),?'123.4')?-- 123.40

    SQL視圖

    什么是視圖?

    視圖是一個虛擬的表,是一個表中的數據經過某種篩選后的顯示方式,視圖由一個預定義的查詢select語句組成。

    視圖的特點。

    視圖中的數據并不屬于視圖本身,而是屬于基本的表,對視圖可以像表一樣進行insert,update,delete操作。

    視圖不能被修改,表修改或者刪除后應該刪除視圖再重建。

    視圖的數量沒有限制,但是命名不能和視圖以及表重復,具有唯一性。

    視圖可以被嵌套,一個視圖中可以嵌套另一個視圖。

    視圖不能索引,不能有相關聯的觸發器和默認值,sql server不能在視圖后使用order by排序。

    ?

    視圖的優點:

    簡單性。視圖不僅可以簡化用戶對數據的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,從而使用戶不必為以后的操作每次都指定全部的條件。


    ?安全性。通過視圖用戶只能查詢和修改他們所能見到的數據。數據庫中的其他數據則既看不見也取不到。數據庫授權命令可以使每個用戶對數據庫的檢索限制到特定的數據庫對象上,但不能授權到數據庫特定行和特定的列上。通過視圖,用戶可以被限制在數據的不同子集上。

    視圖的缺點

    即使是視圖的一個簡單查詢,SQL Server也把它變成一個復雜的結合體,需要花費一定的時間。

    在后期的維護上 數據庫的表結構變了 也會影響視圖的改變,維護繁瑣。

    所以在定義數據庫的時候,要合理的使用視圖。

    ?

    ?

    SQL索引:

    拿漢語字典的目錄頁(索引)打比方:正如漢語字典中的漢字按頁存放一樣,SQL Server中的數據記錄也是按頁存放的,每頁容量一般為4K?。為了加快查找的速度,漢語字(詞)典一般都有按拼音、筆畫、偏旁部首等排序的目錄(索引),我們可以選擇按拼音或筆畫查找方式,快速查找到需要的字(詞)。

    同理,SQL Server允許用戶在表中創建索引,指定按某列預先排序,從而大大提高查詢速度。

    ???????????SQL Server中的數據也是按頁(?4KB?)存放

    ???????????索引:是SQL Server編排數據的內部方法。它為SQL Server提供一種方法來編排查詢數據?。

    ???????????索引頁:數據庫中存儲索引的數據頁;索引頁類似于漢語字(詞)典中按拼音或筆畫排序的目錄頁。

    ???????????索引的作用:通過使用索引,可以大大提高數據庫的檢索速度,改善數據庫性能。

    USE?GoodsDB

    Go

    ?

    IF?EXISTS?(SELECT?name?FROM?sysindexes

    WHERE?name?=?'IX_writtenExam')

    begin

    DROP?INDEX?Employee.IX_writtenExam--根據索引名進行刪除

    end

    else

    begin

    CREATE?clustered?index?IX_writtenExam--創建聚集索引

    ON?Employee(Phone)

    end

    create?nonclustered?index?NONCLU_ABC?on?abc(A)--創建非聚集索引

    /*-----指定按索引?IX_writtenExam?查詢----*/

    SELECT * FROM stuMarks??(INDEX=IX_writtenExam)

    ????WHERE writtenExam BETWEEN 60 AND 90

    索引的優缺點

    ???????????優點

    –?????????加快訪問速度

    –?????????加強行的唯一性

    ???????????缺點

    –?????????帶索引的表在數據庫中需要更多的存儲空間

    –?????????操縱數據的命令需要更長的處理時間,因為它們需要對索引進行更新

    ?

    創建索引的指導原則

    ???????????請按照下列標準選擇建立索引的列。

    –?????????該列用于頻繁搜索

    –?????????該列用于對數據進行排序

    ???????????請不要使用下面的列創建索引:

    –?????????列中僅包含幾個不同的值。(如果該列存在大量重復的數據,則不能在該列上創建索引,否則會降低性能)

    –?????????表中僅包含幾行。為小型表創建索引可能不太劃算,因為SQL Server在索引中搜索數據所花的時間比在表中逐行搜索所花的時間更長

    ?

    ?SQL觸發器:

    ???觸發器是一種特殊類型的存儲過程,它不同于之前的我們介紹的存儲過程。觸發器主要是通過事件(增、刪、改)進行觸發被自動調用執行的。而存儲過程可以通過存儲過程的名稱被調用。

    觸發器是在對表進行增、刪、改時,自動執行的存儲過程。觸發器常用于強制業務規則,它是一種高級約束,通過事件進行觸發而被執行。

    二、觸發器分類

    SQL Server 包括兩種常規類型的觸發器:事前觸發器,事后觸發器

    1、觸發器分為:

    1) after觸發器(事后觸發)

    ????a、 insert觸發器

    ????b、 update觸發器

    ????c、 delete觸發器

    2) instead of 觸發器 (事前觸發)

    注:after觸發器要求只有執行某一操作**insert、update、delete之后觸發器才被觸發,且只能定義在表上。而**instead of觸發器表示并不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身。

    create?trigger?InsertName

    on?Goodsindent--觸發器創建在哪張表上

    with?encryption--給觸發器加密

    for?insert--創建添加類型觸發器

    as

    declare?@goodsname?varchar(50),@qty?int

    select?@goodsname=GoodsName,@qty=qty?from?inserted

    update?Goods?set?GoodsNum=GoodsNum-@qty?where?GoodsName=@goodsname

    SQL游標:

    游標(cursor)

      游標是系統為用戶開設的一個數據緩沖區,存放SQL語句的執行結果

    在數據庫中,游標是一個十分重要的概念。游標提供了一種對從表中檢索出的數據進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制

    游標的一個常見用途就是保存查詢結果,以便以后使用。游標的結果集是由SELECT語句產生,如果處理過程需要重復使用一個記錄集,那么創建一次游標而重復使用若干次,比重復查詢數據庫要快的多。如果我們做的數據量大,而且系統上跑的不只我們一個業務。所以,我們都要求盡量避免使用游標,游標使用時會對行加鎖,可能會影響其他業務的正常進行。而且,數據量大時其效率也較低效。另外,內存也是其中一個限制。
    因為游標其實是相當于把磁盤數據整體放入了內存中,如果游標數據量大則會造成內存不足,內存不足帶來的影響大家都知道了。所以,在數據量小時才使用游標

    存儲過程:

    ? 1.存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需再重新編譯,而一般 SQL 語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。
    ? 2.當對數據庫進行復雜操作時(如對多個表進行 Update,Insert,Query,Delete 時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。這些操作,如果用程序來完成,就變成了一條條的 SQL 語句,可能要多次連接數據庫。而換成存儲,只需要連接一次數據庫就可以了。
    ? 3.存儲過程可以重復使用,可減少數據庫開發人員的工作量。
    ? 4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權。

    轉載于:https://www.cnblogs.com/MNCnblogs/p/10437441.html

    總結

    以上是生活随笔為你收集整理的数据库分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。