1. 程式人生 > >【14】where字句

【14】where字句

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 INTO
ScoreTbl ( 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字句