Ⅰ sql 2008 怎麼樣匹配子查詢中查出的多列的值
SELECT *
FROM USERDL a,
( SELECT JZMM, ZDDL, SFDL FROM USERDL WHERE YHM = '000' ) b
where a.jzmm=b.jzmm
and a.zddl=b.zddl
and z.sfdl=b.sfdl
即使在oracle中也不建議用那種寫法,可讀性太差
這個例子
直接
SELECT *
FROM USERDL
WHERE YHM = '000'
就可以了
Ⅱ SQL中多值匹配多值,並按匹配個數排序。
這道題不難,做出的結果是
name
B
A
C
代碼如下:
selecta.namefromAa,Bbwherea.test1=b.test2GROUPBYa.nameorderbyCOUNT(a.name)desc
看看是不是你要的吧!
Ⅲ 如何用sql將兩張表的欄位名和列值進行匹配
select B.*,X.A1 from
(select 'A1' A1,A1, 'A2' A2,A2, 'A3' A3,A3 from A表) X,B表
where X.A1=B.A1
把括弧內的查詢語句作為一個表,表名是X
Ⅳ MYSQL的like語句怎麼檢索多個列裡面的值
mysql
like
語法
like
運算符用於
where
表達式中,以搜索匹配欄位中的指定內容,語法如下:
where
column
like
pattern
where
column
not
like
pattern
在
like
前面加上
not
運算符時,表示與
like
相反的意思,即選擇
column
不包含
pattern
的數據記錄。
like
通常與通配符
%
一起使用,%
表示通配
pattern
中未出現的內容。而不加通配符
%
的
like
語法,表示精確匹配,其實際效果等同於
=
等於運算符。
mysql
like
大小寫
mysql
like
匹配字元時,默認是不區分大小寫的,如果需要在匹配的時候區分大小寫,可以加入
binary
操作符:
select
*
from
user
where
username
like
binary
'%azz%'select
*
from
user
where
username
like
binary
'%azz%'
binary
操作符表示按照二進制進行比較,因此加上該操作符後,便可以嚴格區分大小寫,因此以上兩條
sql
查詢出來的內容是不同的。
mysql
like
中文字元匹配
由於數據存儲編碼問題,在某些情況下,mysql
進行
like
搜索返回的數據中除了符合要求的數據外,往往還會返回許多不相乾的數據。這時候也需要在
like
後面加上
binary
操作符以進行二進制比較:
select
*
from
user
where
username
like
binary
'%小%'
提示
當在
like
匹配時加上
binary
操作符後,則會嚴格區分英文大小寫。因此當檢索的內容是中英文混合且需要忽略英文大小寫的時候,就會遇到麻煩。為解決此問題,需要引入
mysql
中的
upper()
與
concat()
函數:
upper():將英文字元串變大寫,同ucase()
concat():將多個字元串連接成一個字元串
語法如下:
upper(str)
concat(str1,str2,...)
因此當我們要進行中英文混合匹配檢索且要忽略英文大小寫時,可以使用如下例所示的
sql
語句:
select
*
from
username
where
upper(username)
like
binary
concatt('%',upper('a中文b'),'%')
在該
sql
中,將搜索的欄位及檢索的內容都進行大寫轉換後,再進行二進制匹配。
like
運算符的效率
like
運算符要對欄位數據進行逐一掃描匹配,實際執行的效率是較差的,哪怕該欄位已經建有索引(a%
這種方式會用到索引)。當數據量較大時,要盡可能的減少
like
運算符的使用,也沒有太多優化的餘地。
Ⅳ SQL檢索多個欄位匹配一個值
根據你的描述和需求,我建議你將Table2先進行一下拆分,將其做一下行列轉換處理。步驟如下:
1、創建一個臨時表,表包含兩列,即Code和Num,屬性同Table2的Code*和Num*列
2、將Table2的數據轉移到該臨時表中,規則如下:
INSERT INTO TMP_TABLE2
(CODE, NUM)
SELECT CODE1, NUM1
FROM TABLE2
UNION ALL
SELECT CODE2, NUM2
FROM TABLE2
UNION ALL
SELECT CODE3, NUM3
FROM TABLE2
...
UNION ALL
SELECT CODE50, NUM50 FROM TABLE2
3、使用臨時表和Table1進行查詢
SELECT A.NUM FROM TMP_TABLE2 A, TABLE1 B WHERE B.CODE = A.CODE
這個操作的唯一工作量就是將上述第二部語句中省略的4到49號列補齊即可
Ⅵ SQL中的Group By的查詢過程多列分組的查詢過程是怎樣的
Group By子句
Group By子句可以將表的行劃分為不同的組。分別總結每個組,這樣就可以控制想要看見的詳細信息的級別。
語法:
[ Group By [ ALL ] Group_By_expression[ ,...n ]
[ WITH { CUBE | ROLLUP } ] ]
參數說明:
ALL:包含所有組和結果集,甚至包含那些任何行都不滿足WHERE子句指定的搜索條件的組和結果集。如果指定了ALL,將對組中不滿足搜索條件的匯總列返回空值。不能用CUBE或ROLLUP運算符指定ALL。如果訪問遠程表的查詢中有WHERE子句,則不支持Group By ALL操作。
Group_By_expression:對其執行分組的表達式。Group_By_expression也稱為分組列。Group_By_expression可以是列或引用列的非聚合表達式。在選擇列表內定義的列的別名不能用於指定分組列。對於不包含CUBE或ROLLUP的Group By子句,Group_By_ expression的項數受查詢所涉及的Group By列的大小、聚合列和聚合值的限制。該限制從8060位元組的限制開始,對保存中間查詢結果所需的中間級工作表有8060位元組的限制。如果指定了CUBE或ROLLUP,則最多隻能有10個分組表達式。
CUBE:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。在結果集內返回每個可能的組和子組組合的Group By匯總行。Group By匯總行在結果中顯示為NULL,但可用來表示所有值。使用GroupING函數確定結果集內的空值是否是Group By匯總值。結果集內的匯總行數取決於Group By子句內包含的列數。Group By子句中的每個操作數(列)綁定在分組NULL下,並且分組適用於所有其他操作數(列)。由於CUBE返回每個可能的組和子組組合,因此,不論指定分組列所使用的是什麼順序,行數都相同。
ROLLUP:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。按層次結構順序,從組內的最低級別到最高級別匯總組。組的層次結構取決於指定分組列時所使用的順序。更改分組列的順序會影響在結果集內生成的行數。
使用Group By子句的注意事項。
(1)在SELECT子句的欄位列表中,除了聚集函數外,其他所出現的欄位一定要在Group By子句中有定義才行。例如「Group By A,B」,那麼「SELECT SUM(A),C」就有問題,因為C不在Group By中,但是SUM(A)是可以的。
(2)SELECT子句的欄位列表中不一定要有聚集函數,但至少要用到Group By子句列表中的一個項目。例如「Group By A,B,C」,則「SELECT A」是可以的。
(3)在SQL Server中text、ntext和image數據類型的欄位不能作為Group By子句的分組依據。
(4)Group By子句不能使用欄位別名。
1.按單列進行分組
Group By子句可以基於指定某一列的值將數據集合劃分為多個分組,同一組內所有記錄在分組屬性上具有相同值。
示例:
把「student」表按照「性別」這個單列進行分組。在查詢分析器中輸入的SQL語句如下:
use student
select 性別
from student
Group By 性別
但仍然要強調SELECT子句必須與Group By後的子句或者是分組函數列相一致。
例如,由於下列查詢中「姓名」列既不包含在Group By子句中,也不包含在分組函數中,所以是錯誤的。錯誤的SQL語句如下:
use student select 姓名,性別 from student Group By 性別
例如,在「grade」表中,按「學期」分組查詢。SQL語句如下:
use studnet select 學期 from grade Group By 學期
2.按多列進行分組
Group By子句可以基於指定多列的值將數據集合劃分為多個分組。
示例:
在「student」表中,按照「性別」和「年齡」列進行分組。在查詢分析中輸入的SQL語句如下:
use student
select 性別,年齡
from student
Group By 性別,年齡
在「student」表中,首先按照「性別」分組,然後再按照「年齡」分組。
再舉一個例子,例如,在「grade」表中,按照「學號」和「課程代號」列進行分組。SQL語句如下:
use student
select 學號,課程代號 from grade Group By 學號,課程代號
按多列進行分組時有NULL組的是如何處理的。當表按多列進行分組時有NULL組,這時NULL被作為一個特定值處理,就像其他任何值一樣。也就是說,如果在某個分組列中存在兩個NULL,則按它們有相同的值那樣處理,並將它們放在相同的組中。
示例:
在「grade」表中,按「學期」和「課程代號」列進行分組。在查詢分析器中輸入的SQL語句如下:
use student
select 學期,課程代號
from grade
Group By 學期,課程代號
3.與聚集函數一起使用
Group By子句是經常與聚集函數一起使用。如果SELECT子句中包含聚集函數,則計算每組的匯總值,當用戶指定Group By時,選擇列表中任一非聚集表達式內的所有列都應包含在Group By列表中,或者Group By表達式必須與選擇列表表達式完全匹配。
示例:
在「student」表中,分別求男女生的平均年齡。在查詢分析器中輸入的SQL語句如下:
use student
select 性別,avg(年齡) as 平均年齡
from student
Group By 性別
例如,在「student」表中,分別求有多少個男生和女生。SQL語句如下:
use student
select 性別,count(性別) as 人數 from student Group By 性別
說明:關於聚合函數的詳細講解可參閱9.2.1節。
4.與HAVING子句一起使用
HAVING子句對Group By子句選擇出來的結果進行再次篩選,最後輸出符合HAVING子句中條件的記錄。HAVING子句的語法與WHERE子句的語法相類似,惟一不同的是HAVING子句中可以包含聚合函數。
語法:
[HAVING
Ⅶ SQL語句查詢條件一個欄位=多個值怎麼寫
工具/材料:Management Studio。
1、首先在桌面上,點擊「Management Studio」圖標。
Ⅷ sql匹配所有值
sql匹配所有值參考以下方法
以下SQL查詢,該查詢選擇與列表(9,10)中的任何值匹配的任何行:
SELECT
r.id, r.title,
u.name as 'Created By',
c.name as 'Category',
Ⅸ sql查詢一張表多列對應另一張表的值
恩,可以實現的。
簡單的做法是寫倆sql,
SELECT name FROM SysColumns WHERE id=Object_Id(『a表')
這個是搜所有欄位了,當然你也可以對這個name就是欄位名字做限制,比如 like 『1%』這種的。
然後得到的字元串,程序里拼出來=s
這樣 select +『s』 from b 表 就行了。。
如果單純想sql實現。那麼需要寫個存儲過程,在里頭把字元串拼出來。然後返回搜索b表的數據集就可以了。
希望可以幫到你。
Ⅹ SQL多值匹配問題
沒辦法一句話寫出來,只能定義一個函數,在函數中計算兩個欄位的匹配度(因為是函數,你怎麼寫都可以)。然後在選擇的時候做個Max或order by。