常用的SQL例句全部懂了,你的數(shù)據(jù)庫開發(fā)所需知識(shí)就夠用了
..--查看學(xué)生表的全部數(shù)據(jù)
select*fromstudio
--插入一個(gè)新的學(xué)生信息
insertintostudio(st_name,st_sex,st_age,st_add,st_tel)values("黃蘭淇",0,36,'南充','13943943334')
--查看class全部數(shù)據(jù)
select*fromclass
--向class表增加兩條條數(shù)據(jù)
insertintoclass(cl_class,cl_coding,cl_o_time,cl_remark)values('新電實(shí)訓(xùn)班','GXA-ncs-001','2008-03-11','都是很優(yōu)秀的朋友')
insertintoclass(cl_class,cl_coding,cl_o_time)values('阿壩師專實(shí)訓(xùn)班','GXA-ABSZ-001','2008-03-11')
--更新一條的數(shù)據(jù)條件的重要性
updateclasssetcl_remark='真的是不錯(cuò)'wherecl_id=5
--刪除一條數(shù)據(jù)條件的重要性
deletefromclasswherecl_id=7
--修改列標(biāo)題
selectcl_idas'班級(jí)主鍵',cl_classas'班級(jí)名稱'fromclass
select名字=st_namefromstudio
--使用文字串
select'名字是:',st_namefromstudio
--=============條件稍微復(fù)雜點(diǎn)的查增刪改==============
--主要涉及到orandnotbetweeninlike><=!>!()<=>=isnullisnotnull
--查詢cl_id大于1的所有信息
select*fromclasswherecl_id>1
--使用or
select*fromclasswherecl_id<>10orcl_class='百杰一班'
--使用and
select*fromclasswherecl_id<>10andcl_class='百杰一班'
--使用like和%
select*fromclasswherecl_class?like'百杰%'
select*fromclasswherecl_remark?like'%上午%'
--使用between
select*fromclasswherecl_id?between3and5
--使用between配合上not
select*fromclasswherecl_idnotbetween3and5
--使用isnotnull
select*fromclasswherecl_remarkisnotnull
--使用in
select*fromclasswherecl_classin('千星一班','百杰二班')
--=================使用數(shù)學(xué)運(yùn)算符======================
--主要涉及到+=*\
--查詢Java相關(guān)課程分別要上多少周按照每周5天残腌,每天6節(jié)課來計(jì)算
select'結(jié)果'=co_num/5/6fromcoursewhereco_namein('Java基礎(chǔ)','Java項(xiàng)目入門')
--==================使用匯總函數(shù)========================
--涉及到COUNT?SUM?AVG?MAX?MIN
--查詢課時(shí)數(shù)小于50的課程一共有多少門
selectcount(*)fromcoursewhereco_num<50
--查詢所有課程一共多少課時(shí)
selectsum(co_num)fromcourse
--計(jì)算全部課時(shí)費(fèi)窘面,假設(shè)每節(jié)課50塊錢
selectsum(co_num)*50fromcourse
--查詢課時(shí)最少的課程
selectmin(co_num)fromcourse
--查詢課時(shí)最多的課程
selectmax(co_num)fromcourse
--查詢平均每門課多少課時(shí)
selectavg(co_num)fromcourse
--=================使用數(shù)學(xué)函數(shù)=============================
--包括求絕對(duì)值函數(shù)ABS函數(shù)紊服、求圓周率函數(shù)PI()枚抵、求正玄值SIN()函數(shù)瓢宦、求指數(shù)函數(shù)EXP()等柜候。
--查詢每門課的正弦值
selectsin(co_num)fromcourse
--查詢每門課的絕對(duì)值
selectabs(co_num)fromcourse
--查詢每門課課時(shí)數(shù)乘以圓周率搞动,具體有什么用我也不知道,反正這好像絕對(duì)是8.5桿子都打不到的
selectpi()*co_numfromcourse
--查詢每門課的指數(shù)
selectexp(co_num)fromcourse
--隨機(jī)返回5個(gè)隨機(jī)生成的數(shù)(返回的是0~1之間的隨機(jī)float值)
declare@itinyint
set@i=1
while@i<=5
begin
selectrand(@i)as'隨機(jī)生成的數(shù)',@ias'當(dāng)前值'
set@i=@i+1
end
--返回?cái)?shù)字表達(dá)式并四舍五入為指定的長度或精度-ROUND
selectround(345.456,-1)as'參數(shù)為-1'
,round(345.456,-2,1)as'參數(shù)為-2'
,round(345.456,0)as'參數(shù)為0'
,round(345.456,1)as'參數(shù)為1'
,round(345.456,2)as'參數(shù)為2'
--================使用日期函數(shù)======================
--DAY()渣刷、MONTH()鹦肿、YEAR()——返回指定日期的天數(shù)、月數(shù)辅柴、年數(shù)狮惜;
selectday(cl_s_time)as'日'fromclass--返回天
select'月'=month(cl_s_time)fromclass--返回月
select'年'=year(cl_s_time)fromclass--返回年
--DATEADD(datepart,number,date)——在日期上增加給定日期類型的數(shù)量高诺;
selectdateadd(yyyy,4,cl_s_time)as'增加4年后'fromclass--datepart-年份
yy、yyyy
selectdateadd(q,2,cl_s_time)as'增加2季度后'fromclass
--datepart-季度
qq碾篡、q
selectdateadd(mm,3,cl_s_time)as'增加3月度后'fromclass
--datepart-月份
mm虱而、m
--datepart-每年的某一日
dy、y
--datepart-日期
dd开泽、d
--datepart-星期
wk牡拇、ww
--datepart-小時(shí)
hh
--datepart-分鐘
mi、n
--datepart-秒
ss穆律、s
--datepart-毫秒
ms
--DATEDIFF(datepart,date1,date2)——獲取兩個(gè)日期之間給定的日期類型的數(shù)量差(整個(gè)函數(shù)結(jié)果是date2-date1)惠呼;
selectdatediff(mm,cl_s_time,cl_o_time)as'共持續(xù)月'fromclass
--datepart(datepart,date)——在給定日期基礎(chǔ)上返回指定日期類型的值(整數(shù));
--其實(shí)這個(gè)等同于DAY峦耘、MONTH剔蹋、和YEAR函數(shù)
selectdatepart(dd,cl_s_time)as'日期'fromclass
--GETDATE()——返回當(dāng)前日期和時(shí)間。我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫的時(shí)候辅髓,通常也可能把他作為默認(rèn)值
updateclasssetcl_s_time=getdate()wherecl_id=6
select*fromclass
SelectCONVERT(varchar(100),GETDATE(),0):0516200610:57AM
SelectCONVERT(varchar(100),GETDATE(),1):05/16/06
SelectCONVERT(varchar(100),GETDATE(),2):06.05.16
SelectCONVERT(varchar(100),GETDATE(),3):16/05/06
SelectCONVERT(varchar(100),GETDATE(),4):16.05.06
SelectCONVERT(varchar(100),GETDATE(),5):16-05-06
SelectCONVERT(varchar(100),GETDATE(),6):160506
SelectCONVERT(varchar(100),GETDATE(),7):0516,06
SelectCONVERT(varchar(100),GETDATE(),8):10:57:46
SelectCONVERT(varchar(100),GETDATE(),9):0516200610:57:46:827AM
SelectCONVERT(varchar(100),GETDATE(),10):05-16-06
SelectCONVERT(varchar(100),GETDATE(),11):06/05/16
SelectCONVERT(varchar(100),GETDATE(),12):060516
SelectCONVERT(varchar(100),GETDATE(),13):1605200610:57:46:937
SelectCONVERT(varchar(100),GETDATE(),14):10:57:46:967
SelectCONVERT(varchar(100),GETDATE(),20):2006-05-1610:57:47
SelectCONVERT(varchar(100),GETDATE(),21):2006-05-1610:57:47.157
SelectCONVERT(varchar(100),GETDATE(),22):05/16/0610:57:47AM
SelectCONVERT(varchar(100),GETDATE(),23):2006-05-16
SelectCONVERT(varchar(100),GETDATE(),24):10:57:47
SelectCONVERT(varchar(100),GETDATE(),25):2006-05-1610:57:47.250
SelectCONVERT(varchar(100),GETDATE(),100):0516200610:57AM
SelectCONVERT(varchar(100),GETDATE(),101):05/16/2006
SelectCONVERT(varchar(100),GETDATE(),102):2006.05.16
SelectCONVERT(varchar(100),GETDATE(),103):16/05/2006
SelectCONVERT(varchar(100),GETDATE(),104):16.05.2006
SelectCONVERT(varchar(100),GETDATE(),105):16-05-2006
SelectCONVERT(varchar(100),GETDATE(),106):16052006
SelectCONVERT(varchar(100),GETDATE(),107):0516,2006
SelectCONVERT(varchar(100),GETDATE(),108):10:57:49
SelectCONVERT(varchar(100),GETDATE(),109):0516200610:57:49:437AM
SelectCONVERT(varchar(100),GETDATE(),110):05-16-2006
SelectCONVERT(varchar(100),GETDATE(),111):2006/05/16
SelectCONVERT(varchar(100),GETDATE(),112):20060516
SelectCONVERT(varchar(100),GETDATE(),113):1605200610:57:49:513
SelectCONVERT(varchar(100),GETDATE(),114):10:57:49:547
SelectCONVERT(varchar(100),GETDATE(),120):2006-05-1610:57:49
SelectCONVERT(varchar(100),GETDATE(),121):2006-05-1610:57:49.700
SelectCONVERT(varchar(100),GETDATE(),126):2006-05-16T10:57:49.827
SelectCONVERT(varchar(100),GETDATE(),130):18??????????142710:57:49:907AM
SelectCONVERT(varchar(100),GETDATE(),131):18/04/142710:57:49:920AM
--=============使用字符串函數(shù)=====================
--字符串鏈接運(yùn)算符
select'結(jié)果顯示'='班級(jí)名稱是:'+cl_class+'泣崩,班級(jí)編號(hào)是:'+cl_codingfromclass
--使用SUBSTRING函數(shù)截取字符串
selectsubstring(cl_class,1,4)fromclass
--從字符串的左邊開始返回3個(gè)字符
selectleft(cl_class,3)fromclass
--同理,返回右邊的
selectright(cl_class,3)fromclass
--返回值的字符數(shù)
selectlen(cl_class)fromclass
--替換
selectreplace(cl_class,'實(shí)訓(xùn)','強(qiáng)化')fromclass
--==============使用系統(tǒng)函數(shù)====================
selecthost_id()
--返回工作站標(biāo)識(shí)號(hào)
selecthost_name()
--返回工作站所運(yùn)行的計(jì)算機(jī)名稱
selectdb_id()
selectdb_name()
selectobject_id('Stu_course_ADD')
--通過名稱得到這個(gè)服務(wù)器對(duì)象的服務(wù)器ID
selectobject_name(151671588)
--同上相反
--=======學(xué)云網(wǎng)-天轟穿-www.ixueyun.co?m===使用其他子句====學(xué)云網(wǎng)-天轟穿-www.ixueyun.com=========
--首先是orderby功能-排序
select*fromstudio?orderbyst_name
--多排序條件
select*fromstudio?orderbyst_name?DESC,st_age?DESC,st_sex?DESC
--有條件,主要是看下條件和子句的位置
select*fromstudiowherecl_id=1orderbyst_name
--GROUP?BY子句功能-分組統(tǒng)計(jì)
selectcl_idas'班級(jí)編號(hào)',count(*)as'人數(shù)'fromstudiogroupbycl_id
--按宿舍統(tǒng)計(jì)年齡平均值
selectho_idas'宿舍編號(hào)',avg(st_age)as'平均年齡'fromstudiogroupbyho_id
--多分組
selectho_idas'宿舍編號(hào)',cl_idas'班級(jí)編號(hào)',avg(st_age)as'平均年齡'fromstudiogroupbyho_id,cl_id
--有條件,主要是看下條件和子句的位置
selectho_idas'宿舍編號(hào)',avg(st_age)as'平均年齡'fromstudiowherecl_id=1groupbyho_id
--使用having子句功能-指定組或者聚合的搜索條件洛口,通常與groupby子句一起使用问拘,完成分組查詢后再進(jìn)步篩選
selectho_idas'宿舍編號(hào)',avg(st_age)as'平均年齡'fromstudiogroupbyho_id?having?avg(st_age)>35
--多條件
selectho_idas'宿舍編號(hào)',avg(st_age)as'平均年齡'fromstudiogroupbyho_id?having?avg(st_age)>35andho_id>2
--===========聯(lián)合查詢=======學(xué)云網(wǎng)-天轟穿-www.ixueyun.com======
--使用union子句的查詢稱為聯(lián)合查詢冀墨,功能:將兩個(gè)以上的查詢結(jié)果集組合為一個(gè)單個(gè)結(jié)果集崇棠,該集中包括所有集中的全部行數(shù)據(jù)
--下面我們嘗試將多個(gè)查詢聯(lián)合起來
select*fromstudiowherecl_id=1
union
select*fromstudiowhereho_id=1
union
select*fromstudiowherest_age>=30
--下面我們繼續(xù)利用上面的例題上枕,增加上All看下效果
select*fromstudiowherecl_id=1
unionall
select*fromstudiowhereho_id=1
unionall
select*fromstudiowherest_age>=30
--再繼續(xù)利用,給他加上排序
select*fromstudiowherecl_id=1
unionall
select*fromstudiowhereho_id=1
unionall
select*fromstudiowherest_age>=30
orderbyst_id
--===========連接查詢==================
--連接查詢挺举,功能-將多個(gè)表中的數(shù)據(jù)查詢出來放在一起
--內(nèi)連接:使用比較運(yùn)算符=><....等進(jìn)行表間某些數(shù)據(jù)庫的比較操作杀赢,并列出這些表中與連接條件相匹配的數(shù)據(jù)行
--等值連接,當(dāng)然就是用等號(hào)了湘纵,毛病脂崔,這也要問
select*fromstudio?inner?joinclasson?studio.cl_id=class.cl_id
--指明要查詢的列(江湖上又稱自然連接),并排序
selectst_idas'編號(hào)',st_nameas'學(xué)生姓名',cl_classas'班級(jí)名稱'fromstudio?inner?joinclasson?studio.cl_id=class.cl_id?orderbyst_id
--使用表別名
selectst.st_nameas'學(xué)生姓名',st.cl_idas'班級(jí)編號(hào)',cl.cl_classas'班級(jí)名稱'fromstudioasst?inner?joinclassascl?on?st.cl_id=cl.cl_id
--不等連接瞻佛,這個(gè)問題很好笑脱篙,既然使用等號(hào)的是等值連接娇钱,那么不等值你說是不是應(yīng)該是非等于以外的呢伤柄?
--下面我們?cè)龠B接第三個(gè)表,看下是怎么搞滴
selectst.st_nameas'學(xué)生姓名',st.cl_idas'班級(jí)編號(hào)',cl.cl_classas'班級(jí)名稱',ho.ho_codingas'所在宿舍編號(hào)'
fromstudioasst?inner?joinclassascl
on?st.cl_id=cl.cl_id
inner?join?hostelasho
on?st.ho_id=ho.ho_id
--我們?cè)俳o他加個(gè)條件看下
--wherest.cl_id>2
--再給他個(gè)排序
--orderbyst.st_id
--外連接:
--與內(nèi)連接不同的是文搂,內(nèi)連接至少要有一個(gè)同屬于兩個(gè)表的行符合連接條件時(shí)才會(huì)返回行适刀,外連接會(huì)返回符合任意條件的行
--他的表有主從之分,他用主表中的每行去匹配從表中的煤蹭,與內(nèi)連不同的是笔喉,他不會(huì)丟棄沒有匹配的行取视,而是填充null給從結(jié)果集
--左外連接
selectst.st_idas'學(xué)生編號(hào)',st.st_nameas'學(xué)生姓名',cl.cl_idas'班級(jí)編號(hào)',cl_classas'班級(jí)名稱'
fromstudioasst?left?outer?joinclassascl
on?st.cl_id=cl.cl_id
wherecl.cl_id>2
--多表
selecttka.te_co_idas'課程安排編號(hào)'
,cl.cl_idas'班級(jí)編號(hào)',cl.cl_classas'班級(jí)名稱'
,co.co_idas'課程ID',co.co_nameas'課程名稱',co.co_numas'課時(shí)數(shù)'
,te.te_nameas'老師姓名'
fromte_kc_apastka?left?outer?joinclassascl
on?tka.cl_id=cl.cl_id
left?outer?join
courseasco
on?tka.co_id=co.co_id
left?outer?join
teacheraste
on?tka.te_id=te.te_id
--====================右外連結(jié)=======================
selectst.st_idas'學(xué)生編號(hào)',st.st_nameas'學(xué)生姓名',cl.cl_idas'班級(jí)編號(hào)',cl_classas'班級(jí)名稱'
fromstudioasst?right?outer?joinclassascl
on?st.cl_id=cl.cl_id
wherecl.cl_id>2
--多表
selecttka.te_co_idas'課程安排編號(hào)'
,cl.cl_idas'班級(jí)編號(hào)',cl.cl_classas'班級(jí)名稱'
,co.co_idas'課程ID',co.co_nameas'課程名稱',co.co_numas'課時(shí)數(shù)'
,te.te_nameas'老師姓名'
fromte_kc_apastka
right?outer?joinclassascl
on
tka.cl_id=cl.cl_id
right?outer?join?teacher?te
on
tka.te_id=te.te_id
right?outer?join?course?co
on
tka.co_id=co.co_id
--========完全連接==============
selectst.st_idas'學(xué)生編號(hào)',st.st_nameas'學(xué)生姓名',cl.cl_idas'班級(jí)編號(hào)',cl_classas'班級(jí)名稱'
fromstudioasst?full?outer?joinclassascl
on?st.cl_id=cl.cl_id
orderbyst.st_id
--多表
selecttka.te_co_idas'課程安排編號(hào)'
,cl.cl_idas'班級(jí)編號(hào)',cl.cl_classas'班級(jí)名稱'
,co.co_idas'課程ID',co.co_nameas'課程名稱',co.co_numas'課時(shí)數(shù)'
,te.te_nameas'老師姓名'
fromte_kc_apastka
full?outer?joinclassascl
on
tka.cl_id=cl.cl_id
full?outer?join?teacher?te
on
tka.te_id=te.te_id
full?outer?join?course?co
on
tka.co_id=co.co_id
--==========交叉連接================
--該方式在不帶where子句時(shí),返回的是兩個(gè)表中所有數(shù)據(jù)行的笛卡爾積(第一個(gè)表中的行乘以第二個(gè)表中的行)
--用學(xué)生和班級(jí)表做交叉查詢
selectst_name,cl_classfromstudio?cross?joinclass
selectst_name,cl_classfromstudio,class
selectst_name,cl_classfromstudio?cross?joinclass
--=========自連接===
-----------------先臨時(shí)創(chuàng)建一個(gè)表-------------
create?table?zone(
idintprimary?key?identity(1,1)notnull,
z_zone?varchar(30),
z_idintreferences?zone(id))
--大家試下常挚,這里是否可以給個(gè)默認(rèn)值
select*fromzone
insertintozone(z_zone)values('北京')
insertintozone(z_zone,z_id)values('北京',4)
insertintozone(z_zone)values('四川')
insertintozone(z_zone,z_id)values('成都',6)
insertintozone(z_zone,z_id)values('綿陽',6)
insertintozone(z_zone)values('江蘇')
insertintozone(z_zone,z_id)values('南京',10)
insertintozone(z_zone,z_id)values('蘇州',10)
insertintozone(z_zone,z_id)values('無錫',10)
insertintozone(z_zone,z_id)values('常州',10)
----------------------------------------------
--看下自連接的一般用處
selecta.z_zone,b.z_zonefromzoneasa?inner?join?zoneasb?on?a.z_id=b.id
--擴(kuò)展應(yīng)用下
selectb.z_zone,count(a.z_zone)as'轄區(qū)數(shù)'fromzoneasa?inner?join?zoneasb?on?a.z_id=b.idgroupbyb.z_zone
--簡(jiǎn)單說就是自己連接自己作谭,換言之對(duì)同一個(gè)表進(jìn)行連接操作
selecta.st_name,a.st_add,b.st_name,b.st_addfromstudioasa?inner?join?studioasb?on?a.st_add=b.st_add
--我們發(fā)現(xiàn)有人等于自己,那么增加一個(gè)條件
selecta.st_name,a.st_add,b.st_name,b.st_addfromstudioasa?inner?join?studioasb?on?a.st_add=b.st_addanda.st_name!=b.st_name
--====學(xué)云網(wǎng)-天轟穿-www.ixueyun.com==子查詢============
--在一個(gè)SQL語句中鑲?cè)肓硪粋€(gè)SQL語句教鑲套查詢奄毡,而被鑲?cè)氲倪@個(gè)SQL語句就被江湖人稱子查詢折欠。是處理多表操作的附加方法
--子查詢也稱內(nèi)部查詢,而包含子查詢的Select語句被誠為外部查詢吼过,子查詢自身可以包括一個(gè)或者多個(gè)子查詢锐秦,也可以鑲套任意數(shù)量的子查詢
--使用in的子查詢
select*fromstudiowherecl_idin(selectcl_idfromclasswherecl_id>2)
--使用notin
select*fromstudiowherecl_idnotin(selectcl_idfromclasswherecl_id>2)
--使用比較運(yùn)算符的子查詢--any表示子查詢中任意的值all表示子查詢中的每個(gè)值
--使用any
select*fromclasswherecl_id>any(selectcl_idfromstudiowherest_age>30)
--使用all
select*fromclasswherecl_id>all(selectcl_idfromstudiowherest_age>30)
--============一個(gè)分頁的SQL語句========
selecttop3*fromstudio
wherest_id>all(selecttop3st_idfromstudio?orderbyst_id)
orderbyst_id
--使用exists,該關(guān)鍵字引入一個(gè)子查詢的時(shí)候基本上是對(duì)數(shù)據(jù)進(jìn)行一次是否存在的測(cè)試
--我們查詢那些人所在的班級(jí)是編號(hào)為1的
select*fromstudiowhereexists(selectcl_idfromclasswherestudio.cl_id=class.cl_idandclass.cl_id=1)
--使用notexists
select*fromstudiowherenotexists(select*fromclasswherestudio.cl_id=class.cl_idandclass.cl_id=1)orderbyst_id
--基于查詢生成新的表
selectst_nameintoclass_3fromstudiowherecl_id=3
--將數(shù)據(jù)批量插入一個(gè)表中
insertintoclass_3selectst_namefromstudiowherecl_id=4
-----------------------sql編程--------------
declare@maxint;
--申明一個(gè)變量@max
set@max=1;
--為變量@max賦值
while@max<10
--如果@max小于10就進(jìn)入循環(huán)
begin
set@max=@max+1;--每次循環(huán)就給@max加1
print@max;
--打印當(dāng)前@max的值
end
print'終于循環(huán)完了';