T-SQL基礎語句

SQL(結構化查詢語言)

關係數據庫的標準語言

SQL ServerOracleDB2

非過程化語言

不需要指定對數據的存放方法

統一的語言

創建、修改以及刪除數據對象(數據庫、表等)

T-SQL

SQL的加強版, 提供了類似於程序語言的基本功能

變量說明、流程控制、功能函數


DML:數據操縱語言

查詢、插入、刪除和修改數據

SELECTINSERTUPDATEDELETE

DCL:數據控制語言

建立數據庫、數據庫對象和定義其列

CREATEALTERDROP

DDL:數據定義語言

控制數據庫組件的存取許可、存取權限等

GRANTREVOKE

比較運算符

運算符

含義

=

等於

>

大於

<

小於

<=

小於等於

>=

大於等於

<>

不等於

!>

不等於

BETWEEN

指定值的包含範圍(包含邊界)。使用 And 分隔開始值和結束值

IS [Not] NULL

指定是否搜索空值或非空值

LIKE

模糊查詢,與指定字符串進行模式匹配

IN

是否在數據範圍裏面


通配符

運算符

含義

AND

組合兩個條件,並在兩個條件都爲True時取值爲True

OR

組合兩個條件,並在兩個條件之一爲 True 時取值爲True

NOT

和其他操作符一起使用,取反的操作


1.創建數據庫:

Createdatabasebenet--創建一個數據庫名爲”benet“

on

(

name=benet,--文件的邏輯名

filename='d:\benet.mdf',--數據文件存放的物理位置

size=10MB,--文件的初始大小

maxsize=100MB,--文件的總存儲空間大小

filegrowth=10MB--文件的自動增長大小

)

logon

(

name=benet_log,

filename='d:\benet.ldf',--日誌文件存放的物理位置

size=10MB,--日誌文件的初始大小

maxsize=100MB,--日誌文件的總存儲大小

filegrowth=10MB--日誌文件自動增長大小

)

Go


2.創建表:

usebenet--benet數據庫下創建表

createtablestudent--創建一個表爲”student“

(

sidintidentity(1,1)primarykeynotnull,

--設置標示符自動增長”identity“設置主鍵”primarykey' 不爲空“not null”

namenvarchar(50)notnull,

sexnvarchar(50) default''notnull,           --默認值爲

ageintnotnull,

birthdaysmalldatetime null

)


3.插入記錄:

usebenet--benet數據庫student表下插入記錄

insertintostudent(name,sex,age,birthday)

values ('zhangsan','',22,'1994-01-01'),

('lisi','',24,'1992-02-03'),

('wangwu','',25,' ')



4.修改數據:

usebenet

updatestudent--把原來wangwu的性別"",改爲""

setsex=''

wherename='wangwu'


usebenet

updatestudent--把所有性別爲"",改爲""

setsex=''

wheresex=''


usebenet

updatestudent--把所有人的年齡都+10

setage=age+10


usebenet

updatestudent--zhangsan的年齡+10

setage=age+10

wherename='zhangsan'


5.修改表:

usebenet

altertablestudent--添加列cid

addcidintnull


usebenet

altertablestudent

dropcolumncid--刪除列cid


usebenet

altertablestudent--修改birthday的數據類型爲datetime

altercolumnbirthdaydatetime



6.修改列名:

usebenet

execsp_rename'student.sex(原始表內的列名)','性別(新列名)','column'  --把列名“sex”改爲“性別”


7.刪除:

刪除數據(注意:語句DELETEDROP TABLE之間有一個非常重要的區別。DELETE刪除一個表中的一部分或全部的內容。而DROP TABLE則將表的內容和表的大綱全都一起刪除。這樣,在執行了DELETE語句之後,表依然存在於數據庫中,儘管表中或許已沒有行了,但在執行DROP TABLE語句後,表將不復存在)

DeleteTruncate table區別


條件刪除

記錄事物日誌

重置標識符列

外鍵約束

Delete

使用where子句按條件刪除

是,數據可以恢復

可以用於含有外鍵約束的表

Truncate  table

只能清空整個表

否,數據無法恢復

重置標識符列爲0

不能用於含有外鍵約束的表


usebenet

deletefromstudent--刪除表中所有性別爲的信息

where性別=''


usebenet

deletefromstudent--刪除表中所有年齡爲“34”的信息

whereage='34'


usebenet

droptablestudent--刪除表



8.select 查詢

1查詢studen表中的所有數據,*”代表全部


usebenet

select*fromstudent

2查詢studen表中的name

usebenet

selectnamefromstudent

3查詢studen表中的name列和sex,","隔開


usebenet

selectname,sex

fromstudent

4查詢studen表中的李四的年齡


usebenet

selectage

fromstudent

wherename='李四'

5查詢studen表中的不爲李四的年齡

usebenet

selectage

fromstudent

wherename<>'李四'--(where name!='李四'\where not name='李四')

6)查詢studen表中的name大於24

usebenet

selectname,age

fromstudent

whereage>24  

7)查詢studen表中的name大於等於30


usebenet

selectname,age

fromstudent

whereage>=30  

8)查詢studen表中的name小於24

usebenet

selectname,age

fromstudent

whereage<24  

9)查詢studen表中的name小於等於30

usebenet

selectname,age

fromstudent

whereage<=30

10)查詢studen表中的age等於18並且age等於30

usebenet

selectname

fromstudent

whereage=18 and age=30--whereage in 18,30))

11)查詢studen表中的name大於等於30的並且小於等於50

usebenet

selectname,age

fromstudent

whereage>=30 andage<=50     --(where age between 30 and 50,如果不等於加“not)

12)查詢studen表中的name小於等於30的或者大於等於50

usebenet

selectname,age

fromstudent

whereage<=30 orage>=50   --where age not between 30 and 50

(13)查詢studen表中的sex爲女並且年齡等於18

usebenet

selectname,age

fromstudent

wheresex=''andage=18    


(14)查詢studen表中的所有sex(不重複)使用distinct

usebenet

selectdistinctsex--查詢studen表中的所有sex(不重複)

fromstudent


NOT操作的優先級最高,AND其次,OR最低

比較以下兩個語句的不同:

15)比如:

usebenet

Select*

Fromstudent

Where  age>22 andage<30)

orcid=1 andsex=''

--先執行age>22 andage<30,然後執行cid=1 andsex=''

,最後執行age<3 orcid=1


16)查詢studentcid爲空的性名

usebenet

Selectname

Fromstudent

Wherecidisnull     --不爲空(where cid is not null


Selectcount(*)

Fromstudent

9.聚合函數

AS子句可以用來改變結果集列的名稱

比如:

1)查看setudent表中age的總和

SelectSUM(age)as年齡

Fromstudent

2)查看setudent表中age的平均數

Selectavg(age)as年齡

Fromstudent

3)查看student表中age的的總個數

Selectcount(age)as總個數

Fromstudent

4)查看student表中age的最大值和最小值

Selectmax(age) --  最大值

Fromstudent


Selectmin(age)   --最小值

Fromstudent

10.分組查詢:按照一定條件分類組合,通過groupby 子句實現,having子句的作用是篩選滿足條件的組

1)統計每個課程的總成績

Selectcidas課程編號,sum(score)as總成績

Fromscore

groupbycid

2)統計每個課程的平均成績

Selectcidas課程編號,avg(score)as平均成績Fromscore

groupbycid

3)統計每個學生每個課程的平均成績

Selectsidas學生編號,cidas課程編號,avg(score)as平均成績

Fromscore

groupbysid,cid

4)只顯示補考過的學生成績

Selectsidas學生編號,cidas課程編號,avg(score)as平均成績Fromscore

groupbysid,cid

havingcount(score)>1

11.降序升序、Top

1)查詢student中的所有數據,並以年齡降序排列


Select*

fromstudent

orderbyagedesc    --esc升序

2)查詢student中前5列數據,並以年齡降序排列

Selecttop 5 *  --top子句實現

fromstudent

orderbyagedesc


12.LIKE操作符用於將列的值與某個特定的模式做比較。列的數據類型可以是任何字符或者日期型數據。

通配符    %:any 代表零個或多個任意字符      _:single代表某一個任意字符

1)查詢student表中所有姓名以張開頭的姓名和年齡

Selectname,age

fromstudent

wherenamelike'%'

2)查詢student表中所有姓名不是以張開頭的姓名和年齡

Selectname,age

fromstudent

wherename not like'%'

3)查詢student表中所有姓名無論第幾個字爲“德”的姓名和年齡

Selectname,age

fromstudent

wherenamelike'_%'

4)查詢student表中所有姓名第二個字爲“德”的姓名和年齡

Selectname,age

fromstudent

wherenamelike'%%'

5)查詢student表中年齡爲23開頭的所有姓名

Selectname

fromstudent

whereagelike'[2-3]%'

6)查詢姓(firstname)的打頭字母不是JKLMNO,並且名(lastname)的打頭字母不是E或者Z的所有學生的編號和名字


Selectstid,name

Fromstudent

Wherefirstnamelike'[^J-O]%'

andlastnamelike'[^EZ]%'

13.多表查詢

合併union

student表和score表的cid合併

Selectcid

Fromstudent

union

selectcid

fromscore

1)內鏈接inner join

Selectstudent.name姓名s,student.cid班級s,

class.cid班級c,class.name名子c

fromstudent,class

wherestudent.cid=class.cid

或者標準寫法:

Selectstudent.name姓名s,student.cid班級s,

class.cid班級c,class.name名子c

fromstudentinnerjoinclass

onstudent.cid=class.cid

2)外連接

1>左外連接使用left join(左爲主表,右爲從表,如果左表某一行在右表中沒有匹配行,則右表返回null值)

Selectstudent.name姓名s,student.cid班級編號s,

class.cid班級編號c,class.name班級名c

fromstudentleftjoinclass

onstudent.cid=class.cid

2>右外連接使用right join(右爲主表,左爲從表,如果右表某一行在左表中沒有匹配行,則左表返回null值)

Selectstudent.name姓名s,student.cid班級編號s,class.cid班級編號c,class.name班級名c

fromstudentrightjoinclass

onstudent.cid=class.cid

3>完整外連接使用full join(返回左表和右表的所有行,當某一行在另一表中沒有匹配行時,另一表返回空值)

Selectstudent.name姓名s,student.cid班級編號s,class.cid班級編號c,class.name班級c

fromstudentfulljoinclass

onstudent.cid=class.cid

4>交叉連接使用cross join(表之間沒有任何關聯條件,查詢將返回左表與右表挨個連接的所有行,就是左表中的每一行與右表的所有行一一組合

Selectstudent.name姓名s,student.cid班級編號s,class.cid班級編號c,class.name班級c

fromstudentcrossjoinclass

或者

Selectstudent.name姓名s,student.cid班級編號s,class.cid班級編號c,class.name班級c

fromstudent,class






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章