T-SQL語言中最重要的部分是它的查詢功能,查詢語言用來對已經(jīng)存在于數(shù)據(jù)庫中的數(shù)據(jù)按 照特定的行、列、條件表達(dá)式或者一定次序進(jìn)行檢索。
T-SQL對數(shù)據(jù)庫的查詢使用SELECT語句,SELECT語句具有靈活的使用方式和強(qiáng)大的功能, SELECT語句的基本語法格式如下:
SELECT select_list /* 指定要選擇的列 */ FROM table_source /* FROM子句,指定表或視圖 */ [ WHERE search_condition ] /* WHERE子句,指定查詢條件 */ [ GROUP BY group_by_expression ] /*GROUP BY子句,指定分組表達(dá)式 */[ HAVING search_condition ] /* HAVING子句,指定分組統(tǒng)計條件 */ [ ORDER BY order_expression [ ASC | DESC ]] /*ORDER子句,指定排序表達(dá)式和順序*/
此部分比較簡單,直接上代碼
-- 打開數(shù)據(jù)庫use sixstardb go-- 1、【投影查詢數(shù)據(jù)】-- 查詢輸出指定字段:學(xué)號,姓名,專業(yè),總分select sno,sname,cname,cscore from student-- 查詢輸出所有字段select *from student-- 查詢輸出:則修改標(biāo)題名稱 select sno as '學(xué)號',sname as '姓名',cscore as '總分' from student-- 查詢輸出:去掉重復(fù)select *from studentselect distinct cname from student--------------------------------------------------------------------------------------------------
語法格式:
選擇查詢通過WHERE子句實現(xiàn),WHERE子句給出查詢條件,該子句必須緊跟FROM子句之后。WHERE <search_condition>
其中search_condition為查詢條件,<search_condition>語法格式為:
{ [ NOT ] <precdicate> | (<search_condition> ) }[ { AND | OR } [ NOT ] { <predicate> | (<search_condition>) } ]} [ ,…n ]
其中predicate為判定運算,語法格式為:
{ expression { = | < | <= | > | >= | <> | != | !< | !> } expression/*比較運算*/| string_expression [ NOT ] LIKE string_expression [ ESCAPE 'escape_character'/*字符串模式匹配*/| expression [ NOT ] BETWEEN expression AND expression/*指定范圍*/| expression IS [ NOT ] NULL/*是否空值判斷*/| CONTAINS ( { column | * },'<contains_search_condition>')/*包含式查詢*/| FREETEXT ({ column | * },'freetext_string')/*自由式查詢*/| expression [ NOT ] IN ( subquery | expression [,…n] )/*IN子句*/| expression { = | < | <= | > | >= | <> | != | !< | !> } { ALL | SOME | ANY } ( subquery )/*比較子查詢*/| EXIST ( subquery )/*EXIST子查詢*/}
表1 查詢條件
比較運算符用于比較兩個表達(dá)式值,比較運算的語法格式如下: expression { = | < | <= | > | >= | <> | != | !< | !> } expression 其中expression是除text、ntext和image之外類型的表達(dá)式。
BETWEEN、NOT BETWEEN、IN是用于范圍比較的三個關(guān)鍵字,用于查找字段值在(或不在)指定范圍的行。
字 符 串 模 式 匹 配 使 用 LIKE 謂 詞 ,LIKE 謂 詞 表 達(dá) 式 的 語 法 格 式 如 下 : string_expression [ NOT ] LIKE string_expression [ ESCAPE 'escape_character’]
其含義是查找指定列值與匹配串相匹配的行,匹配串(即string_expression)可以是一個完整的字符串, 也可以含有通配符。
通配符有以下兩種:
%:代表0或多個字符。
_:代表一個字符。
空值是未知的值,判定一個表達(dá)式的值是否為空值時,使用IS NULL關(guān)鍵字,語法格式如下:
expression IS [ NOT ] NULL
-- 2、【選擇查詢】-- a--表達(dá)式比較 查詢輸出性別為"女"且"模特專業(yè)"select *from student where ssex='女' and cname='軟件工程'update studentset cscore=88where sname='大春'select *from student-- b--范圍查詢 查詢輸出總分為(710,700,750)select *from student where cscore in(88,100,99)select *from student where cscore=88 or cscore=100 or cscore=99-- 同上面一樣-- 查詢輸出700-712select *from studentselect *from student where cscore between 85 and 100-- c--模式匹配 查詢輸出姓名中有"小"開頭select *from studentselect *from student where sname like '大%'select *from student where sname like '%虎'select *from student where sname like '%明%'select *from student where sname like '_明_'select *from student where cscore like '%9'-- d--判斷空值insert into student values(8,'04','狗蛋','女','原子彈制備',56,null)select *from student where crank is nulldelete from student-- 刪除一組數(shù)據(jù)where sname='狗蛋'--------------------------------------------------------------------------------------------------
結(jié)果可以自行測試,內(nèi)容過多,我就不往這放了
在SELECT語句的WHERE子句中使用比較運算符給出連接條件對表進(jìn)行連接,將這種表示形式稱為連接謂詞表示形式。其一般語法格式為:
[<表名1.>] <列名1> <比較運算符> [<表名2.>] <列名2> 比較運算符有:<、<=、=、>、>=、!=、<>、!<、!> 連接謂詞還有以下形式:
[<表名1.>] <列名1> BETWEEN [<表名2.>] <列名2>AND[<表名2.>] <列名3>
由于連接多個表存在公共列,為了區(qū)分是哪個表中的列,引入表名前綴指定連接列。例如,student.stno表示student表的stno列, score.stno表示score表的stno列
經(jīng)常用到的連接如下:
●等值連接:表之間通過比較運算符“=”連接起來,稱為等值連接。
●非等值連接:表之間使用非等號進(jìn)行連接,則稱為非等值連接。
●自然連接:如果在目標(biāo)列中去除相同的字段名,稱為自然連接。
●自連接:將同一個表進(jìn)行連接,稱為自連接。
T-SQL擴(kuò)展了以JOIN關(guān)鍵字指定連接的表示方式,使表的連接運算能力有了增強(qiáng)。JOIN連接在FROM子句的< joined_table >中指定。
語法格式
<joined_table> ::={<table_source> <join_type> <table_source> ON <search_condition>| <table_source> CROSS JOIN <table_source>| <joined_table>}
說明:
<join_type>為連接類型, ON用于指定連接條件, <join_type>的格式如下:[INNER|{LEFT|RIGHT|FULL}[OUTER][<join_hint>]JOIN
INNER表示內(nèi)連接,OUTER表示外連接,CROSS表示交叉連接,此為JOIN關(guān)鍵字指定的連接的3種類型。
內(nèi)連接按照ON所指定的連接條件合并兩個表,返回滿足條件的行。內(nèi)連接是系統(tǒng)默認(rèn)的,可省略INNER關(guān)鍵字。
在內(nèi)連接的結(jié)果表,只有滿足連接條件的行才能作為結(jié)果輸出。外連接的結(jié)果表不但包含滿足連接條件的行,還包括相應(yīng)表中的所有行。外連接有以下3種:
●左外連接(LEFT OUTER JOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括左表的所有行;
●右外連接(RIGHT OUTER JOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括右表的所有行;
●完全外連接(FULL OUTER JOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括兩個表的所有行。
代碼入下:
-- 3、【連接查詢】-- a--連接謂詞select *from studentselect *from courseselect student.sno,student.sname,student.ssex,student.cname,course.cno,course.cname,course.cstudyscorefrom student,coursewhere student.cno=course.cno-- 內(nèi)連接select *from student inner join course on student.cno=course.cno-- 全顯示select s.sno,s.sname,c.cno,c.cname-- 查詢顯示from student s join course c on s.cno=c.cnowhere c.cno='03' and s.cscore>=90---------------------------------- 以下操作容易打亂上述數(shù)據(jù)庫,所以我新建了個數(shù)據(jù)庫用于執(zhí)行下面的操作create database testdb use testdb go-- b--JOIN關(guān)鍵字select *from aselect *from b-- 左連接select a.*,b.* from a left join b on a.id=b.id-- 右連接select *from aselect *from bselect a.*,b.* from a right join b on a.id=b.id-- 完全連接select *from aselect *from bselect a.*,b.* from a full join b on a.id=b.id--------------------------------------------------------------------------------------------------
--4、【統(tǒng)計計算】use sixstardb go-- 統(tǒng)計最大數(shù) 最小數(shù) 平均數(shù)select *from studentselect max(cscore) as '最高分',min(cscore) as '最低分',avg(cscore) as '總分平均分'from student-- 統(tǒng)計行數(shù)select *from studentselect count(*) as '學(xué)生總數(shù)' from student--------------------------------------------------------------------------------------------------
-- 5、【排序查詢】-- order by語句-->排序操作 默認(rèn)為升序,DESC降序use testdb goselect *from orders-- 根據(jù)字母順序顯示公司名稱 select company,ordernumber from orders order by company-- 根據(jù)數(shù)字降序顯示 (升序去掉desc即可)select company,ordernumber from orders order by ordernumber desc-- having子句select *from orderhaving-- 查詢金額少于2000,select order_custmer,sum(order_price) as '總數(shù)' from orderhavinggroup by order_custmerhaving sum(order_price)<20000-------------------------------------------------use sixstardb goselect *from course--select *from gradeselect *from studentselect *from studentselect s.sno,s.sname,c.cnamefrom student s,/*grade g,*/course cwhere /*s.stno=g.stno and */s.cno=c.cno and c.cname='軟件工程'----------------------------------------------------------
/*什么是子查詢?子查詢就是嵌套在主查詢中的查詢*/use testdb goselect *from customersselect *from customers where id in(select id -- 子查詢idfrom customers -- 子查詢來自cunstomerswhere salary>=7000)-- 子查詢條件 整體查詢后返回id值
星光不負(fù)趕路人,努力學(xué)習(xí),一起加油
聯(lián)系客服