數據庫知識點:
一、計算字段
1、NULLIF函數 將 null 的姓名轉化為“佚名”;
表達式:NULLIF ( exPRession1 , expression2 ) 含義:如果兩個表達式不等價, 則 NULLIF 返回第一個 expression1的值。 如果兩個表達式等價, 則 NULLIF 返回第一個 expression1類型的空值。
2、Beween And 計算字段 如:Fsalary Between Fage*1.5+2000 And Fage*1.8+50003、SQL的語法計算,取代代碼的計算 如: Update t set fgroup=id/10
二、組合查詢 Union
1、UNION操作符可以將兩個(或多個)查詢語句的兩個查詢結果集合并成一個結果集;2、連接原則: 一是每個結果集必須有相同的列數; 二是每個結果集的列必須類型相容。3、默認規則: UNION運算符合并了兩個查詢結果集, 其中完全重復的數據行被合并為了一條4、UNION ALL獲得所有的結果集。
三、匹配
1、_(補位)----單字符匹配2、%(所有)----多字符匹配3、[]----集合匹配 如:[AB]%,以“A” 或者“B“開頭長度, 長度任意。 注:集合取反,“^”,如“[^AB]%”
四、in語句
1、多值檢測 如:SELECT FAge,FNumber,FName FROM T_Employee WHERE FAge IN (23, 25, 28)2、范圍值檢測(不提倡,推薦用between...and...)
五、WHERE 1=1 使用動態組裝的SQL
1、指定一個永遠為真的條件,不需要再判斷where是否存在了;2、容易造成性能損失;3、最好where與and都要拼接?!?/pre>六、窗口函數ROW_NUMBER()
1、含義:計算每一行數據在結果集中的行號(從1開始計數)
2、例:SELECT ROW_NUMBER() OVER(ORDER BY FSalary),FNumber,FName,FSalary,FAge FROM T_Employee
3、擴展: 第3行到第5行的數據: SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY FSalary DESC) AS rownum, FNumber,FName,FSalary,FAge FROM T_Employee ) AS a WHERE a.rownum>=3 AND a.rownum<=5
七、數學函數
1、ABS()函數,求絕對值;2、POWER()函數: 一般power(sex,2),第一個參數為待求冪的表達式, 第二個參數為冪。 如select POWER(2,3) 結果為8。3、SQRT()函數,計算平方根;4、RAND()函數,求隨機數(select RAND();)5、舍入到最大整數,CEILING()函數; 舍入到最小整數, FLOOR()函數; 四舍五入,ROUND()函數。6、DATENAME()函數 可選值 別名 說明 Year yy、 yyyy 年份 Quarter QQ, q 季度 Month mm, m 月份 Dayofyear dy, y 每年的某一日 Day dd, d 日期 Week wk, ww 星期 Weekday dw 工作日 Hour hh 小時 Minute mi, n 分鐘 Second ss, s 秒 Millisecond ms 毫秒 實例:select f_GUID,DATENAME(Weekday,BirthDate) 星期 from T_Teacher7、CAST()和CONVERT()兩個函數 實例: select IDnumber,RIGHT(IDnumber,6) 后六位 from T_TeacherTest select IDnumber,cast(RIGHT(IDnumber,6) AS INTEGER)+1 as '后六位' from T_Teacher select IDnumber,CONVERT(INTEGER,RIGHT(IDnumber,6))+1 as '后六位' from T_Teacher(注意類型)8、COALESCE()函數 功能:空值處理 表達式:COALESCE ( expression,value1,value2……,valuen) 實例: select f_name,f_csrq,COALESCE(f_csrq,'2015-10-10') as 重要時期 from T_Studentwhere f_name = '11' (若f_csrq為NULL,則重要時期為2015-10-10;否則,重要時期為f_csrq) select f_name,f_csrq,f_zz,COALESCE(f_csrq,f_zz,'2015-10-10') as 重要時期 from T_Student where f_name = '11' (若f_csrq為NULL,則再次判斷f_zz,理解同上) 簡化版:ISNULL()函數
9、CASE函數 表達式: CASE WHEN condition1 THEN returnvalue1 WHEN condition 2 THEN returnvalue2 WHEN condition 3 THEN returnvalue3 …… ELSE defaultreturnvalue END 實例: select Status,(case Status when '0' then '待審核' when '1' then '審核中' when '2' then '審核通過' else '審核不通過' end ) as 狀態 from CheckTable
10、PATINDEX()函數 表達式:PATINDEX ( '%pattern%' , expression ) 含義:它返回指定表達式中模式'%pattern%'第一次出現的起始位置; 如果在全部有效的文本和字符數據類型中沒有找到該模式,則返回零。 (可以使用通配符) 實例: select f_name,PATINDEX('%小%',f_name) as 索引位置fromT_Student
select f_name,PATINDEX('%_小%',f_name) as 索引位置fromT_Student
11、幾個相關不太重要的函數 ?。?)REPLICATE ()函數,用來得到一個子字符串重復了若干次所組成的字符串, 表達式:REPLICATE (str,count); (2)REVERSE()函數,將一個字符串的順序顛倒; ?。?)ISDATE()函數,用來確定輸入表達式是否為有效日期; ?。?)ISNUMERIC()函數,用來確定表達式是否為有效的數值類型;
八、索引與約束
1、索引 創建:create index 索引名 on 表名(字段) 刪除:drop index 表名.索引名 drop index 索引名 on 表名(MySQL用法) drop index 索引名(Oracle 和 DB2的用法)2、約束:非空約束、唯一約束(UNIQUE 約束,如身份證)、CHECK 約束(如age>0) 主鍵約束(PRIMARY KEY)、外鍵約束() 實例: CardID(CardID VARCHAR(18) UNIQUE Age INT CHECK(Age >0)九、表連接
1、內連接(inner join) 2、不等值連接 3、交叉連接 4、自連接 5、外部連接 6、左外部連接(left join) 7、右外部連接(right join) 8、全外部連接(full outer join)注:表連接一般只是【表名】left join 【表名】 on... 在這里就不一一展示了,展示8個,只是為了面試時多說幾個連接方式,增加面試官的的好感。十、子查詢
1、單值子查詢(標量子查詢):查詢一個列的一行記錄 (1)、select 字段名,(一個select 的查詢語句--只有一個記錄) 實例:select 1 as 測試, (select f_name from Student where f_NO = '1') as 子查詢(2)、select 字段名 from 表名 where 某個字段 = (一個select查詢語句--只有某列某個記錄,即某個值)2、列值子查詢(表子查詢):查詢一個列的一行記錄 select a.name,b.name from a ,(select * from student s where s.Id < 1000) b3、集合運算符與子查詢(in、any、all、exists) (1) in (select 查詢語句) select * from Student where name in (select f_name from StudentTest where name= '王小小')(2)、any與in用法相同,任何的(3)、all與in用法相同,所有的(3)、exists與in用法相同,除了未完待續。。。
新聞熱點
疑難解答