mysql的casewhen語句轉oraclewhere子句條件如下:*='asdf'
oracle也有case when的語法,照辦就行,不過用在where條件中,需要有返回值的比較.這是根據你提供的語句修改,給你提供一個參考吧:where * = 'asdf' and (case when (b.i like '%0%') then true when (b.i like '%1%') and *rCode = #code# then truewhen (b.i like '%2%') and (*Dept = #dept# and #flag# = 1) then trueelse falseend) = true這是按照我的業務理解寫的where * = 'asdf' and (case when (b.i like '%0%') then 1when (b.i like '%1%') and *rCode = #code# then 2when (b.i like '%2%') and (*Dept = #dept# and #flag# = 1) then 3else 4end) = 1 -- (根據反回結果來過濾數據)。
mysql中的where和having子句的區別
在mysql中,where可用于所有的條件語句,而having僅能用于分組后篩選。
舉例:
test表中有如下數據:
where的使用:
如查詢每個部門sal大于等于1500的所有sal的總和:
select deptno,sum(sal) from test where sal>=1500 group by deptno;查詢結果:
having的使用:
如查詢sal總和大于5000的deptno:
select deptno from test group by deptno having sum(sal)>5000;查詢結果:
mysql select查詢語句where子句除了寫子查詢,還有沒有更好的代替子
一使用SELECT子句進行多表查詢SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查詢條件SELECT *,*,*s,*,*,*h,*e FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE *=*注:在上面的的代碼中,以兩張表的id字段信息相同作為條件建立兩表關聯,但在實際開發中不應該這樣使用,最好用主外鍵約束來實現二使用表的別名進行多表查詢如:SELECT *,*,*s,*,*h,*e FROM tb_demo065 a,tb_demo065_tel b WHERE *=* AND *='$_POST[textid]'SQL語言中,可以通過兩種方式為表指定別名 第一種是通過關鍵字AS指定,如SELECT *,*,*s,*,*h,*e FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE *=*第二種是在表名后直接加表的別名實現SELECT *,*,*s,*,*h,*e FROM tb_demo065 a,tb_demo065_tel b WHERE *=* 使用表的別名應注意幾下幾點(1)別名通常是一個縮短了的表名,用于在連接中引用表中的特定列,如果連接中的多個表中有相同的名稱列存在,必須用表名或表的別名限定列名(2)如果定義了表的別名就不能再使用表名三合并多個結果集SQL語言中,可以通過UNION 或 ALL將多個SELECT語句的查詢結果合并輸出,這兩個關鍵字的使用說明如下:UNION:利用該關鍵字可以將多個SELECT 語句的查詢結果合并輸出,并刪除重復行ALL:利用該關鍵字可以將多個SELECT 語句的查詢結果合并輸出,但不會刪除重復行在使用UNION或ALL關鍵字將多個表合并輸出時,查詢結果必須具有相同的結構并且數據類型必須兼容,另外使用UNION時兩張表的字段數量也必須相同,否則會提示SQL語句有錯誤。
e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECT uid,price,date FROM tb_demo067_tel四簡單嵌套查詢子查詢:子查詢是一個SELECT查詢,返回單個值且嵌套在SELECT、INSERT、UPDATE和DELETE語句或其它查詢語句中,任何可以使用表達式的地方都可以使用子查詢.SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id='$_POST[test]')內連接:把查詢結果作為WHERE子句的查詢條件即稱為內連接五復雜的嵌套查詢多表之間的嵌套查詢可以通過謂詞IN實現,語法格式如下:test_expression[NOT] IN{subquery}參數說明:test_expression指SQL表達式,subquery包含某結果集的子查詢多表嵌套查詢的原理:無論是多少張表進行嵌套,表與表之間一定存在某種關聯,通過WHERE子句建立此種關聯實現查詢六嵌套查詢在查詢統計中的應用實現多表查詢時,可以同時使用謂詞ANY、SOME、ALL,這些謂詞被稱為定量比較謂詞,可以和比較運算符聯合使用,判斷是否全部返回值都滿足搜索條件.SOME和ANY謂詞是存在量的,只注重是否有返回值滿足搜索條件,這兩個謂詞的含義相同,可以替換使用;ALL謂詞稱為通用謂詞,它只關心是否有謂詞滿足搜索要求.SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName='$_POST[select]')SELECT *,* FROM tb_demo067 AS a WHERE idANY 大于子查詢中的某個值 >=ANY 大于等于子查詢中的某個值 ANY 不等于子查詢中的某個值 >ALL 大于子查詢中的所有值 >=ALL 大于等于子查詢中的所有值 ALL 不等于子查詢中的所有值七.使用子查詢作派生的表在實際項目開發過程中經常用到從一個信息較為完善的表中派生出一個只含有幾個關鍵字段的信息表,通過子查詢就可以來實現這一目標,如SELECT *,*e,*,*h FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people注:子查詢應遵循以下規則:(1)由比較運算符引入的內層子查詢只包含一個表達式或列名,在外層語句中的WHERE子句內命名的列必須與內層子查詢命名的列兼容(2)由不可更改的比較運算符引入的子查詢(比較運算符后面不跟關鍵字ANY或ALL)不包括GROUP BY 或 HAVING子句,除非預先確定了成組或單個的值(3)用EXISTS引入的SELECT列表一般都由*組成,不必指定列名(4)子查詢不能在內部處理其結果八使用子查詢作表達式SELECT (SELECT AVG(chinese)FROM tb_demo071),(SELECT AVG(english)FROM tb_demo071),(SELECT AVG(math)FROM tb_demo071) FROM tb_demo071注:在使用子查詢時最好為列表項取個別名,這樣可以方便用戶在使用mysql_fetch_array()函數時為表項賦值,如SELECT (SELECT AVG(chinese) FROM tb_demo071) AS yuwen ,(SELECT AVG(english) FROM tb_demo071) AS yingyu,(SELECT AVG(math) FROM tb_demo071) AS shuxue FROM tb_demo071九使用子查詢關聯數據SELECT * FROM tb_demo072_student WHERE id=(SELECT id FROM tb_demo072_class WHERE className = '$_POST[text]')十多。
在mysql 條件查詢where
mysql中的where如果有多個條件的話用and連接。
如,student表中有如下數據:
現在要查,sex為男,age為20的那些數據,可用如下語句:
select * from student where sex='男' and age=20;
結果截圖:
轉載請注明出處華閱文章網 » mysqlwhereand語句