2015-11-02 49 views
0

我想找出使用​​select聲明表中的哪些列共享相似的信息。SQL會在語句之間使用這個改進嗎?

例如:Classes表中有ClassID, ClassName, ClassCode, ClassDescription列。

這是我已經轉入的SQL類的一部分。問題是「哪些類是英語系的一部分?」

我用這個Select聲明:

SELECT * 
FROM Classes 
WHERE ClassName LIKE "English%" OR ClassCode LIKE "ENG%" 

授予我們只有在此數據庫中輸入一個實際的英語課程,最終的結果是它執行罰款,並顯示一切只是英語課。自從我們在數據庫中填入其他非英語課程後,我認爲這是成功的。

無論如何,我被告知我應該使用BETWEEN語句。

我只是坐在這裏認爲他們都會做我需要他們做的事情嗎?

我使用SQL Server 2014

+0

我不會建議使用BETWEEN進行文本比較(如果這樣做甚至可以),但是我會在比較的列中設置LOWER或UPPER,以使其不區分大小寫(除非你有阻止不同情況的限制)。你確定他們不是指中綴比較('LIKE'%English%'',注意第一個'%')嗎? – jpmc26

+0

此外,請將你的第二個問題分開。 – jpmc26

回答

-1
Select * FROM Classes 
    Where ClassName LIKE "%English%" 
+0

@samanth不使用'*'它會導致SQLInjection – Webruster

+5

@Webruster它沒有這樣的事情。 'SELECT *'是不好的做法,因爲它使數據庫不得不查找表定義並枚舉列。它還鼓勵開發者懶惰,不要求他們需要的數據,導致數據庫,網絡和應用程序必須獲取並存儲永遠不會使用的數據。 –

+0

@Webruster SQL注入是指某人提供包含SQL查詢的輸入,並且由於不恰當的SQL語句構造(例如,執行了'sql =「SELECT * FROM my_table WHERE name ='」+ requested_name + 「'」'和用戶輸入'name'; SELECT * FROM my_table WHERE'a'='a')。 SQL注入源於糟糕或缺乏輸入消毒;使用'SELECT *'與它無關。儘管如此,培根還是撞上了頭部。數據庫可以使用更少的列更好地優化;僅索引掃描就是很好的例子。 – jpmc26

1

沒有,BETWEEN很可能是這裏一個壞主意。 BETWEEN不允許使用通配符,也不會在我使用的任何RDBMS中進行任何模式匹配。所以你不得不說BETWEEN 'ENG' AND 'English'。除此之外不會返回「英語I」(這將在排序列表中的「英語」之後)。

它也可能包含諸如'Engineering'或'Engaging Artistry'之類的內容,但這也是您現有查詢的一個弱點,因爲LIKE'ENG%'與那些相匹配。

如果您恰好使用區分大小寫的排序規則,則會添加複雜性的全新維度。你的BETWEEN陳述變得更加混亂。只知道大寫字母通常在小寫字母之前,所以'雕刻我'將包括在內,但'雕刻我'不會。另外,'eng'不包括在內。請注意,不區分大小寫的排序規則是默認排序規則。

而且什麼區別一個表 一列

column_name ='' 

column_name IS NULL 

你不理解一個空字符串之間的區別尋找空值時和null。

顯式爲空字符串。它說:「這個字段有一個已知的值,它是一個零長度的字符串。」

空字符串不精確。它意味着「未知」。這可能意味着「未要求此值」或「此值不可用」或「此值尚未確定」或「此值對此記錄無意義」。

「這個人的中間名是什麼?」

「他沒有,他的出生證上沒有中間名。「 - >空字符串

」我不知道。他從來不告訴我,我沒有任何出生或身份記錄「 - > NULL

注意,Oracle,由於向後兼容性,treats empty strings as NULLs這是明確反對ANSI SQL,但由於甲骨文是。舊的,這就是它總是如此工作,這是如何繼續工作

另一種看待它的方式是我傾向於使用數字的例子0和NULL之間的區別是有一個銀行帳戶與$ 0的餘額並且根本沒有銀行賬戶

0

除非我們看到表格及其數據,否則沒有什麼可說的。儘管不使用之間。

其次首先找出哪列不是空的設計。舉例來說,ClassName不能爲null,那麼使用ClassCode LIKE「ENG%」就沒有用,只是ClassName LIKE「English%」就夠了,反之亦然也是如此。

第三,你應該在這兩個column.for例如

類名LIKE 「英語%」 或ClassCode LIKE 「英語%」

看出區別使用相同的參數。