風起何緣的專欄
阿新 • • 發佈:2019-01-07
6、null(沒有值 空值)
零和null 是不一樣的null表示空值沒有值,零表示一個確定的值
null 不參與<> 、!=、= 運算但可以參與is 或is not運算
任何數字與null參與數學運算結果為null
任何型別的資料都可以為null。如:
create table t1 ( name nvarchar(20), cnt int, riqi datetime ); insert into t1 values (null,null,null); select * from t1; drop table t1; --輸出獎金非空的員工的所有資訊 select * from emp where comm is not null;--null 不參與<> 、!=、= 運算但可以參與is 或is not運算 --輸出每個員工的姓名、年薪(包括獎金)假設comm為一年的獎金 select empno,ename,sal*12+comm as "年薪" from emp;--error -- null 不能參與任何數學運算否則結果永遠為null select empno,ename,sal*12 + isnull(comm,0)as "年薪" from emp; --isnull(comm,0)如果comm為null返回零否則返回comm
7、order by
select * from emp order by sal;--預設升序
select * from emp order by sal desc;
select * from emp order by deptno,sal;--先按deptno升序排序如果deptno相同在按sal升序排序
select * from emp order by deptno desc,sal;--deptno降序排,sal升序排
8、模糊查詢(搜尋時經常使用)
格式:
select 欄位的集合 from 表名 where 某個欄位名字 like 匹配的字元;
匹配的條件通常含有萬用字元;
萬用字元:
% 任意零個或多個字元;
_下劃線 表示任意單個字元;
[a-f] a到f的任意單個字元;
[a,f] a或f;
[^a-c] 不是a不是b也不是c的任意單個字元;
匹配條件必須用單引號括起;
萬用字元當做普通字元的使用
9、聚合函式(多行記錄返回一個值通常用於統計組內的資訊)create table student (name varchar(20) null, age int, ); insert into student values('張三',88); insert into student values('Tom',66); insert into student values('a_b',22); insert into student values('c%d',44); insert into student values('abc_fe',56); insert into student values('haobin',38); insert into student values('c%',65); insert into student values('long"s',88); select * from student where name like '%\%%' escape '\';--把name中含有%的輸出 select * from student where name like '%\_%' escape '\';--把name中含有_的輸出 escape '\'表示把'\'當做轉意字元的標誌(開始)sql中可以把把任意字元當做轉意字元的標誌
函式分類
單行函式
每行返回一個值
多行函式
多行返回一個值
聚合函式是多行函式
例子:
select lower(ename) from emp;-- 最終返回的是行,low是單行函式
select max(sal) from emp; --返回時一行max()是多行函式
聚合函式是多行函式聚合函式分類:
max()
min()
avg() 平均值
count()求個數
count(*)
返回表中所有記錄的個數
select count(*) from emp;--返回emp表所有記錄的個數
count(欄位名)
返回欄位值非空的記錄的個數,重複記錄也會被當做有效記錄
select count(deptno) from emp;--返回值是這說明deptno重複記錄也被當作有效記錄
select count(comm) from emp;--返回值是這說明comm為null的記錄不會被當做有效記錄
count(distinct 欄位名)
返回欄位名不重複,並且非空的欄位的記錄
select count(distinct deptno) from emp;--返回值是三,統計deptno不重複的記錄
注意的問題:判斷下面sql語句是否正確
10、group byselect max(sal),min(sal),count(*) from emp;--OK select max(sal) "最高工資",min(sal)"最低工資",count(*)"員工人數" from emp;--ok select max(sal),lower(ename) from emp;--error單行函式和多行函式不能混用
格式:
group by 欄位的集合
功能:
把表中的記錄按照欄位分成不同的組
例子:
查詢不同部門的平均工資;
注意:理解group by a,b,c的用法
先按a分組,如果a相同在按b分組,如果b相同在按c分組,最後統計的是最小分組的資訊
一定要知道下面語句為什麼是錯誤的
use scott;
--輸出每個部門的編號和該部門的平均工資
select deptno "部門",avg(sal) "部門平均工資"
from emp
group by deptno;
--判斷下面語句是否正確
select deptno "部門",avg(sal) "部門平均工資",ename
from emp
group by deptno;-- error
--判斷下面語句是否正確
select deptno ,ename
from emp
group by deptno;-- error
--總結:使用了group by以後select中只能出現分組後的整體資訊,不能出現組內詳細資訊