久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

SQL學習基礎篇

時間:2019-05-14 12:48:04下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《SQL學習基礎篇》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《SQL學習基礎篇》。

第一篇:SQL學習基礎篇

創建數據庫:

CREATE DATABASE TEST_ABC;說明:(可以采用大寫也可以采用小寫,SQL語句本身不區分大小寫,創建完畢之 后需要用英文分號;來結尾,TEST_ABC是數據庫名字的代表)。

進入數據庫:

use TEST_ABC;說明:只有當創建好數據庫之后,進入數據庫,才能創建table(表)。創建表:

create table food_list(food_name varchar(10),food_price int(5));

說明:(table代表的是表,table之后的就是表的名字,名字之后用括 號(英文格式括起來),然后穿件的就是表的列的名字如food_name和 food_price,varchar和int代表的是這兩個的數據類型,其后括號里 面的數字表示的是可以接受的最大字符數,最后用分號結束整個表的創 建過程。)

檢查表:

desc food_list;

說明:desc是describe的縮寫。

刪除表:

drop table food_list;

插入值:

insert into food_list(food_name,food_price)values('鐵板魷魚','200');

說明:insert into表示插入,插入的某個數據庫中的表中的相應的值,第一個括弧之內的為每一列的名字,但是可以只是部分列的名字,而相 應的第二個括弧之內的為第一個括弧之內的列相對應的值,不可多也不 可少。中間用values來連接。

查找:

select * from food_list;

select * from food_list where food_name='鐵板魷魚';select food_name,food_price from food_list wherefood_name='紅燒豆腐';

select food_name,food_price from food_list wherefood_name='紅燒豆腐'and food_name='手抓羊肉' orfood_name='雞腿排骨' or food_price<20;

select * from food_list where food_price between 5and 20;

select food_name from food_list where food_namein('碳烤魚','鐵板魷魚','紅燒肉','辣子雞丁','烤龍蝦');

說明1: select是選擇,from表示從指定的某一張table(表)中選,第一個查詢語句用來顯示整個表的記錄情況,而第二個查詢語句是普通 的查詢方式,更為普遍,where后面表示條件,其后跟隨的是列的名字,如food_name,用等號連接 后面為查詢的對象,如鐵板魷魚,但是要用 英文的引號引起來,然后用英文的分號結束整個查詢語句即可。對于數 字類型的值可以加單引號也可以不加,而對于字符類型的值而言需要加 單引號,而且必須加單引號。說明2:對于第三個的格式,select后面是列的名字,表示選擇了某列,而* 號表示將所有的列全選上,其他的地方和以上兩個查詢語句相同。說明3:對于第四種形式而言,最大的不同在于對and和or 關鍵字的 應用,and表示兩個或者多個條件都要滿足,而or表示只要滿足其中的 一個條件就可以了。說明4:between是一個很有效的比較方式,和and連用,并且在第一 個between...and之后也可以接第二個between and。說明5:用in關鍵字可以代替連續使用多個or的情況,上述where子 句等同于where food_name='碳烤魚' or food_name='鐵板魷魚' orfood_name='紅燒肉' or food_name='辣子雞丁' or food_name='烤龍 蝦';還有一種狀況是not in作用和in 正好相反。

通配符:

select* from food_list where food_name like'_雞'and food_name like '%肉’;

說明:配合關鍵字like使用,通配符有%,_,%是任意數量的未知字符的通配符,_是單個未知字符的通配符,如'%肉'可能表示紅燒肉,可以表示手抓羊肉,也可 以表示孜然烤肉,總之,其表示以肉字為結尾的所有字符,而'肉%'表示以肉開頭 所有字符。'_雞',表示兩個字符,所有以'雞'為結尾的字符串。

刪除數據:

delete from food_list where food_name='紅燒肉';說明:delete后面直接跟from,from后面是某個表的名字where后面是條件,表示要刪除的某個元組(行)。

更新數據:

update food_list

setfood_name=”清真黑熊掌,暴炒驢肝”

where food_price=300;

說明:update之后的是表的名稱,set的是對指定的記錄要更新的值,而一切的決定權就設在where子句之中,如果沒有where子句,整個food_name都列被設置為 清真黑熊掌,暴炒驢肝。而且最后的where子 句之中也可以和and,or,in,not in,like等關鍵字組合使用。

第二篇:SQL基礎語句總結

一.四種基本的SQL語句

1.查詢

select * from table 2.更新

update table set field=value 3.插入

insert [into] table(field)values(value)4.刪除

delete [from] table 二.語句的執行順序

1.語法分析

分析語句中語法是否符合規范,衡量語句中各表達式的意義。

2.語義分析

檢查語句中涉及的所有數據庫對象是否存在,且用戶有相應的權限。

3.選擇優化器

不同的數據庫有不同的算法(這個涉及到數據結構),數據庫會根據自己的理解(數據庫本身)為 SQL語句選擇不同的優化器,不同的優化器會選擇不同的“執行計劃”

4.運行“執行計劃”

根據“執行計劃”執行SQL語句。以上所述是數據執行時的大體路線。

5.select 語句的執行順序

借用ItZik Ben-Gan、Lubor Kollar、Dejan Sarka所著的《Sql Server 2005 技術內幕:T-SQL查詢》的一段話足以說明:

(8)select(9)distinct(11) (1)from(3) join (2)on (4)where (5)group by (6)with {cube|rollup}(7)having(having_condition)(10)order by 從這個順序可以看出,所有的查詢語句都是從from開始執行的。在執行過程中,每個步驟都會為下一個步驟生成一個虛擬表,這個虛擬表將作為下一個執行步驟的基礎。第一步:from 首先對from子句中的前兩個表執行一個笛卡爾乘積,此時生成虛擬表vt1.第二步:on 接下來便是應用on篩選器,on 中的邏輯表達式將應用到 vt1 中的各個行,篩選出滿足on邏輯表達式的行,生成虛擬表 vt2.第三步:join 如果是outer join 那么這一步就將添加外部行,left outer jion 就把左表在第二步中過濾的添加進來,如果是right outer join 那么就將右表在第二步中過濾掉的行添加進來,這樣生成虛擬表 vt3.第四步:多表

如果 from 子句中的表數目多余兩個表,那么就將vt3和第三個表連接從而計算笛卡爾乘積,生成虛擬表,該過程就是一個重復1-3的步驟,最終得到一個新的虛擬表 vt3.第五步:where 應用where篩選器,對上一步生產的虛擬表引用where篩選器,生成虛擬表vt4,在這有個比較重要的細節不得不說一下,對于包含outer join子句的查詢,就有一個讓人感到困惑的問題,到底在on篩選器還是用where篩選器指定邏輯表達式呢?on和where的最大區別在于,如果在on應用邏輯表達式那么在第三步outer join中還可以把移除的行再次添加回來,而where的移除的最終的。第六步:group by 分組,生成虛擬表 vt4 第七步:having 對vt4應用having篩選器,生成虛擬表 vt5 第八步:select 處理select 列表,生成虛擬表vt6 第九步:distinct 將vt6 中重復的行去掉,生成虛擬表vt7 第十步:order by 將vt7中的行按order by 子句中的列列表排序,生成一個游標vc8 第十一步: top 從vc8的開始處選擇指定數量或比例的行,生成虛擬表vt9,并返回給調用者 三.SQL語句擴展

1.select 1.1 選擇性插入語句

1.1.1 Insert into table1(field1)Select field2 from table2 要求table1必須存在。

1.1.2 select field1 into table1 from table2 要求table1不存在,在運行時會自動創建表名為table1,字段名為field1的一個表。1.2打開其它數據源

/* OracleSvr為鏈接服務器名,本示例假定已經創建了一個名為 ORCLDB 的 Oracle 數據庫別名。*/ EXEC sp_addlinkedserver 'OracleSvr',--鏈接服務器名OracleSvr,sysname類型

'MSDAORA',--provider_name數據源提供程序,此處為oracle 'ORCLDB'--數據源名稱 GO Select * from OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles')如果有多個sql server實例:

SELECT *FROM [servernameinstancename.]pubs.dbo.authors.注意:一個對象的完整名稱包括四個標識符:服務器名稱、數據庫名稱、所有者名稱和對象名稱。其格式如下: [ [ [ server.] [ database ].] [ owner_name ].] object_name 中間的名稱可以省略,但是.不可以省略。如:server…object_name 2.update 2.1多表更新

Update table1 set table1.field 1=table2.field2 from table1,table2 /*猜測下連接方式全聯接 FULL [OUTER] JOIN */ where table1.field3= table2.filed3 知識:SQL Server的update語句中from后可跟多個表,Oracle則不支持該用法 Oracle 中:Update table1 set table1.field1=(select table2.field2 from table2 where.field3= table2.filed3)3.insert 3.1 插入語句的規范問題

在sql server 2000,sql server 2005中

標準語句:insert into table(field)values(value)提示:在access中不正確,原因sql語句不規范,因此在書寫sql語句的過程中一定要按正規的語法來寫。

4.delete 4.1標準刪除

標準語句:delete from table where condition 提示:同insert 4.2其它刪除 4.2.1 truncate 語法:truncate table table_name 刪除表中所有行,不記錄單個行刪除操作,不記錄日志,,所有速度比Delete快。4.2.2 drop

語句: Drop table table_name 刪除表及相關,有fk約束的不能刪,先去年fk;系統表不能使用。

5.order by 功能:排序

技巧:order by newid()隨機排序

四.動態SQL語句

4.1基本原則

4.1.1預編譯問題

在EXECUTE執行之前,數據庫不會編譯 EXECUTE 語句內的語句,動態SQL語句就是放到存儲過程中,它也不會預先編譯。

4.1.2什么時候使用動態SQL語句

字段名,表名,數據庫名作為變量時,必須用動態SQl語句

4.2.exec[ute] 4.2.1語法

exec(?select * from table_name where name=???+@name+????)--括號不能少 4.2.2傳遞參數

--假設存儲過程test_sp中需要一個參數:類型nvarchar(50)名稱 @parm Declare @parms nvarchar(50)Set @parms=?測試變量?

Exec test_sp [@parm=]@parms –方括號內的可以省略 如果是批處理中的第一句,則可以省略Exec 4.2.3輸出參數

declare @num int, @field int, @sqls nvarchar(4000)Set @field=1 set @sqls='select @a=count(*)from table_name where field=@field' exec sp_executesql @sqls,N'@a int output,@field int',@num output ,@field select @num 4.3.sp_executesql 語法:exec[ute] sp_executesql N?select * from table_name where field=@field?,N?@field int?,@field=1 使用sp_exexutesql比使用exec更有效率.

第三篇:sql語句學習

一、選擇題

1、SQL語言是()語言。——(SQL特點)(易)

A)層次數據庫 B)網絡數據庫 C)關系數據庫D)非數據庫

答案:C2、SQL語言具有兩種使用方式,分別稱為交互式SQL和()。

——(SQL語言使用方式)(易)

A)提示式SQLB)多用戶SQLC)嵌入式SQLD)解釋式SQL

答案:C

3-4-5()包括數據庫模式定義和數據庫存儲結構與存取方法定義。()實現對DB的操作,包括查詢、插入、刪除、修改數據庫中的數據。()用于數據保護,包括數據的安全性,完整性,并發控制和恢復等。——(數據庫語言DDLDMLDCL)(中)

A)數據控制子語言 B)數據定義子語言 C)數據操縱子語言 D)數據庫語言

答案:B C A

6-7-8-9-

10、下列SQL語句中,實現數據檢索的語句是(),修改表結構的是(),修改屬性值的是(),刪除表結構的是(),刪除表記錄的是()。

——(DROP TABLE, ALTER TABLE,UPDATE, DELETE,SELECT 語句)(易)

A)SELECTB)DROPC)UPDATED)ALTERE)DELETE

答案:A D C B E

二、用關系代數表達式及SQL語句描述關系查詢

1、設有如下關系表R、S和T:——(易)R(BH,XM,XB,DWH)

S(DWH,DWM)

T(BH,XM,XB,DWH)

寫出實現下列關系代數的SQL語句:

1)?DWH?'100'(R)σDWH=’100’(R)

2)?XM,XB(R)∏xM,XB(R)

3)?XM,DWH(?

4)R?S R∞S

5)?XM,XB,DWH(?

解:

1)SELECT * FROM R WHERE DWH=’100’;

2)SELECT XM,XB FROM R;

3)SELECT XM,DWH FROM R WHERE XB=’女’;

4)SELECT R.*,S.DWM FROM R, S WHERE R.DWH=S.DWH;

5)SELECT XM,XB,DWH FROM R,S WHERE R.DWH=S.DWH AND XB=’男’;XB?'男'XB?'女'(R))∏XM,DWH(σXB=’女’(R))(R?S))∏XM,XB,DWH(σXB=’男’(R∞S))

2、設有如下三個關系:——(易-易)

A(A#,ANAME,WQTY,CITY): A#:商店代號;ANAME:商店名;WQTY:店員人數

B(B#,BNAME,PRICE):B#:商品號;BNAME:商品名稱;

AB(A#,B#,QTY):QTY:商品數量

試用關系代數和SQL語言寫出下列查詢。

1)找出店員人數不超過100人或者在長沙市的所有商店的代號和商店名;

2)找出供應書包的商店名;

解:

1)?A#,ANAME(?WQTY??100 ? CITY?'長沙'(A))∏A#,ANAME(σWQTY<=100ⅤCITY=’長沙’(A))

SELECT A#,ANAME FROM A WHERE WQTY<=100 OR CITY=’長沙’;

2)?ANAME((?BNAME?'書包'(B))?AB?A)∏ANAME((σBNAME=’書包’(B))∞AB∞(A))

SELECT ANAME FROM A,B,AB

WHERE BNAME=’書包’ AND B.B#=AB.B# AND AB.A#=A.A#;

3.設有如下關系模式:

student(NO, NAME , SEX ,BIRTHDAY, CLASS)

teacher(NO,NAME,SEX,BIRTHDAY,PROF,DEPART)PROF為職稱,DEPART為系別

course(CNO, CNAME, TNO)

score(NO, CNO, DEGREE)DEGREE 為成績

寫出實現以下各題功能的SQL語句:

(1)查詢至少有2名男生的班號;——(難)

(2)查詢不姓“王”的同學記錄;——(易)

(3)查詢每個學生的姓名和年齡;——(難)

(4)查詢學生中最大和最小的birthday日期值;——(中)

(5)查詢學生表的全部記錄并按班號和年齡從大到小的順序;——(中)

(6)查詢男教師及其所上的課程;——(中)

(7)查詢最高分同學的學號,課程號和成績;——(中)

(8)查詢和“李軍”同性別并同班的所有同學的姓名;——(中)

(9)查詢選修“數據庫系統概論”課程的男同學的成績表;——(中)

(10)查詢所有未講課的教師的姓名和所在系別;——(難)

(11)查詢“計算機系”教師所教課程的成績表;——(難)

(12)查詢選修“3-105”課程的成績高于“109”號同學成績的所有同學的記錄;——(難)

(13)查詢最低分大于70,最高分小于90的學生的學號;——(中)

(14)查詢成績在60到80之間的所有記錄;——(中)

(15)查詢成績比該課程平均成績低的同學的成績表;——(相關子查詢)(難)

(16)查詢所有女教師和女同學的姓名、性別和生日;——(中)

(17)查詢“計算機系”和“無線電系”不同職稱的教師的姓名和職稱;——(中)

解:(1)SELECT CLASS FROM student WHERE SEX=‘男’

GROUP BY CLASS HAVING COUNT(*)>=2;

(2)SELECT * FROM student WHERE NAME NOT LIKE ‘王%’;

(3)SELECT NAME,year(date())-year(birthday)as age FROM student;

(4)SELECT MAX(BIRTHDAY), MIN(BIRTHDAY)FROM student;

(5)SELECT * FROM student ORDER BY CLASS,BIRTHDAY DESC;

(6)SELECT x.name, y.cname FROM teacher x, course y WHERE x.no=y.tno and x.sex=’男’;

(7)SELECT * FROM score WHERE degree=(SELECT max(degree)FROM score);

(8)SELECT name FROM student WHERE sex=(SELECT sex FROM student WHEREname=’

李軍’)and class=(SELECT class FROM student WHERE name=’李軍’);

(9)SELECT * FROM score WHERE no IN(SELECT no FROM student WHERE sex=‘男’)and

cno=(SELECT cno FROM course WHERE cname=‘數據庫系統概論’);

(10)SELECT name, depart FROM teacher t WHERE NOT EXIST(SELECT * FROM course c

WHERE c.tno=t.no);

(11)SELECT * FROM score s, teacher t, course c WHERE t.depart=’計算機系’ and t.no=c.tno

and c.cno=score.cno;

(12)SELECT * FROM student s, score sc WHERE s.no=sc.no and cno=’3-105’ and

degree>(SELECT degree FROMsc WHERE no=’109’ and cno=’3-105’);

(13)SELECT no FROM score GROUP BY no HAVING min(degree)>70 and max(degree)<90;

(14)SELECT * FROM score WHERE degree BETWEEN 60 AND 80;

(15)SELECT * FROM score a WHERE degree <(SELECT avg(degree)FROM score b WHERE b.cno=a.cno group by b.cno);

(16)SELECT name, sex, birthday FROM teacher WHERE sex=‘女’UNION SELECT name, sex,birthday FROM student WHERE sex=‘女’;

(17)SELECT name, prof FROM teacher WHERE depart=’計算機系’ OR depart=’無線電系’

order by prof;

4、設有圖書登記表TS,具有屬性:BNO(圖書編號),BC(圖書類別),BNA(書名),AU(著者),PUB(出版社)。按下列要求用SQL語言進行設計。——(易)

1)按圖書館編號BNO建立TS表的索引ITS;

2)查詢按出版社統計其出版圖書總數。

3)刪除索引。

解:1)CREATE INDEX ITSON TS(BNO);

2)SELECT PUB,COUNT(BNO)FROM TS GROUP BY PUB;

3)DROP INDEXITS;

5、已知三個關系R、S和T——(中)

R(A,B,C)S(A,D,E)T(D,F)

試用SQL語句實現如下操作:

1)R、S和T三個關系按關聯屬性建立一個視圖R-S-T;

2)對視圖R-S-T按屬性A分組后,求屬性C和E的平均值。

解:1)CREATE VIEW R-S-T(A,B,C,D,E,F)AS

SELECT R.A , B, C ,S.D, E, F FROM R, S, T

WHERE R.A=S.A AND S.D=T.D;

2)SELECT AVG(C), AVG(E)FROM R-S-T GOUPY BY A;

6、設有學生表S(SNO, SN)(SNO為學生號,SN為姓名)和學生選修課程表SC(SNO,CNO,CN,G)

(CNO為課程號,CN為課程名,G為成績),試用SQL語言完成以下各題:——(易)

a)建立一個視圖V-SSC(SNO, SN, CNO, CN, G);

b)從視圖V-SSC上查詢平均成績在90分以上的SN, CN 和G。

解:

1)CREATE VIEW V-SSC(SNO , SN, CNO, CN, G)AS

SELECT S.SNO, SN, CNO, CN, GFROM S, SC WHERE S.SNO=SC.SNO

2)SELECT SN, CN, G FROM V-SSC GROUP BY SNO HAVING AVG(G)>907、設有關系模式: 其中SB表示供應商,SN為供應商號,SNAME為供應商名字,CITY

為供應商所在城市; PB(PN, PNAME, COLOR, WEIGHT)其中PB表示零件,PN為零件代號,PANME為零件名

字,COLOR為零件顏色,WEIGHT為零件重量; JB(JN, JNAME, CITY)其中JB表示工程,JN為工程編號,JNAME為工程名字,CITY為工

程所在城市;

SPJB()其中SPJB表示供應關系,QTY表示提供的零件數量。

寫出實現以下各題功能的SQL語句:

(1)取出所有工程的全部細節;——(易)

(2)取出所在城市為上海的所有工程的全部細節;——(易)

(3)取出重量最輕的零件代號;——(難)

(4)取出為工程J1提供零件的供應商代號;——(易)

(5)取出為工程J1提供零件P1的供應商代號;——(易)

(6)取出由供應商S1提供零件的工程名稱;——(易)

(7)取出供應商S1提供的零件的顏色;——(易)

(8)取出為工程J1或J2提供零件的供應商代號;——(中)

(9)取出為工程J1提供紅色零件的供應商代號;——(易)

(10)取出為所在城市為上海的工程提供零件的供應商代號;——(易)

(11)取出為所在城市為上海或北京的工程提供紅色零件的供應商代號;——(中)

(12)取出供應商與工程所在城市相同的供應商提供的零件代號;——(中)

(13)取出上海的供應商提供給上海的任一工程的零件的代號;——(難)

(14)取出至少有一個和工程不在同一城市的供應商提供零件的工程代號;——(難)

(15)取出上海供應商不提供任何零件的工程的代號;——(難)

(16)取出這樣一些供應商代號,它們能夠提供至少一種由紅色零件的供應商提供的零件;

——(難)

(17)取出由供應商S1提供零件的工程的代號;——(易)

(18)取出所有這樣的一些

市的工程提供零件;——(難)

(19)取出所有這樣的三元組,使得第一個城市的供應商為第二個城

市的工程提供指定的零件;——(難)

(20)重復(19)題,但不檢索兩個CITY值相同的三元組。——(難)

解:

(1)SELECT * FROM JB;

(2)SELECT * FROM JB WHERE CITY=‘上海’;

(3)SELECT PN FROM PB

WHERE WEIGHT=(SELECT MIN(WEIGHT)FROM PB);

(4)SELECT SN FORM SPJB WHERE JN=‘J1’;

(5)SELECT SN FORM SPJB WHERE JN=‘J1’AND PN=‘P1’;

(6)SELECT JNAME FROM JB,SPJB WHERE SN=‘S1’AND SPJB.JN=JB.JN;

(7)SELECT DISTINCT COLOR FROM PB,SPJB WHERE SN=‘S1’AND SPJB.JN=JB.JN'

(8)SELECT SN FROM SPJB WHERE JN IN {J1, J2};

或者 SELECT SN FROM SPJB WHERE JN=’J1’ OR JN=’J2’;

(9)SELECT SN FROM SPJB,PB

WHERE COLOR=‘紅色’AND PB.PN=SPJB.PN AND JN=’J1’;

(10)SELECT DISTINCT SN FROM SPJB,JB WHERE CITY=‘上海’AND JB.JN=SPJB.JN;

(11)SELECT SN FROM PB, JB, SPJB WHERE COLOR=‘紅色’AND CITY IN {‘上海’,‘北京’} AND PB.PN=SPJB.PN AND JB.JN=SPJB.JN;

(12)SELECT PN FROM SB, JB , SPJB WEHRE SB.CITY=JB.CITY AND SB.SN=SPJB.SN

AND JB.JN=SPJB.JN;

(13)SELECT PN FROM SB, SPJB, JB WEHRE SB.CITY=‘上海’AND JB.CITY=‘上海’

AND SB.SN=SPJB.SN AND JB.JN=SPJB.JN;

(14)SELECT JN FROM JB WHERE EXISTS(SELECT * FROM SB WHERE

EXISTS(SELECT * FROM SPJB WHERE SB.CITY<>JB.CITY AND SPJB.SN= SB.SN AND SPJB.JN= JB.JN));

(15)SELECT DISTINCT JN FROM SPJB WHERE JN NOT IN(SELECT DISTINCT

SPJB.JN FROM SB,SPJB WHERE SB.SN=SPJB.SN AND SB.CITY=‘上海’);

(16)SELECT DISTINCT SPJB.SN FROM SB,SPJB WHERE SPJB.PN IN(SELECT

SPJB.PN FROM SPJB,PB WHEREPB.PN=SPJB.PN AND PB.COLOR=‘紅色’;

(17)SELECTJN FROM SPJB WHERE SN=’S1’;

(18)SELECT DINSINCT SB.CITY , JB.CITY FROM SB, JB, SPJB WHERE

SB.SN=SPJB.SN AND JB.JN=SPJB.SN;

(19)SELECT SB.CITY, SPJB.PN, JB.CITY FROM SB,JB,SPJB WHERE SB.SN=SPJB.SN

AND JB.JN=SPJB.JN;

(20)SELECT DISTINCT SB.CITY, SPJB.PN, JB.CITY FROM SB,JB,SPJB WHERE

SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY<>JB.CITY;

8、設有如下關系模式:——(中)

圖書關系B(圖書編號B#,圖書名T,作者A,出版社P);

讀者關系R(借書證號C#,讀者名N,讀者地址D);

借閱關系L(C#,B#,借書日期E,還書標志BZ);

BZ=‘1’表示已還; BZ=‘0’ 表示未還;

寫出實現以下各題功能的SQL語句:

(1)查詢“工業出版社”出版的圖書名

(2)將書號為B5的圖書的出版社改為“工業出版社”

(3)查詢99年12月31日以前借書未還的讀者名與書名

(4)查所借的書包含借書證號為C1的讀者借出未還的所有書的讀者名與借書證號。

(5)刪去“工業出版社”出版的所有圖書及相關的借閱信息。

解:

(1)SelectTfromBWhereP = ’工業出版社’

(2)UpdateBSetP=’工業出版社’ WhereB# = ’B5’

(3)SelectN , TFrom B, R , L

WhereE <’99/12/31’ AND BZ=’0’ AND

L.C#=R.C# AND L.B#=B.B#

(4)select N,C# from R where not exists

(select * from LL1 where L1.C#=’c1’ and BZ=‘0’ andnot exists

(select * from L L2 where L2.c#=R.c#

and L2.B#=L1.B#))

(6)Delete from LWhere B#IN(Select B#From B

Where P=’工業出版社’);

Delete from B Where P=’工業出版社’;

第四篇:學習SQL必看

sql學習心得:SQL SERVER 2005

sql學習心得:SQL SERVER 2005學習心得

一、數據庫設計方面

1、字段類型。

varchar(max)nvarchar(max)類型的引入大大的提高了編程的效率,可以使用字符串函數對CLOB類型進行操

作,這是一個亮點。但是這就引發了對varchar和char效率討論的老問題。到底如何分配varchar的數據,是否

會出現大規模的碎片?是否碎片會引發效率問題?這都是需要進一步探討的東西。varbinary(max)代替image也讓SQL Server的字段類型更加簡潔統一。

XML字段類型更好的解決了XML數據的操作。XQuery確實不錯,但是個人對其沒好感。(CSDN的開發者應

該是相當的熟了!)

2、外鍵的級聯更能擴展

可能大部分的同行在設計OLTP系統的時候都不愿意建立外鍵,都是通過程序來控制父子數據的完整性。但是

再開發調試階段和OLAP環境中,外鍵是可以建立的。新版本中加入了SET NULL 和 SET DEFAULT 屬性,能夠

提供能好的級聯設置。

3、索引附加字段

這是一個不錯的新特性。雖然索引的附加字段沒有索引鍵值效率高,但是相對映射到數據表中效率還是提高了

很多。我做過試驗,在我的實驗環境中會比映射到表中提高30%左右的效率。

4、計算字段的持久化

原來的計算字段其實和虛擬字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了計算

字段的持久化,這就提高了查詢的性能,但是會加重insert和update的負擔。OLTP慎用。OLAP可以大規模使

用。

5、分區表

分區表是個亮點!從分區表也能看出微軟要做大作強SQL Server的信心。資料很多,這里不詳細說。但是重點

了解的是:現在的SQL Server2005的表,都是默認為分區表的。因為它要支持滑動窗口的這個特性。這種特性

對歷史數據和實時數據的處理是很有幫助的。

但是需要注意的一點,也是我使用過程中發現的一個問題。在建立

function->schema->table后,如果在現有的分區表上建立沒有顯式聲明的聚集索引時,分區表會自動變為非分區表。這一點很讓我納悶。如果你覺得我的非分區索引無法對起子分區,你可以提醒我一下呀!沒有任何的提醒,直接就變成了非分區表。不知道這算不算一個bug。

大家也可以試試。

分區表效率問題肯定是大家關心的問題。在我的試驗中,如果按照分區字段進行的查詢(過濾)效率會高于未

分區表的相同語句。但是如果按照非分區字段進行查詢,效率會低于未分區表的相同語句。但是隨著數據量的增大,這種成本差距會逐漸減小,趨于相等。(500萬數量級只相差10%左右)

6、CLR類型

微軟對CLR作了大篇幅的宣傳,這是因為數據庫產品終于融入.net體系中。最開始我們也是狂喜,感覺對象數

據庫的一些概念可以實現了。但是作了些試驗,發現使用CLR的存儲過程或函數在達到一定的閥值的時候,系

統性能會呈指數級下滑!這是非常危險的!只使用幾個可能沒有問題,當一旦大規模使用會造成嚴重的系統性

能問題!

其實可以做一下類比,Oracle等數據庫產品老早就支持了java編程,而且提供了java池參數作為用戶配置接口

。但是現在有哪些系統大批使用了java存儲過程?!連Oracle自己的應用都不用為什么?!還不是性能有問題

!否則面向對象的數據庫早就實現了!

建議使用CLR的地方一般是和應用的復雜程度或操作系統環境有很高的耦合度的場景。如你想構建復雜的算法,并且用到了大量的指針和高級數據模型。或者是要和操作系統進行Socket通訊的場景。否則建議慎重!

7、索引視圖

索引視圖2k就有。但是2005對其效率作了一些改進但是schema.viewname的作用域真是太限制了它的應用面

。還有一大堆的環境參數和種種限制都讓人對它有點卻步。

8、語句和事務快照

語句級快照和事務級快照終于為SQL Server的并發性能帶來了突破。個人感覺語句級快照大家應該應用。事務

級快照,如果是高并發系統還要慎用。如果一個用戶總是被提示修改不成功要求重試時,會殺人的!

9、數據庫快照

原理很簡單,對要求長時間計算某一時間點的報表生成和防用戶操作錯誤很有幫助。但是比起Oracle10g的閃

回技術還是細粒度不夠。可惜!

10、Mirror

Mirror可以算是SQL Server的Data guard了。但是能不能被大伙用起來就不知道了。

二、開發方面

1、Ranking函數集

其中最有名的應該是row_number了。這個終于解決了用臨時表生成序列號的歷史,而且SQL Server2005的row_number比Oracle的更先進。因為它把Order by集成到了一起,不用像Oracle那樣還要用子查詢進行封裝

。但是大家注意一點。如下面的例子:

select ROW_NUMBER()OVER(order by aa)

from tbl

order by bb

會先執行aa的排序,然后再進行bb的排序。

可能有的朋友會抱怨集成的order by,其實如果使用ranking函數,Order by是少不了的。如果擔心Order

by會影響效率,可以為order by的字段建立聚集索引,查詢計劃會忽略order by 操作(因為本來就是排序的嘛)。

2、top

可以動態傳入參數,省卻了動態SQL的拼寫。

3、Apply

對遞歸類的樹遍歷很有幫助。

4、CTE

個人感覺這個真是太棒了!閱讀清晰,非常有時代感。

5、try/catch

代替了原來VB式的錯誤判斷。比Oracle高級不少。

6、pivot/unpivot

個人感覺沒有case直觀。而且默認的第三字段(還可能更多)作為group by字段很容易造成新手的錯誤。

三、DBA管理方面

1、數據庫級觸發器

記得在最開始使用2k的時候就要用到這個功能,可惜2k沒有,現在有了作解決方案的朋友會很高興吧。

2、多加的系統視圖和實時系統信息

這些東西對DBA挑優非常有幫助,但是感覺粒度還是不太細。

3、優化器的改進

一直以來個人感覺SQL Server的優化器要比Oracle的聰明。SQL2005的更是比2k聰明了不少。(有次作試驗

發現有的語句在200萬級時還比50萬級的相同語句要快show_text的一些提示沒有找到解釋。一直在奇怪。)

4、profiler的新事件觀察

這一點很好的加強了profiler的功能。但是提到profiler提醒大家注意一點。windows2003要安裝sp1補丁才能

啟動profiler。否則點擊沒有反應。

5、sqlcmd

習慣敲命令行的朋友可能會爽一些。但是功能有限。適合機器跑不動SQL Server Management Studio的朋友

使用。

四、遺憾

1、登陸的控制

始終遺憾SQL Server的登陸無法分配CPU/內存占用等指標數。如果你的SQL Server給別人分配了一個只可以

讀幾個表的權限,而這個家伙瘋狂的死循環進行連接查詢,會給你的系統帶來很大的負擔。而SQL Server如果

能像Oracle一樣可以為登陸分配如:5%的cpu,10%的內存。就可以解決這個漏洞。

2、數據庫物理框架沒有變動

undo和redo都放在數據庫得transaction中,個人感覺是個敗筆。如果說我們在設計數據庫的時候考慮分多個

數據庫,可能能在一定程度上避免I/O效率問題。但是同樣會為索引視圖等應用帶來麻煩。看看行級和事務級的快照數據放在tempdb中,就能感覺到目前架構的尷尬。

3、還是沒有邏輯備份

備份方面可能還是一個老大難的問題。不能單獨備份幾個表總是感覺不爽。靈活備份的問題不知道什么時候才

能解決。

4、SSIS(DTS)太復雜了

SQL Server的異構移植功能個人感覺最好了。(如果對比過SQL Server的鏈接服務器和Oracle的透明網關的朋友會發現SQL Server的sp_addlinkedserver(openquery)異構數據庫系列比Oracle真是強太多了。)

以前的DTS輕盈簡單。但是現在的SSIS雖然功能強大了很多,但是總是讓人感覺太麻煩。

第五篇:sql語句學習_經典_推薦

sql語句學習

? 數據定義語言(DDL):

1)創建數據庫(create):create database database-name;

eg.create database test;

2)刪除數據庫:drop database dbname;

eg.drop database test;

3)創建新表:create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..);

eg.根據已有的表創建新表的例子:create table tab_new like tab_old;create table tab_new as select col1,col2… from tab_old definition only;

4)刪除表:drop table tabname;

5)增加列:alter table tabname add column col type;

6)添加主鍵: alter table tabname add primary key(col);

7)刪除主鍵:alter table tabname drop primary key(col);

8)創建索引:create [unique] index idxname on tabname(col….);

9)刪除索引:drop index idxname;注:索引是不可更改的,想更改必須刪除重新建;

10)創建視圖:create view viewname as select statement;

2.數據操縱語言(DML)

1)查詢語句(select)

eg1.select * from table1 where field1 like '%value1%';

eg2.select * from table1 order by field1,field2 [desc];

eg3.select count as totalcount from table1;

eg4.select sum(field1)as sumvalue from table1;

eg5.select avg(field1)as avgvalue from table1;

eg6.select max(field1)as maxvalue from table1;

eg7.select min(field1)as minvalue from table1;

eg8.select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c;(注:此為左外連接,結果集中包括連接表的匹配行,也包括左連接表的所有行)

2)插入語句(insert)

insert into table1(field1,field2)values(value1,value2);

3)刪除語句(delete)

delete from table1 where 范圍;

4)更新語句(update)

update table1 set field1=value1 where 范圍;

3.數據控制語言(DCL)

1)授予權限語句(GRANT)

GRANT privileges(columns)ON what TO user IDENTIFIED BY “password” WITH GRANT OPTION;

其中:privileges可為如下限定符:ALTER 修改表和索引、CREATE(創建數據庫和表)、DELETE(刪除表中已有的記錄)、DROP(刪除數據庫和表)、INDEX(創建或刪除索引)、INSERT(向表中插入新行)、REFERENCE(未用)、SELECT(檢索表中的記錄)、UPDATE(修改現存表記錄)、FILE(讀或寫服務器上的文件)、PROCESS(查看服務器中執行的線程信息或殺死線程)、RELOAD(重載授權表或清空日志、主機緩存或表緩存)、SHUTDOWN(關閉服務器)、ALL 所

有;ALL PRIVILEGES同義詞、USAGE(特殊的“無權限”權限)

columns:權限運用的列,它是可選的,并且你只能設置列特定的權限。如果命令有多于一個列,應該用逗號分開它們;

what:權限運用的級別。權限可以是全局的(適用于所有數據庫和所有表)、特定數據庫(適用于一個數據庫中的所有表)或特定表的。可以通過指定一個columns字句是權限是列特定的。

user :權限授予的用戶,它由一個用戶名和主機名組成。MySQL中的一個用戶名就?悄懔臃衿魘敝付ǖ撓沒?該名字不必與你的Unix登錄名或Windows名聯系起來。缺省地,如果你不明確指定一個名字,客戶程序將使用

你的登錄名作為MySQL用戶名。這只是一個約定。你可以在授權表中將該名字改為nobody,然后以nobody連接

執行需要超級用戶權限的操作。

password:賦予用戶的口令,它是可選的。如果你對新用戶沒有指定IDENTIFIED BY子句,該用戶不賦給口令(不安全)。對現有用戶,任何你指定的口令將代替老口令。如果你不指定口令,老口令保持不變,當你用IDENTIFIED BY

時,口令字符串用改用口令的字面含義,GRANT將為你編碼口令,不要象你用SET PASSWORD 那樣使用password()

函數。

WITH GRANT OPTION子句是可選的。如果你包含它,用戶可以授予權限通過GRANT語句授權給其它用戶。你可以用該子句給與其它用戶授權的能力。

用戶名、口令、數據庫和表名在授權表記錄中是大小寫敏感的,主機名和列名不是。

eg1.創建一個超級用戶test1

grant all privilleges on *.* to test1@localhost identified by '123456' with grant option;eg2.創建一個只能查詢的用戶 test2

mysql> grant select on *.* to test2@localhost identified by '9876543';

2)撤權并刪除用戶(revoke)

要取消一個用戶的權限,使用REVOKE語句。REVOKE的語法非常類似于GRANT語句,除了TO用FROM取代并且沒有INDETIFED BY和WITH GRANT OPTION子句:

revoke privileges(columns)ON what FROM user

user部分必須匹配原來GRANT語句的你想撤權的用戶的user部分。privileges部分不需匹配,你可以用GRANT

語句授權,然后用REVOKE語句只撤銷部分權限。REVOKE語句只刪除權限,而不刪除用戶。即使你撤銷了所有

權限,在user表中的用戶記錄依然保留,這意味著用戶仍然可以連接服務器。要完全刪除一個用戶,你必須

用一條DELETE語句明確從user表中刪除用戶記錄:

#mysql-u root mysql

DELETE FROM user WHERE User=“user_name” and Host=“host_name”;

FLUSH PRIVILEGES;

DELETE語句刪除用戶記錄,而FLUSH語句告訴服務器重載授權表。(當你使用GRANT和REVOKE語句時,表自動重載,而你直接修改授權表時不是。)

eg.刪除用戶test1

revoke all on *.* from;

use mysql;

delete from user where user='test' and host='localhost';flush privileges;

3)提交語句(commit)

4)回滾語句(rollback)

下載SQL學習基礎篇word格式文檔
下載SQL學習基礎篇.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    sql語言學習

    SQL語言學習 --語 句功 能 --數據操作 SELECT--從數據庫表中檢索數據行和列 INSERT--向數據庫表添加新數據行 DELETE--從數據庫表中刪除數據行 UPDATE--更新數據庫表中的數......

    sql學習步驟

    學習總結 第一講 1. 什么是數據庫,數據庫的作用! 2. 現流行的數據庫的種類,特點 3. sql2005的版本、特點,硬件要求 4. 數據庫的安裝(在安裝過程中介紹數據庫的插件,登錄方式,實例) 5......

    SQL學習總結

    上個星期,自主學習了SQL Server ,基本了解了SQL Server的語法知識和結構,對SQL 有了一定的認識,現在我就對我這一星期對SQl的 學習做一個總結: 為了永久性的集中存放數據,并且還......

    SQL基礎數據庫語法(5篇材料)

    一、 表空間操作 1. 創建表空間 Create tablespace xxx(表名) Datafile ’x:xxxxxx.dbf(文件地址)’ Size 10m(文件大小) autoexdend on; 2. 刪除表空間 Droptablespacexxx(表空......

    VB數據庫SQL語句學習(精選多篇)

    1.Select * from student查詢所有原始記錄 2. Select StudentID, StudentName from student 只查詢學號和姓名 3. Select StudentID as 學號, StudentName as 姓名, Sex as......

    Oracle 10g學習筆記(三)——SQL語言基礎1

    content: SQL語言概述、分類 各種語言常見語句寫法 常用查詢語句的使用 常用系統函數及其應用 分組語句 模糊查詢 表的連接 子查詢 結構化查詢語言是學好任何一個關系型數據......

    SQL語言學習工作總結

    以下是作者在學習SQL過程中,以工作總結方式寫下點滴的感悟,敬請關注!暑假過的真快總感覺昨天才剛放假,還想著這個暑假怎么過時,暑假就已經去了。這個暑假一開始我們看了浙大的sql......

    常見sql語句(精選多篇)

    結構化查詢語句 1.簡單查詢 1.1Select語句基本應用 1.1.1查詢所有記錄 Select * from tab_name 1.1.2查詢指定字段的記錄 Select field1,field2,….from tab_name 1.1.3帶表......

主站蜘蛛池模板: 国产高清视频在线观看三区| 亚洲人成色7777在线观看| 日韩综合亚洲色在线影院| 国产日产精品一区二区三区四区的特点| 人人狠狠综合久久亚洲婷婷| 丰满人妻跪趴高撅肥臀| 久久成人成狠狠爱综合网| 亚洲国产精品18久久久久久| 免费无码成人av在线播| 在厨房拨开内裤进入毛片| 永久免费无码网站在线观看| 亚洲最大成人网站| 巨爆乳无码视频在线观看| 潮喷失禁大喷水aⅴ无码| 四虎影成人精品a片| 男人进去女人爽免费视频| 50岁退休熟女露脸高潮| 国产成人精品无缓存在线播放| 精品视频一区二区三区在线观看| 久久天天躁夜夜躁狠狠 ds005.com| 午夜无码一区二区三区在线观看| 精品久久久99大香线蕉| 男女真人国产牲交a做片野外| 精品一区二区无码免费| 国产成人aaa在线视频免费观看| 久久国产亚洲精品超碰热| 不卡一区二区视频日本| 一本大道无码人妻精品专区| 国产午夜免费啪视频观看视频| 亚洲精品成人久久电影网| av在线观看地址| 人妻 日韩 欧美 综合 制服| 一区二区在线欧美日韩中文| 亚洲精品中国国产嫩草影院美女| 国产精品国语对白露脸在线播放| 色婷婷久久久swag精品| 国产在线精品一区二区三区不卡| 免费无码毛片一区二区app| 午夜理理伦电影a片无码| 高清偷自拍亚洲精品三区| 人妻人人做人做人人爱|