1. 程式人生 > >基於sqlserver的常用查詢、檢視、觸發器、儲存過程用法

基於sqlserver的常用查詢、檢視、觸發器、儲存過程用法

首先在這申明,sqlserver是不區分大小寫的。

SqlServer插入語句

insert into <表名>  [<屬性1><屬性2><屬性3>] values(<常量1><常量1><常量1>)

SqlServer修改資料語句

update <表名> set <列名>=<表示式>,<列名>=<表示式> [where <條件>]

SqlServer刪除資料語句

delete from <表名> [where
<條件>]

查詢中消除重複的行

select distinct Sno from sc;

where子句後面常跟的查詢條件

  1. 比較—(=、<、>、>=、<=、!=、!>、!<(不小於)、)
  2. 確定範圍—-(between and、not between and)
  3. 確定集合—–(in、not in)
  4. 字元匹配——(like、not like)
  5. 空值——(is null,is not null)
  6. 多重條件—–(and、or、not)
下面是上述的例子
select Sname from student where sdept='cs'
;
select Sname from student where sage between 20 and 30;(如果用not between and 就是不在這個範圍的)
//使用謂詞來查詢屬性是否屬於指定集合元祖
select sname  from student where sdept in('cs','ma','is');
select sname from student where sname like '劉%'; 
select sname from student where sname like '_勇'; 

//  %用來代表任意長度的字串
//  _下劃線代表是任意字元
select sno from sc where grade is  not null;
select sname from  student where sdept='cs' and sage<20;

order by子句

使用者可以用order by子句對查詢結果按照一個或多個屬性列進行排序,預設是升序。

select sno ,grade from sc where cno='3' order by grade desc;//升序是asc

聚集函式

  1. count(*) ——-統計元祖的個數
  2. count(distinct 列名)——統計某個列值的個數
  3. sum(distinct 列名)——–統計列的總和
  4. avg(distinct 列名)——-計算列的平均值
  5. max(distinct 列名)——-計算列的最大值
  6. min(distinct 列名)——-計算列的最小值
select AVG(grade) from sc ;

注意:

where 子句是不能用聚集函式作為條件表示式,聚集函式只能用於select 子句和group by 的having子句中。

group by子句

顧名思義,這個子句將查詢結果按照某一列或者多列值分組,值相等的為一組。對查詢結果分組是為了細化聚集函式作用物件,分組後,聚集函式將作用於每一組,每一組都有一個函式值。

select cno,COUNT(sno) from SC group by Cno;
//查詢課程號下對應的選課人數。
// *凡是在group by後面出現的欄位,必須要在select後面出現,或者該欄位以聚合函數出現在select後面*  詳細的理由如下:

//這句話的意思,就是將相同學號的grade列的屬性值求平均值
select sno ,avg(grade) from sc group by sno;

正確的結果:

![這裡寫圖片描述](https://img-blog.csdn.net/20171104185913643?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmVudXMzMjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

如果這時你不寫sno,沒問題,你自己知道是個啥就ok。

但是如果你這時寫了個下面這個

select grade ,avg(grade) from sc group by sno;
//就會產生錯誤選擇列表中的列 ‘sc.Grade’ 無效,因為該列沒有包含在聚合函式或 GROUP BY 子句中。
//很明顯呀,你是按照學號排,你把分組之後的結果和grade放在一起,你覺得符合人之常情嗎,明白了沒,這麼通俗易懂!!!!!!

having

having一般是跟在group by子句後面,是對分組之後的資訊篩選。

where作用物件是基本表或者是檢視,而having作用於組,從中選擇滿足條件的組。

select sno from sc group by having count(cno)>2;
//查詢選修課程兩名以上的學號。

兩表等值連線查詢

連線查詢,連線主要通過他們的公共屬性。

select sname ,cno from SC,student where SC.Sno = Student.Sno;
//*注意在連線查詢的時候,一定要注意如果出現的屬性兩個表都有一定要加表名區分*

兩表自身連線

是在一個表中進行自身的連線。主要通過給表起兩個不同名字,讓相關心的欄位等值連線。

例子:在一個表中要查每門課的先修課的先修課。

select first.cno,second.cno from Course first,Course second where first.Cno = second.Cpno;
//*在自身連線中如果查詢條件中和select後面出現的欄位一致,前面以示區分的表別名要不一致,否則有問題。*

tip

在這裡我說一下,sql查詢是採用的巢狀迴圈連線演算法思想,就是在一個表中,我查詢到一條資料,然後從另一個表,一一去尋找等值關係的資料,在返回。

外連線

就是在兩個表進行連線查詢,如果查詢的結果有一方面是為空的,那麼該結果是不儲存的。

例子:比如查詢考生的選課情況,及成績,如果該同學沒有選課,那麼就查不到該學生,所以要是想顯示該學生,必須按照學生表為主,顯示。

select Student.Sno,sname,grade,cno from student,SC where Student.Sno  =SC.Sno;//它會直接忽略沒有選課成績的學生資訊

select Student.Sno,sname,grade,cno from student left outer join sc on( Student.Sno  =SC.Sno);//這種查詢就是外連線查詢。//注意哪個表在前就是以哪個表為主
//其實有外連線就是換個說法,順序不一樣,自己看吧。

多表連線

其實對於已經掌握了兩個表連線,在多幾張表,其實道理都是一樣的。它本質,還是兩個表進行連線,每兩個連線好了,在連線第三個等。

select student.sno,sc.cno,grade,cname from Student,SC,Course where Student.Sno = SC.Sno and SC.Cno = Course.Cno;

巢狀查詢(可以多層巢狀)

巢狀查詢語句可以在where子句和having中,需要注意的是巢狀查詢中不能在使用group by,因為group by只能對最終結果排序。

巢狀查詢如果子查詢的結果是一個值,可以用=代替in,如果是多個還是用in。

查詢沒有選修“計算機導論”或者 “高等數學”的學生。

思路:我們要查詢的學生的學號應該不在選修“計算機導論”或者 “高等數學”的學生學號中。

select sno from Student where Sno not in (select Sno from SC where Cno in(select Cno from Course where Cname in('計算機導論','高等數學')));
不相關子查詢

子類查詢的條件不依賴於父類,一般先執行子查詢,然後根據子查詢的結果用於父類查詢的條件。

select sname from Student where Sdept in (select Sdept from Student where Sname='劉晨')
//查詢和劉晨一個系的學生
//自身連線
select first.sname from Student first ,Student second where first.Sdept = second.Sdept and second.Sname='劉晨'
//查詢選修資訊系統的學生資訊
select sc.sno,sname from SC,Student where Cno in(select Cno from Course where Cname='資訊系統') and SC.sno=Student.sno
select student.sno,sname from SC,Student,Course where Student.Sno = SC.Sno and SC. cno= Course.Cno and Cname='資訊系統'
相關查詢

在主查詢中,每查詢一條記錄,需要重新做一次子查詢,這種稱為相關子查詢。

找出每一個學生它的成績是超過他所有選課平均成績的學生資訊

select sno,cno from SC x where grade>=(select AVG(grade) from sc y where y.Sno = x.Sno)

執行過程,外面的查詢一個學號,就要根據這個學號去找他的對應的選課門數,並且求平均值,如果符合條件就輸出。
//相關子查詢還是有難度,靠以後多試去理解。

帶有any(some)、all謂詞子查詢
  • >any 大於子查詢結果中的某個值
  • >all 大於子查詢的所有值
  • !=any 不等於子查詢結果中的某個值
  • !=all 不等於子查詢結果中的所有值
//查詢非計算機系中比計算機系任意一個學生年級小的學生。
select sname,sno from student where sage<any(select sage from student where sdept='cs') and sdept!='cs';

//查詢非計算機系中比計算機系所有學生年級小的學生。
select sname,sno from student where sage<any(select sage from student where sdept='cs') and sdept!='cs';
帶謂詞(Exists)的子查詢

Exists代表存在量詞,帶Exists的謂詞子查詢不返回任何資料,只產生邏輯真和邏輯假。

//連線查詢
select sname from SC,Student where SC.Sno = Student.Sno and Cno=1;

//謂詞查詢
select sname from Student where exists(select * from sc where SC.sno = student.sno and cno=1)
//他的執行過程,先從student表中每一條記錄拿學號和對應的sc.sno並且cno =1,如果符合條件將student中的sname儲存到結果集。
//如果內層查詢結果非空,則外層where子句返回真值,否則返回假值。
//由於exists引出的子查詢,其目標列通常用*表示,因為exists子查詢不返回真值,給出列名無意義。
//與exist對應的是no exists(不存在)
select sname from Student where no exists(select * from sc where SC.sno = student.sno and cno=1)

查詢同時選修“計算機導論”或者 “高等數學”的學生

思考:這兩門課沒有一門是他沒有選修的。

select sno,sname from Student where not exists (select * from Course where   Cname in ('計算機導論','高等數學') and not exists (select * from SC where Sno =Student.Sno and Cno = Course.cno));

集合查詢

主要包括:並(union)、交(intersect)、差(except)。

//其實我並不明白存在的意義,明明可以用or、and處理,也許我還沒發現其中奧妙。
在集合操作union會自動去除重複的,而or是所有的包括重複,在集合中如果不要重複union all

差運算就是返回除去條件後的所有結果集。

//查詢選修課程1或者課程2的學生
select sno from SC  where cno=1 union select sno from SC where Cno =2 
select sno from SC where Cno =1 or Cno =2;

基於派生表的查詢

子查詢可以在from子句出現,這時子查詢生成臨時表,成為主查詢物件。

//查詢超過他選修所有課程成績平均值的學生
select sc.sno,cno from SC ,(select sno,AVG(grade) from SC group by(sno)) as avg_1(sno,avg_grade)
where avg_1.sno = SC.Sno and grade>avg_1.avg_grade

//該執行過程,在執行到from後面將結果集儲存在臨時表中,然後在進行條件比較,最終返回符合的結果。

//*如果子查詢中沒有聚合函式,或者計算式,可以無需指定別名*

檢視

檢視是從一個或幾個基本表(或檢視匯出的表),它與基本表不同,是一個虛表。資料庫中只存放檢視的定義,而不存放檢視對應的資料,這些資料仍然放在原來的基本表中,所以基本表資料一旦發生改變,檢視中查詢的資料也會隨著改變。

檢視可以和基本表一樣被查詢、刪除,也可以在新的檢視上定義新的檢視,但是對檢視的更新、修改則有規定。

記住往檢視中插資料、更改資料、刪除資料,都是和基本表一樣,只不過換了一個套路,將表名換成檢視名。

建立檢視

create view [<列名><列名><列名><列名>]  as <子查詢> [with check option]

//with check option  表示對檢視進行updateinsertdelete的時候保證操作的,滿足子查詢的條件表示式

//組成檢視的屬性列要麼全部省略要麼全部指定,不存在其他,如果省略,那麼列名就是子查詢select後面的列組成。
下面3中情況必須指明檢視的所有列名
 1. 子查詢中不是單純的屬性名,而是聚合函式或者是列表達式。
 2. 多表連線的時候,選出同名列作為檢視的欄位。
 3. 需要為檢視起一個更合適的名字。

查詢檢視

SELECT 欄位 FROM 檢視名
//這裡欄位如果你建立檢視給了欄位名,就直接用,不然還是子查詢的select後面的屬性列名。
檢視的檢查
create view view3 as select sno,sname,sage,sdept from Student where sdept ='資訊系' with check option;
//在後面對檢視的操作中,增刪改,讀必須有條件就是部門是資訊系,最簡單你不能往檢視中加一個別的系的,這個還懂嗎!!!!!!!!!!!
檢視上的建立

建立選修c01並且grade>90檢視

create view view5 as select sname from view4 where grade >90;
//這個檢視就是基於view4之上,view4中有grade欄位。
虛擬列檢視

建立學生的姓名,出生日期的檢視

該查詢中包含計算公式,所以必須建立一個新的列,所以整個查詢的都要顯示的賦一個名字。

create view view6(sname,sbirth) as select sname,2017-sage from Student;
基於分組的檢視

查詢每一個學生多門選修的平均成績的檢視

該查詢中包含聚合函式,所以要顯示指定每一個屬性列。

create view view7 (sno,savg) as select sno,AVG(grade) from SC group by Sno;
刪除檢視
Drop view <檢視名> [CASCADE]

如果該檢視上海匯出其他檢視,那麼需要加上級聯操作,這樣才可以將級聯的檢視一起刪除。

注意:刪除檢視,只是從資料字典中刪除,並不影響基本本的資料

檢視的查詢

在view1中查詢年紀小於22的學生資訊

select * from view1  where sage <22;//你可以利用檢視中屬性列名去做你需要的條件。
檢視是可以和基本表進行連線的
select grade from sc,view4 where view4.sno  =SC.Sno; 
檢視的修改

由於檢視是不實際儲存資料的虛表,因此對檢視的更新最終還是要轉化為對基本表的更新操作

修改學號為9521102學生成績為100

update view5 set grade =100 where sno='9521102'

在view中增加一個學生資訊

insert into view7(sno,sname) values ('99999','老槍1');

刪除學生資訊

delete from view7 where sno='99999'

觸發器

觸發器是使用者定義在關係表上的一類由事件驅動的特殊過程。它主要實現更復雜的約束。

當特定事件(如對一個表的增刪改,事務的結束等)發生時,對規則的條件進行檢查,如果條件成立則執行規則中的動作,否則不執行該動作。規則中的動作體可以很複雜,通常是一段SQL儲存過程。

觸發器可以建立基本表或者檢視上。

觸發器的優點
  1. 觸發器是自動的
  2. 觸發器可以通過資料庫中的相關表進行層疊更改。
  3. 觸發器可以強制限制,這些限制比用check約束更復雜。
  create trigger <觸發器名>  on {table|view}
 [with encryption] for {after|instead of} {insert|update|delete}
as 
sql_statement
//觸發器啟用後所作的操作,例如檢查、回滾,插入,刪除
觸發器after、instead of區別

AFTER:觸發發生在SQL操作後,若發生錯誤,可利用回滾恢復原資料。

INSTEAD OF:觸發發生在SQL操作前,且如何操作由觸發器操作來實現。

INSTEAD OF 觸發器的主要優點是可以使不能更新的檢視支援更新。(為什麼說INSTEAD OF對於檢視的更新有很大作用,首先我們都知道檢視是虛表,不可以對基本表進行修改,所以在檢視上修改就是不可能,那麼你用觸發器的INSTEAD OF,就是代替執行,可以轉化為對基本表的執行)基於多個基表的檢視必須使用 INSTEAD OF 觸發器來支援引用多個表中資料的插入、更新和刪除操作。

每個表只能有一個同類型的INSTEAD OF觸發器

After觸發器:這類觸發器是在記錄已經改變完之後(after),才會被啟用執行,它主要是用於記錄變更後的處理或檢查,一旦發現錯誤,也可以用Rollback Transaction語句來回滾本次的操作。

Instead Of觸發器:這類觸發器一般是用來取代原本的操作,在記錄變更之前發生的,它並不去執行原來SQL語句裡的操作(Insert、Update、Delete),而去執行觸發器本身所定義的操作。

建立trigger的注意點
  • After只能用於資料表上,instead of可以用於表與檢視上 允許建立多個同類操作的after觸發器,但同類的insteadof觸發器只能有一個
  • 只有after觸發器才能設定執行次序 可以設定 為first 或 last
  • 可以用系統儲存過程sp_settriggerorder設定 sp_settriggerorder @triggername = ‘MyTrigger’, @order = ‘first’, @stmttype = ‘UPDATE’
  • 在對基礎表進行更新前激發 INSTEAD OF 觸發器 ALTER TRIGGER 語句更改了第一個或最後一個觸發器,則將除去 First 或 Last 特性
  • 兩個觸發器完全相同,會先執行後建立的觸發器。執行的順序與建立的順序相反。
DELETED表和INSERTED表(記憶體表)

DELETED 表用於儲存 DELETE 和 UPDATE 語句所影響的行的副本。

INSERTED 表用於儲存 INSERT 和 UPDATE 語句所影響的行的副本。INSERTED 表中的行是觸發器表中新行的副本。

觸發器例子

建立一個觸發器禁止插入,修改課程表,出現相同的課程名

create trigger courese_trigger on course for update ,insert 
as
if((select count(*) from course ,inserted where course.cname=inserted.cname)>1)//sql語言的編寫,後面會講,你看看吧。
//這個inserted表,會儲存你插入的資訊,從這個記憶體表中找到呢要插入的cname,來判斷表中要沒有此過程。
  begin
  print '存在相同的課程名,操作無法執行'//打印出錯資訊
  rollback transaction//事務回滾,不做任何操作
  end

建立觸發器 ,學生選修同一門課程不能超過5人

  create trigger sc_trigger on sc for insert 
  as

  if((select count(*) from sc,inserted where sc.cno = inserted.cno)>5)
  begin
  print '該課程選修人數超過5人,該操作無法執行'
  rollback transaction//注意對於條件約束檢查,如果不滿足一定要執行回滾事件,不然該操作還是會執行。
  end

建立觸發器在訂單表(ORDER)中插入或修改訂購數量(NUM),必須滿足客戶相應等級的數量上限和下限。

CREATE TRIGGER [CHECK_NUM] ON [ORDER] //在寫該題有個注意點,就是sqlserver如果你自己定義和保留字一樣,那麼需要加[]以區分,注意以下。
FOR INSERT, UPDATE
AS
IF UPDATE(NUM)//如果你這樣指定的話,只有修改num列的時候才會觸發該觸發器
BEGIN
//*由該例子我們可以看到if後面的條件我們要刪除轉化為存在、不存在、count(*)的比較*
   IF NOT EXISTS( 
     SELECT * FROM  INSERTED ,CUSTOMER,CUSTOMERLEVEL 
     WHERE INSERTED.CID=CUSTOMER.CID AND
     CUSTOMERLEVEL.CLEVEL=CUSTOMER.CLEVEL AND 
     NUM NOT BETWEEN CUSTOMERLEVEL .NUMDOWN AND
     CUSTOMERLEVEL .NUMUP ) 
     //該例項判斷也可這樣
     /*if((select count(*) from customerlevel,inserted ,customer,[order] where inserted.cid = customer.cid and customer.clevel= customerlevel.clevel and inserted.num between numdown and numup)<1)*/
    BEGIN
      PRINT  '訂購數量違反了客戶的限額!'
        ROLLBACK
    END
END

基於instead of 的觸發器

create view view8 as select sno,sname from student//建立檢視

select * from view8;

create trigger studnet_trigger on view8 
instead of insert//在插入檢視前操作
as
 begin
 insert into Student (Sno,sname)values ((select sno from inserted),(select sname from inserted))//通過這個可以看出,觸發器還是轉化對基本表的操作
 end

 insert into view8(sno,sname) values('88888','槍仔')//往檢視中插入資料,和往表中插入資料一致。

Transact-SQL

SQL作為結構化查詢語言,是標準的關係型資料庫通用的標準語言;T-SQL是在SQL基礎上擴充套件的SQL Server中使用的語言。你自己聯想oracle的pl/sql,和這個就在一個層面上。有了這個你就可以在sqlserver上面寫程式了。

Transact-SQL 變數是 Transact-SQL 批處理和指令碼中能夠儲存資料值的物件。宣告或定義變數後,批處理中的一個 Transact-SQL 語句可以設定變數值,而該批處理中後面的語句可以從變數獲得此值。

T-SQL 常用語法

如果你要完整的學習該語法

變數申明

指定一個名稱。 名稱的第一個字元必須為一個 @。

DECLARE @MyCounter int;

一個簡單例子:

求和

 declare @x int// declare不能少。
 declare @y int
 declare @z int

 set @x  =10//賦值給常數需要加set
 set @y  = 20

 set @z = @x+@y
 select @x,@y,@z;

這裡寫圖片描述

是不是很神奇啦啦

指定查詢學生的學號

 declare @sno char(7)//這邊的資料型別,你最好對應表的資料型別一致。

 set @sno  ='9512101'

 select * from student where sno = @sno;


//需要注意的是,你必須一起執行上述程式碼,否則就會出現你沒申明該變數的錯誤,注意一下。
begin..end
BEGIN  
    { sql_statement | statement_block }   
END

定義一系列一起執行的 Transact-SQL 語句

雖然所有的 Transact-SQL 語句在 BEGIN…END 塊內都有效,但有些 Transact-SQL 語句不應分組在同一批處理或語句塊中。

if….else
IF Boolean_expression   
     { sql_statement | statement_block }   
[ ELSE   
     { sql_statement | statement_block } ]

在判斷語句中可以沒有else,另外這個中是不需要{},所以我們要把if放在begin….end程式碼塊中。

儲存過程

我們之前寫的T-SQL語言都是你匿名塊,每次執行的時候,都需要進行編譯,並且不能儲存到資料庫中。而過程和函式是命名塊,他們被編譯後儲存在資料庫中,稱為持久化儲存塊,可以反覆呼叫,執行速度快。

儲存過程是由過程化sql語句書寫的過程,這個過程經編譯和優化後儲存在資料庫伺服器中,使用時呼叫即可。

儲存過程定義
 create procedure ([procedure_name]  [引數1]
[引數2] [引數3] [引數n])
as
sql_statement
建立不帶引數的儲存過程
 create procedure student1 
 as
 begin
 select distinct sname,sc.cno,grade from student,sc,course where student.sno = sc.sno and   sc.cno = course.cno and sdept='計算機系'
 end

 exec student1//執行儲存過程
建立帶引數的儲存過程
  create procedure student2(@sdept char(20))//裡面變數,這裡不加declare可能定義儲存過程的底層已經有了
 as

 begin
 select distinct sname,sc.cno,grade from student,sc,course where student.sno = sc.sno and sc.cno = course.cno and [email protected]//裡面賦值,這裡不加set可能定義儲存過程的底層已經有了
 end

  exec student2 '數學系'//傳入真正執行的引數
建立引數有預設值的儲存過程
  create procedure student3(@sdept char(20)='數學系')

 as
 begin
 select distinct sname,sc.cno,grade from student,sc,course where student.sno = sc.sno and sc.cno = course.cno and [email protected]
 end
   exec student3 
建立輸出儲存過程的值
 create procedure produce1 (@cname varchar(20),@avg int output)//建立一個輸出引數
 as 
 begin
 select @avg = avg(grade) from sc,course where sc.cno = course.cno and [email protected]
 //將執行結果的值賦值給輸出引數
 end

 declare @return_avg int//申明要列印的引數

 exec produce1 'vb' ,@return_avg  output//後面的語句執行會將儲存過程的輸出值賦值給定義的變數然後列印,output不能少。

 print @return_avg
儲存過程稍微複雜例子
create procedure proceduce2 (@sno char(7),@cno char(10))

as
begin
if((select count(*) from sc where sc.cno = @cno)>5)
 return  0
else
  begin
   if((select COUNT(*) from SC where [email protected])>3)
   return -1//可以使用return標誌執行結束
   else
   insert into SC(Sno,cno) values(@sno,@cno)
  return 1
 end
end
declare @out int
exec @out = proceduce2 '9512101','C05' //可以直接將儲存過程的返回值賦值給變數
print @out

相關推薦

Oracle中檢視觸發器儲存過程/函式

檢視 檢視就是封裝了一條複雜查詢的語句。 語法 1.:CREATE VIEW 檢視名稱 AS 子查詢 語法 2:CREATE OR REPLACE VIEW 檢視名稱 AS 子查詢 語法 3:CREATE OR REPLACE VIEW 檢視名稱 AS 子查詢 WITH

mysql檢視所有觸發器以及儲存過程等操作集合

mysql 查詢表,檢視,觸發器,函式,儲存過程 1. mysql查詢所有表:     SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '資料庫名' AND  

SQL語句優化,索引,檢視觸發器儲存過程,函式等。

    一,SQL優化        主要解決海量資料操作時的全表搜尋,所以減少不必要的全表搜尋是SQL優化的主要目的,下面總結一下常用的優化有哪些:        1,避免在where條件中使用!=或者<>,這樣會是的查詢放棄索引而進行全域性掃描       

【機房重構】——檢視觸發器儲存過程的使用

       在機房收費系統中,對多個表的查詢,要寫多個SQL是很麻煩的事情,為了方便我們寫程式碼,同時對程式碼進行解耦和,我們引用了檢視,觸發器,儲存過程。 一、是什麼? 檢視      從若干

基於sqlserver常用查詢檢視觸發器儲存過程用法

首先在這申明,sqlserver是不區分大小寫的。 SqlServer插入語句 insert into <表名> [<屬性1><屬性2><屬性3>] values(<常量1><常量

基於樹的查詢(二叉排序樹平衡二叉樹B樹B+樹伸展樹和紅黑樹)

本文主要介紹幾種比較重要的樹形結構: ① 二叉排序樹 ② 平衡二叉樹 ③ B樹 ④ B+樹 ⑤ 伸展樹 ⑥ 紅黑樹 分為三個問題來描述每種樹: ① 是什麼?主要應用? ② 有什麼特點(性質)? ③ 基於它的操作?

Django API檢視和模板Django投票系統

一、Django API 1.1 使用python shell 1.1.1 載入python shell 1. 使用如下命令來呼叫Python shell: (django_env)    [[email protected] 

【學習筆記】啟動Nginx檢視nginx程序檢視nginx服務主程序的方式Nginx服務可接受的訊號nginx幫助命令Nginx平滑重啟Nginx伺服器的升級

1.啟動nginx的方式:cd /usr/local/nginxls./nginx -c nginx.conf2.檢視nginx的程序方式:[[email protected] nginx

mysql批量查詢修改表, 批量刪除儲存過程

場景:有的時候需要批量更新部分有規律的表或者修改其屬性。 處理方案:使用 函式CONCAT 來生成批量執行sql語句,再執行批量sql語句。 如: 批量刪除所有表 SELECT CONCAT( 'drop table ', table_name, '

Android7.0呼叫系統拍照系統相簿(圖片壓縮檢視原圖許可權處理)

效果以及需求 檢視原圖可點選放大,可兩指放大等 1.PopupWindow的簡單使用 PopupWindow最基本的三個條件是一定要設定的:View contentView

基於sqlserver 實現查詢兩個經緯度之間的距離

查詢兩個經緯度之間的距離,可以實現按照距離排序。 --通過經緯度計算兩點之間的距離 ALTER FUNCTION [dbo].[fnGetDistanceNew] --LatBegin 開始維度 --LngBegin 開始經度 --29.490295,106

sqlserver檢視觸發器儲存過程檢視及表的一些命令

select name from sysobjects where xtype='TR' --所有觸發器 select name from sysobjects where xtype='P' --所有儲存過程 select name from sysobjects

mysql 查詢表,檢視,觸發器,函式,儲存過程

轉載自 http://www.cnblogs.com/sx2zx/p/6245887.html -1. mysql查詢所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '資料庫名' AND

檢視——觸發器——事務——儲存過程

1、什麼是檢視 檢視就是通過查詢得到一張虛擬表,然後儲存下來,下次用的直接使用即可2、為什麼要用檢視 如果要頻繁使用一張虛擬表,可以不用重複查詢3、如何用檢視create view teacher2course asselect * from teacher inner join course

2018.11.26檢視,觸發器.事物.儲存過程.函式.資料備份與恢復.流程控制

2018.11.26 一檢視 1什麼是檢視 檢視是有一張表或多張表的查詢結果構成的一張虛擬表,本質儲存一個 sql 語句在data檔案裡,當你呼叫它的時候就會執行這段sql語句.如果對檢視的記錄內容進行修改原本的資料記錄也會被修改,反之亦然.   2為什麼使用檢視   當我們

mysql 檢視,事務,儲存過程觸發器

一 檢視 檢視是一個虛擬表(非真實存在),是跑到記憶體中的表,真實表是硬碟上的表。使用檢視我們可以把查詢過程中的臨時表摘出來,儲存下來,用檢視去實現,這樣以後再想操作該臨時表的資料時就無需重寫複雜的sql了,直接去檢視中查詢即可,但檢視有明顯地效率問題,並且檢視是存放在資料庫中的,如果我們程式中使用的sql

建立兩張物化檢視。寫一個儲存過程,包括把兩個物化檢視手動全部重新整理,並把查詢結果返回cursor

--建立兩張物化檢視--第一張物化檢視create materialized view mv_ref_user_phone_allas select * from v_ref_user_phone_all;--第二張物化檢視create materialized view m

2020重新出發,MySql基礎,MySql檢視&索引&儲存過程&觸發器

@[toc] # 檢視是什麼 **檢視在資料庫中的作用類似於窗戶,使用者可以通過這個視窗看到只對自己有用的資料。既保障了資料的安全性,又大大提高了查詢效率**。 **MySQL 檢視(View)是一種虛擬存在的表,同真實表一樣,檢視也由列和行構成,但檢視並不實際存在於資料庫中**。行和列的資料來自於定義檢

惠州學院-資料庫實驗6-觸發器儲存過程

    計算機科學系實驗報告(首頁) 課程名稱 資料庫系統概論 班級 14計科2班 實驗名稱 觸發器和儲存過程

SQLServer(語法二)————新增一列(T_SQL+儲存過程

判斷列是否存在