上篇簡單介紹了一下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