- Select Distinct子句
SELECT DISTINCT 子句检索指定列列表中的唯一不同值,换句话说,它从结果集中删除列中的重复值。
DISTINCT 子句将所有 NULL 值视为相同的值
语法如下所示:
A. DISTINCT一个字段的示例
以下语句返回 customers 表中所有客户所在的所有城市:
B. DISTINCT多列示例
以下语句查找所有客户的不同城市和州。
C. DISTINCT带有null值示例
以下示例查找客户的不同(唯一)电话号码: - SQL Server WHERE子句
要从表中获取满足一行或多个条件的行,请使用 WHERE 子句,如下所示:
SELECT DISTINCT
column_name1,
column_name2 ,
…
FROM
table_name;
SELECT
city
FROM
sales.customers
ORDER BY
city;
SELECT DISTINCT
city,
state
FROM
sales.customers
SELECT DISTINCT
phone
FROM
sales.customers
ORDER BY
phone;
在 WHERE 子句中,指定搜索条件以过滤 FROM 子句返回的行。 WHERE 子句仅返回导致搜索条件计算为
TRUE 的行。搜索条件是逻辑表达式
或多个逻辑表达式的组合
通过使用简单的相等来查找行
以下语句检索类别为 id 为 1 的所有产品:
3. AND 查找满足两个条件的行
AND 是一个逻辑运算符,用于组合两个布尔表达式
以下示例返回满足两个条件的产品: category_id 为 1 , model_year 为 2018 。
它使用逻辑运算符 AND 来组合这两个条件。
SELECT
select_list
FROM
table_name
WHERE
search_condition;
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
category_id = 1
ORDER BY
list_price DESC;
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
category_id = 1 AND model_year = 2018
ORDER BY
list_price DESC;
- (>,=,<)使用比较运算符查找行
以下语句查找价格大于 300 且型号为 2018 的产品。 - OR 查找满足两个条件中的任何一个的行
OR 是一个逻辑运算符,用于组合两个布尔表达式
在语句中使用多个逻辑运算符时,SQL Server将在 AND 运算符之后计算 OR 运算符。 但是,可以使用括
号更改评估顺序。
A. 使用OR运算符示例
以下查询查找价格大于 3000 或型号为 2018 的产品。满足其中一个条件的任何产品都包含在结果集中。
B. 使用OR和AND运算符示例
请考虑以下示例:
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
list_price > 300 AND model_year = 2018
ORDER BY
list_price DESC;
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
list_price > 3000 OR model_year = 2018
ORDER BY
list_price DESC;
在这个例子中,使用了 OR 和 AND 运算符。 与往常一样,SQL Server首先评估 AND 运算符。 因此,查询
返回品牌编号( brand_id )为 4 且
价格大于 100 的产品或品牌编号( brand_id )为 3 的产品。
要查找品牌编号( brand_id )为 3 或 4 且价格大于 100 的产品,请使用括号,如以下查询所示:
6. Between查找具有两个值之间的值的行
BETWEEN 运算符是一个逻辑运算符,用于指定要测试值的范围。
以下是 BETWEEN 运算符的语法:
可以使用大于或等于( >= )且小于或等于( <= )来替换 BETWEEN 运算符,如下所示
使用 BETWEEN 运算符的条件比使用比较运算符 >= , <= 和逻辑运算符AND的条件更具可读性。
要取消 BETWEEN 运算符的结果,请使用 NOT BETWEEN 运算符,如下所示:
A. SQL Server BETWEEN两个数字示例
SELECT
product_name,
brand_id,
list_price
FROM
production.products
WHERE
brand_id = 3
OR brand_id = 4
AND list_price > 100
ORDER BY
brand_id DESC;
SELECT
product_name,
brand_id,
list_price
FROM
production.products
WHERE
(brand_id = 3 OR brand_id = 4)
AND list_price > 100
ORDER BY
brand_id;
1 column | expression BETWEEN start_expression AND end_expression
column | expression <= end_expression AND column | expression >=
start_expression
1
1 column | expression NOT BETWEEN start_expression AND end_expresion
以下语句查找价格介于 1899 和 1999.99 之间的产品:
B. SQL Server BETWEEN两个日期示例
以下查询查找客户在2017年1月15日至2017年1月17日期间下的订单:
7. IN 查找值列表中具有值的行
IN 运算符是一个逻辑运算符
IN 运算符等效于多个 OR 运算符,因此,以下语法是等效的:
要取消 IN 运算符,请使用 NOT IN 运算符,如下所示:
以下示例使用 IN 运算符查找价格为 299.99 或 466.99 或 489.99 的产品。
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
list_price BETWEEN 1899.00 AND 1999.99
ORDER BY
list_price DESC;
SELECT
order_id,
customer_id,
order_date,
order_status
FROM
sales.orders
WHERE
order_date BETWEEN ‘20170115’ AND ‘20170117’
ORDER BY
order_date;
column IN (v1, v2, v3)
column = v1 OR column = v2 OR column = v3
1 column | expression NOT IN ( v1, v2, v3, …)
8. Like 查找其值包含字符串的行
SQL Server LIKE 运算符的语法:
pattern
模式是要在列或表达式中搜索的字符序列。它可以包含以下有效通配符:
通配符百分比( % ):任何零个或多个字符的字符串。
下划线( _ )通配符:任何单个字符。
[list of characters] 通配符:指定集合中的任何单个字符。
[character-character] :指定范围内的任何单个字符。
[^] :不在列表或范围内的任何单个字符。
通配符使 LIKE 运算符比等于( = )和不等于( != )字符串比较运算符更灵活。
转义符
转义字符指示 LIKE 运算符将通配符视为常规字符。转义字符没有默认值,必须仅计算为一个字
符。
A. %(百分比)通配符
查找姓氏( last_name )以字母 z 开头的客户:
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
list_price IN (299.99, 369.99, 489.99)
ORDER BY
list_price DESC;
SQL
…
where
column | expression [NOT] LIKE pattern [ESCAPE escape_character]
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers
WHERE
last_name LIKE ‘z%’
ORDER BY
first_name;
返回姓氏( last_name )以字符串 er 结尾的客户信息:
以下示例使用 LIKE 运算符查找名称中包含字符串 Cruiser 的产品:
B. _(下划线)通配符
下划线代表单个字符。 例如,以下语句返回第二个字符为字母 u 的客户:
C. [list of characters]通配符
带有字符列表的方括号,例如: [ABC] 表示单个字符,必须是列表中指定的字符之一。
例如,以下查询返回姓氏( last_name )中第一个字符为 Y 或 Z 的客户:
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers
WHERE
last_name LIKE ‘%er’
ORDER BY
first_name;
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
product_name LIKE ‘%Cruiser%’
ORDER BY
list_price;
SQL
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers
WHERE
last_name LIKE ‘_u%’
ORDER BY
first_name;
D. [character-character]通配符
具有字符范围的方括号,例如 [A-C] 表示必须在指定范围内的单个字符。
例如,以下查询查找客户,其中姓氏中的第一个字符是范围 A 到 C 中的字母:
E. [[^]]通配符
带有插入符号( ^ )后跟范围,例如 [A-C] 或字符列表,例如 [^ABC] 的方括号表示不在指定范围或字符列
表中的单个字符。
例如,以下查询返回姓氏中的第一个字符不是范围 A 到 X 中的字母的客户信息:
F. NOT LIKE运算符
以下示例使用 NOT LIKE 运算符查找名字中第一个字符不是字母 A 的客户:
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers
WHERE
last_name LIKE ‘[YZ]%’
ORDER BY
last_name;
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers
WHERE
last_name LIKE ‘[A-C]%’
ORDER BY
first_name;
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers
WHERE
last_name LIKE ‘[^A-X]%’
ORDER BY
last_name