简单表达式计算符号

> < = != <>(不等于) >= <=

DISTINCT查重

  1. SELECT
  2. distinct department_id
  3. FROM
  4. employees;

concat
将所要显示连接列的字符串

  1. SELECT
  2. concat(last_name,first_name)
  3. from
  4. employees

image.png

IFNULL(判断值,返回值)
如果为null,返回指定值

  1. select
  2. DISTINCT IFNULL(commission_pct,0),
  3. commission_pct
  4. from
  5. employees

image.png

between and
使用 BETWEEN 运算来显示在一个区间内的值

  1. SELECT last_name, salary
  2. FROM employees
  3. WHERE salary BETWEEN 2500 AND 3500;

LIKE
• 使用 LIKE 运算选择类似的值
• 选择条件可以包含字符或数字:
% 代表零个或多个字符(任意个字符)
_ 代表一个字符

  1. SELECT last_name
  2. FROM employees
  3. WHERE last_name LIKE '_o%';

NULL
使用 IS (NOT) NULL 判断空值。

  1. select
  2. last_name,
  3. manager_id
  4. from
  5. employees
  6. where
  7. manager_id is null;

IN
使用 IN运算显示括号中有可能出现的值(类型要统一)。
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);

逻辑运算
AND
AND 要求并的关系为真。
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >=10000
AND job_id LIKE
‘%MAN%’;

OR
OR 要求或关系为真。
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE ‘%MAN%’;

NOT
指筛选掉指定的数据
SELECT last_name, job_id
FROM employees
WHERE job_id
NOT IN (‘IT_PROG’, ‘ST_CLERK’, ‘SA_REP’);

ORDER BY
order by
进行排序( desc降序,默认(不填或ASC)是升序)**

  1. select
  2. last_name,
  3. job_id,
  4. department_id,
  5. hiredate
  6. from
  7. employees
  8. order by
  9. hiredate desc;

按别名排序

  1. select
  2. last_name,
  3. job_id,
  4. department_id,
  5. hiredate date
  6. from
  7. employees
  8. order by
  9. date ;

多个列排序
• 按照ORDER BY 列表的顺序排序。

  1. SELECT last_name, department_id, salary
  2. FROM employees
  3. ORDER BY department_id, salary DESC;

可以使用不在SELECT 列表中的列排序。

分组函数:

分组函数作用于一组数据,并对一组数据返回一个值。
AVG()
COUNT()
MAX()
MIN()
SUM()

数值型数据使用AVGSUM函数**

  1. select
  2. job_id,
  3. avg(salary),
  4. max(salary),
  5. min(salary),
  6. sum(salary)
  7. from
  8. employees
  9. where
  10. job_id like '%REP%';

image.png
MIN(最小值)和 MAX(最大值)函数
可以对任意数据类型的数据使用MIN和MAX函数

  1. select
  2. min(hiredate),
  3. max(hiredate)
  4. from
  5. employees;

COUNT(计数)函数

COUNT(*) 返回表中记录总数,适用任意数据类型。

  1. SELECT
  2. COUNT(*)
  3. FROM
  4. employees
  5. WHERE
  6. department_id=50;

image.png
COUNT(expr)返回expr不为空的记录总数

  1. SELECT
  2. COUNT(commission_pct)
  3. FROM
  4. employees
  5. WHERE
  6. department_id=50;

image.png

分组函数

GROUP BY
可以使用GROUP BY子语句将表中的数据分为若干组
WHRER 一定要放在FROM后面

在GROUP BY子句中包含多个列

  1. SELECT
  2. department_id dept_id,
  3. job_id,
  4. SUM(salary)
  5. FROM
  6. employees
  7. GROUP BY
  8. department_id,job_id;

HAVING 子句
使用HAVING过滤分组:
1、行已经被分组。
2、使用了组函数
3、满足HAVING子句中条件的分组将被显示

多表查询

什么是笛卡尔集?
笛卡尔集的列数为每个表的列数之和,笛卡尔集的行数为每个表的行数相乘。我们经常做的多表查询就是在笛卡尔集中通过筛选条件得出的数据,所以笛卡尔集是多表查询的基础。

Mysql 连接
使用连接在多个表中查询数据。
在 WHERE 子句中写入连接条件。
在表中有相同列时,在列名之前加上表名前缀

等值连接

  1. SELECT
  2. beauty.id,
  3. name,
  4. boyname
  5. from
  6. beauty,
  7. boys
  8. where
  9. beauty.boyfriend_id=boys.id;

表的别名
• 使用别名可以简化查询。
• 使用表名前缀可以提高执行效率。

  1. SELECT
  2. bt.id,
  3. name,
  4. boyname
  5. from
  6. beauty bt,
  7. boys b
  8. where
  9. bt.boyfriend_id=b.id;

连接 n个表,至少需要 n-1个连接条件。
例如:连接三个表,至少需要两个连接条件。
练习:查询出公司员工的 last_name, department_name, city