SQL学习笔记2:运算符、函数与子查询

作者:xxw9485
时间:2018/1/23
来源:W3Cschool的SQL微课


WHERE 语句

WHERE 语句

WHERE 子句用于提取那些满足指定标准的记录。语法如下:

SELECT column_list 
FROM table_name
WHERE condition;

下面的 SQL 语句从 “customers” 表中选择 ID 等于 “6” 的记录:

SELECT * FROM customers 
WHERE ID = 6;
SQL 运算符

比较运算符和逻辑运算符在 WHERE 子句中用于筛选要选择的数据。
WHERE 子句中可以使用以下运算符:

运算符描述
=等于
<>不等于,等价于!=
>大于
<小于
=
大于等于
<=小于等于
between在某个范围内
like搜索某种模式的值
in指定针对某个列的多个可能值

例:下面的 SQL 语句列出了 ID 不等于 “8” 的所有记录。

SELECT * FROM customers
WHERE ID <> 8;
BETWEEN 运算符

BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。语法如下:

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

例:下面的 SQL 语句选择 ID 介于 2 和 6 之间的所有记录:

SELECT * FROM customers 
WHERE ID BETWEEN 2 AND 6;
文本值

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
例:下面的 SQL 语句选择城市等于 “New York” 的所有记录。

SELECT ID, FirstName, LastName, City 
FROM customers
WHERE City = 'New York';

AND,OR 运算符

逻辑运算符

逻辑运算符可用于组合两个布尔值,并返回 true,false 或 null 的结果。
包括以下运算符:

运算符描述
and如果两个表达式结果都为 true,则为 true
or如果任一表达式结果为 true,则为 true
in如果操作数等于表达式列表之一,则为 true
not如果表达式结果为 true,则返回 false;否则如果表达式的结果为 false,则返回 true。

- 如果要选择满足所有给定条件的行,请使用逻辑运算符 AND。
例:下面的 SQL 语句从 “customers” 表中选择年龄大于等于 “20” 且小于等于 “30” 的所有记录:

SELECT ID, FirstName, LastName, Age
FROM customers
WHERE Age >= 20 AND Age <= 30;
OR 运算符
  • 如果要选择满足至少一个给定条件的行,则可以使用逻辑 “OR” 运算符。
    例:下面的 SQL 语句从 “customers” 表中选择城市为 “New York” 或者 “Los Angeles” 的所有客户:
SELECT * FROM customers 
WHERE City = 'New York' OR City = 'Los Angeles';
结合 AND & OR
  • 如果结合这些条件,则使用圆括号来组成复杂的表达式。
    例:下面的 SQL 语句从 “customers” 表中选择城市为 “Chicago” 且年龄为 “25” 或 “28” 的所有客户:
SELECT * FROM customers
WHERE City = 'Chicago'
AND (Age=25 OR Age=28);

IN,NOT IN 运算符

IN 运算符
  • 如果你需要比较具有多个值的列时,可以使用 IN 运算符。
    例:需要选择来自纽约,洛杉矶和芝加哥的所有客户。
SELECT * FROM customers 
WHERE City IN ('New York', 'Los Angeles', 'Chicago');
#上面等价于下面
SELECT * FROM customers 
WHERE City = 'New York'
OR City = 'Los Angeles'
OR City = 'Chicago';
NOT IN 运算符

NOT IN 运算符允许你从结果集中排除特定值的列表。
- 如果我们在之前的查询中的 IN 之前添加 NOT 关键字,那么居住在这些城市的客户将被排除在外:

SELECT * FROM customers 
WHERE City NOT IN ('New York', 'Los Angeles', 'Chicago');

自定义列

CONCAT() 函数

CONCAT() 函数用于连接两个或多个文本值,并返回连接字符串。
例:我们将 FirstName 与 City 连接起来,用逗号分隔:

SELECT CONCAT(FirstName, ', ' , City) FROM customers;

输出结果为:

CONCAT(FirstName, ‘, ’ , City)
John, New York
David, Los Angeles
AS 关键字

使用 AS 关键字可以自定义列的名称。例:

SELECT CONCAT(FirstName,', ', City) AS new_column 
FROM customers;

输出结果为:

new_column
John, New York
David, Los Angeles
算术运算符

算术运算符对数值操作数执行算术运算。算术运算符包括加法(+),减法(-),乘法(*)和除法(/)。
例:为每位员工的工资增加 500,并选取结果。

SELECT ID, FirstName, LastName, Salary+500 AS Salary
FROM employees;

函数

UPPER() 函数

UPPER() 函数将指定字符串中的所有字母转换为大写。
LOWER() 函数将字符串转换为小写。
例:下面的 SQL 语句将所有 “LastName” 转换为大写:

SELECT FirstName, UPPER(LastName) AS LastName 
FROM employees;

注:如果字符串中的字符不是字母,则此函数对它们没有影响。

SQRT() 和 AVG() 函数

SQRT() 函数返回参数中给定值的平方根。
例:下面的 SQL 语句显示计算每个员工工资的平方根:

SELECT Salary, SQRT(Salary) 
FROM employees;

类似地,AVG() 函数返回数值列的平均值:

SELECT AVG(Salary) FROM employees;
SUM() 函数

SUM() 函数返回数值列的总数。
例:我们要获取 employees 表中所有工资的总和:

SELECT SUM(Salary) FROM employees;

子查询

子查询

当一个查询是另一个查询的条件时,称之为子查询。
例:我们想要知道所有工资大于平均值的员工名单。
- 首先,我们计算出所有工资的平均值:

SELECT AVG(Salary) FROM employees;
  • 然后再使用 WHERE 来列出大于该平均值的工资。
SELECT FirstName, Salary FROM employees 
WHERE  Salary > 3450
ORDER BY Salary DESC;

写成子查询形式为:

SELECT FirstName, Salary FROM employees 
WHERE  Salary > (SELECT AVG(Salary) FROM employees) 
ORDER BY Salary DESC;

注:
1. DESC 关键字按降序排列结果,ASC 关键字按升序排列结果。
1. 将子查询括在括号中,且子查询结尾处没有分号“;”。

LIKE 和 MIN

LIKE 操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。语法为:

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

SQL 的模式匹配允许你使用 “_” 匹配任何单个字符,而使用 “%” 匹配任意数目字符(包括零个字符)。
- 例:下面的 SQL 语句选择 FirstName 以字母 “D” 开头的所有员工:

SELECT * FROM employees 
WHERE FirstName LIKE 'D%';
  • 例:下面的 SQL 语句选择 LastName 以 “s” 为结尾的所有员工:
SELECT * FROM employees 
WHERE LastName LIKE '%s';
MIN() 函数

MIN() 函数返回指定列的最小值。
例如,我们想要知道员工的最低工资时,可以通过下面语句查询:

SELECT MIN(Salary) AS Salary FROM employees;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值