Sql學習筆記(二)—— 條件查詢


上篇簡單介紹了一下sql的一些基礎增刪改查語句,而針對多種多樣的查詢語句則未詳細說明,這一篇繼續記錄一下關於各種條件查詢的知識。

 

1.按列名進行查詢

語句:

1 select stuName , stuAge from student 2 
3 -- select 后的字段用','分隔,不能使用 and 

 

注意:select 后的字段不要用and 連接 這樣不對。 

結果展示為:

 

2.where 條件查詢

先舉一個where 條件的例子:

查詢 stuGender 為0和 majorId 為2的記錄:

1 select * from student 2 
3 where stuGender = 0 
4 
5 and majorId = 2 

 

這里寫查詢語句的時候可以嘗試把語句分開在不同的行寫這樣想執行哪些行的語句就選擇哪些,執行起來很靈活。

查詢結果如下:

 

 通過這個例子想說明一下,where后面的運算符有是多種,不止有 “=”,還有 “<>” ,">=" 等等,具體的如下表所示:

 
操作符 描述
= 等於
<> 不等於(有的也可寫為!=)
> 大於
< 小於
>= 大於等於
<= 小於等於
between 在某個范圍內
like 搜素某種模式

前面的6種的使用方法都和上面的示例一致,下面說一下后面兩種:

 (1)between 

between 和 and 搭配起來用,作用和 >= , <=搭配 起來用效果一樣,可以看下面這個示例:

1 -- between 使用 2 
3 select * from student 4 
5 where stuAge between 20 and 24

 

 結果如下:

 

 由上可以看到,查詢出的是年齡在20 - 24之間的值。

(2)like

like 的作用是; 模糊查詢,like關鍵字 和 通配符一起使用:

通配符:

%; 替代一個或多個字符或者不替代任何字符:

示例:查詢 地址是 *京的學生:

1 select * from student 2 
3 where stuAddress like '%京'

 

查詢結果:

 

 但是,當你把字段值寫全,再加上 % ,也能正常查詢,如下:

1 select * from student 2 
3 where stuAddress like '%北京%'

查詢結果:

通配符 _ : 僅替代一個字符:

示例:

select * from student -- where stuAddress like '_京'

where stuAddress like '南_'

--  _在前在后都可以

 

結果展示:

 

 

通配符  [  某字符(可不止一個字符) ] :中括號中寫的字符,只要某字段值的首位包含其中任意一個字符,則會查詢出來,須配合%或者_使用;

比如:[南北],則會把字段里有南和北其中任意一個字的記錄查詢出來,示例如下:

 

1 -- [某某字符] 2 select * from student 3 where stuAddress like '[南武]%'

 

結果顯示如下:

 

 注意要配合 % 使用;

 通配符  [^某某字符 ] : 上一個通配符的取反,意思是不包含某某字符的記錄:

示例:

1 -- [^某某字符] 2 select * from student 3 where stuAddress  like '[^南武]%'

 

 注意:^ 要寫在中括號里面;

結果為:

 

 這里需要注意的是,[]中的字符必須是某字段值的首個字符,常用於搜索姓 什么 的人群。

  另外: like  '[^XXX]%'  也可以實現為   not like  '[XXX]%' ;

 3.and 連接多個where 條件

and 連接多個 where 條件 ,表示 “與" ,取滿足條件的交集;

示例:

1 -- and 2 select * from student 3 
4 where stuAge >= 18 
5 
6 and stuGender = 1
7 
8 and majorId = 1

 

where 后面可以接多個 and 

 結果為:

4. or 連接多個where 條件

or連接多個 where 條件 ,表示 “或" ,取滿足條件的並集;

 示例:

 1 -- or  2 select * from student  3 
 4 where (stuName = 'AAA'
 5 
 6 or stuName = 'BBB'
 7 
 8 or stuName = 'FFF')  9 
10 and stuGender = 0

 

結果:

 從代碼可以看到,查詢條件可以用 () 括起來,定義優先級,這種寫法,和不帶()的結果是不一樣的。

不帶括號示例:

1 select * from student 2 
3 where stuName = 'AAA'
4 
5 or stuName = 'BBB'
6 
7 or stuName = 'FFF'
8 
9 and stuGender = 0

結果:

 

 5.in 操作符

in 操作符會指定查詢的范圍,比如你希望查詢id為 4,7,12的記錄,那么你就可以使用in,示例語句如下:

查詢id為2,4,7的記錄:

1 -- in 指定查詢范圍
2 
3 select * from student where student.id in (2,4,7)

 結果展示為:

 

 6.not 表示對某個條件去取反

比如:前面講到的 like 的否定就寫為 not like ;

示例如下:

取出地址中不含 '京'字的記錄: 

1 -- not --
2 select * from student where student.stuAddress not like '%京%'

結果顯示為:

 

 7.數據排序  order by

(1)默認排序方法:order by 字段名

示例:按年齡排序 

1 -- order by -==
2 select * from student order by student.stuAge
3 -- 若不指定升序還是降序,則默認是升序排列

注意:在不指定升降序的時候,默認是升序(從小到大往下排)

結果展示為:

 

(2)升序排列 ASC

 用法為:order by 字段名  asc

示例:

-- order by -==
select * from student order by student.stuAge  asc
-- 若不指定升序還是降序,則默認是升序排列

 

結果和(1)中顯示一樣;

(3)降序排列 

  用法為:order by 字段名  desc

 示例:

按照id降序顯示

1 -- 降序--
2 select * from student order by student.id desc

 

結果為:

(4)設定排序優先級,指定多個排序規則

這個是啥意思呢,意思是這樣的,比如你這個表(student)中有很多數據,現在你想按照年齡降序排列,來看一下結果:

 

 上圖中你可以看到,年齡按照降序排列,但有許多的年齡值是重復的,這個時候那些年齡一樣大的數據,你該怎么排序呢?如果你想指定這個第二優先級的順序,第三優先級的順序,也有辦法做到,看下面:

第一按年齡降序排序、其次按majorId降序排序,最后按id升序排列:

1 -- 多種排序方法 --
2 select * from student order by student.stuAge desc,student.majorId desc,student.id asc

結果顯示為:

 

 8.數據庫別名

  在寫sql語句時,有時候表名和字段名很長,書寫起來較麻煩,這個時候我們可以給表名或者字段名起個綽號——也就是別名。

寫法有以下幾種:

(1)Alias(也就是AS)

sql server寫法:

為列指定別名:本名 as '別名';(注意:引號可加可不加,但我覺得加上比較好,

為表指定別名:本名 as 別名;(一定不能加引號

示例如下:

 

select stuName as ‘name’,stuAge as ‘age’ from student as s

where s.majorId = 1

結果如下:

(2)省略 as 的寫法

這種寫法和上一種一摸一樣,唯一區別就是 不寫 as:

示例:

-- 省略 as --
select stuName  name,stuAge  age from student s where s.majorId = 1

 

結果:

(3)別名的妙用

 可以給幾個字段設置一個共同的別名,這樣這些數據會組成一個新的字段,字段名就是指定的別名:

示例:把student表中的年齡、性別、地址 結合在一起,組成一個名字為 info的字段:

1 -- 多個字段一個別名
2 select stuName, CONCAT(stuAge,',',stuGender,',',stuAddress) as info  from student as s

 

結果為:

 

 8. case 語句

 case 語句我的理解,其實就是在sql語句里對查詢的值做出了判斷,並進行分類。比如,你在性別表里用0表示男,1表示女,此時,你可以在程序里進行轉換,也可以直接在sql里即對其進行轉換,在sql中就要用到 case語句了,case語句的用法如下:

簡單case函數

case  字段名 

when 判斷條件一 then 結果一
when 條件二 then 結果二

when 條件三 then 結果三
.
.
.
when 條件n  then 結果n
else 結果n+1  

end

 case 搜索函數:

語法如下:

 

case  -- case起始

when 條件一 then 結果一

when 條件二 then 結果二

when 條件三 then 結果三
.
.
.
when 條件n  then 結果n

else 結果 n+1

end  -- end 結束

 

 

 

 

 下面給出幾個示例:

(1)查詢學生性別,並分為男和女進行展示:

 select stuName ,
case stuGender

when '0' then ''

when '1' then ''

else '其他'

end as '性別'
from student

 

查詢結果:

(2)年齡大於20為前輩,小於等於20為后輩

 1 select student.stuName ,
 2  
 3 case 
 4 
 5 when student.stuAge > 20 then '前輩' 
 6 
 7 when  student.stuAge <= 20 and student.stuAge >= 19 then '后輩' 
 8 
 9 else '菜鳥'
10 
11 end  as '資歷'
12 
13 from student

 

結果:

 

 啊,寫了好久啊,這一篇,上周各種事情,最后還是寫完了,哈哈。

 

下一篇寫一下聯表查詢,本篇先告一段落了哦。

 

我的QQ郵箱:3074596466@qq.com 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM