【14】where字句
阿新 • • 發佈:2018-01-01
where子句 篩選條件 exe [] where 如果 from 左值 per
1.簡介
-> where緊跟在from後執行,用來初選
-> 語法
where 條件
-> 註意
-> where子句對數據源直接進行篩選
-> 篩選可以是表達式、判斷、匹配、範圍和空
2.篩選條件為表達式
將from子句中的數據源字段直接運算
例:
一張記錄期中成績與期末成績的表,需要查詢出考試及格的人,最終分數期中成績占30%,期末成績占70%,最終分數大於60分算及格。
-- 創建表 CREATE TABLE ScoreTbl ( scoreId INT IDENTITY ( 1, 1 ) NOT NULL PRIMARY KEY, stuId INT NOT NULL, scoreNum INT CHECK ( scoreNum >= 0 AND scoreNum <= 100 ), scoreLast INT CHECK ( scoreLast >= 0 AND scoreLast <= 100 ), ); -- 插入數據 INSERT INTO ScoreTbl ( stuId, scoreNum, scoreLast ) VALUES ( 1, 60, 55 ), ( 2, 75, 40 ), ( 3, 95, 85 ), ( 5, 86, 75 ), ( 6, 90, 95 ); INSERT INTOScoreTbl ( stuId, scoreNum, scoreLast ) VALUES ( 7, 45, 99 ); -- 查詢及格的人 SELECT *, scoreNum *.3+ scoreLast *.7 FROM ScoreTbl WHERE scoreNum *.3+ scoreLast *.7>= 60;
3.判斷
-> 使用=、<>、>、>=、<、<=進行判斷
-> 多個條件使用and和or連接
-> 否定使用not
-> 優先級為
not > and > or
例:查出總成績及格,但是期中沒有及格的學生
SELECT * , scoreNum *.3 + scoreLast *.7 FROM ScoreTbl WHERE scoreNum *.3 + scoreLast *.7 >= 60 AND scoreNum < 60;
4.模糊匹配
-> 有時需要查詢姓”牛”的人
-> 語法
使用”_”表示一個任意字符
使用”%”表示任意個任意字符
判斷使用like,而非=
例:找出名字叫亮亮的人,找出名字中包含虎的人
-- 叫紀明X SELECT * FROM TestDataBase..Student WHERE stuName LIKE ‘紀明%‘; INSERT INTO TestDataBase..Student ( stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, classId ) VALUES ( ‘紀明閃閃‘, ‘m‘, ‘1990-1-1 00:00:00‘, ‘2014-7-7 17:04:52.123‘, N‘上帝細節128號‘, ‘[email protected]‘, ‘12345678909‘, 2 ); ----------------------- -- [] [a-z] [^a-z] -- stuName like ‘楊[中重]科‘ -- 如果要匹配 asp_net -- bookName like ‘asp[_]net‘ -- stuName like ‘%虎%‘
5.範圍
-> 判斷一個字段的取值範圍
例:
查詢年齡是19到26歲的女生
查詢年齡是19、21、25和26歲的女生
-> 可以使用between 左值 and 右值
-> 可以使用in(散列可選值)
-- age 在 19 到 26 歲 -- datediff(year, 開始的時間, 結束的時間) SELECT datediff( YEAR, stuBirthdate, CURRENT_TIMESTAMP ),* FROM TestDataBase..Student WHERE stuSex = ‘f‘ AND -- datediff(YEAR, stuBirthdate, CURRENT_TIMESTAMP) between 19 and 26; datediff( YEAR, stuBirthdate, CURRENT_TIMESTAMP ) IN ( 19, 26, 23 );
6.空值處理*
-> 在表中的數據,有些是允許為空的,那麽查詢出性別為空的人怎麽辦呢?
select * from Person where sex=null嗎?
-> 數據庫中對於空的判斷使用is
select * from Person where sex is null
-> 有時得到的數據中不希望有空,可以使用isnull函數
-- 空值處理 -------------------------SELECT * FROM ConstraintExercise.StuInfo2 WHERE stuAge <> NULL; -- SQL Server 采用三值邏輯 真 假 不知道 -- 判斷為空使用 is null 或 is not null 再或 not(... is null) SELECT * FROM ConstraintExercise.StuInfo2 WHERE stuAge IS NOT NULL; -- isnull(字段, 數據) SELECT *, isnull( stuAge, - 1 ) FROM ConstraintExercise.StuInfo2;
【14】where字句