MySQL数据处理——查询

141 阅读4分钟

1 基础SELECT语句

SELECT             标识选择哪些列
FROM              标识从哪个表中选择

选择全部列(*)

    *                   选择全部列

SELECT *
FROM employees;

选择特定的列(SELECT )

SELECT 列名      选择特定的列

SELECT last_name
FROM employees;

列的别名(AS)

AS                     列的别名

"别名"可紧跟列名,也可以在列名和别名之间加入关键字**‘AS’**,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。

SELECT last_name "name",commission_pct comm
FROM employees;

字符串

  • 字符串可以是 SELECT 列表中的一个字符,数字,日期。
  • 日期和字符只能在单引号中出现。
  • 每当返回一行时,字符串被输出一次

显示表结构(DESCRIBE)

DESCRIBE          显示表结构

DESCRIBE employees

2 过滤和排序数据

过滤(WHERE)

WHERE            将不满足条件的行过滤掉

WHERE 子句紧随 FROM 子句

SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;

比较运算

操作符       含义

=               等于 (不是 ==)

>              大于

>=            大于、等于

<              小于

<=            小于、等于

<>            不等于 (也可以是 !=)

其它比较运算

BETWEEN ... AND ...      在两个值之间 (包含边界)

IN(set)      等于值列表中的一个

LIKE          模糊查询

IS NULL    空值

BETWEEN ... AND ... 在两个值之间 (包含边界)

SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;

IN  显示列表中的值

SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);

LIKE 选择类似的值

选择条件可以包含字符或数字:

  • % 代表零个或多个字符(任意个字符)

  • _ 代表一个字符

  • ‘%’和‘-’可以同时使用。

    SELECT first_nameFROM employeesWHERE first_name LIKE 'S%';

NULL

使用 IS (NOT) NULL **判断空值,**有NOT就是判断非空值

SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL;

逻辑运算

操作符       含义

AND         逻辑并

OR            逻辑或

NOT         逻辑否

排序(ORDER BY)

  • ASC(ascend): 升序

  • DESC(descend): 降序

  • ORDER BY 子句在SELECT语句的结尾

  • 没有标明的话默认为升序

    SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date DESC;

3 分组函数

分组函数作用于一组数据,并对一组数据返回一个值。

组函数类型

  • AVG()             平均值
  • COUNT()        计数
  • MAX()            最大值
  • MIN()             最小值
  • SUM()            合计

分组数据(GROUP BY)

可以使用GROUP BY子句将表中的数据分成若干组

在SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中。

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id;

包含在 GROUP BY 子句中的列不必包含在SELECT 列表中

SELECT AVG(salary)
FROM employees
GROUP BY department_id;

在GROUP BY子句中可以包含多个列

SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id ;

非法使用组函数

  • 不能在 WHERE 子句中使用组函数。
  • 可以在 HAVING 子句中使用组函数。

过滤分组(HAVING)

使用 HAVING 过滤分组:

  1. 行已经被分组。

  2. 使用了组函数。

  3. 满足HAVING 子句中条件的分组将被显示。

    SELECT department_id, MAX(salary) FROM employees GROUP BY department_id HAVING MAX(salary)>10000;

4 多表查询

Mysql 连接

使用连接在多个表中查询数据。

SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
  • 在 WHERE 子句中写入连接条件。
  • 在表中有相同列时,在列名之前加上表名前缀

等值连接

SELECT beauty.id,NAME,boyname FROM beauty ,boys 
WHERE beauty.`boyfriend_id`=boys.id;

区分重复的列名

  • 使用表名前缀在多个表中区分相同的列。
  • 在不同表中具有相同列名的列可以用表的别名加以区分。
  • 如果使用了表别名,则在select语句中需要使用表别名代替表名
  • 表别名最多支持32个字符长度,但建议越少越好

表的别名 

  • 使用别名可以简化查询。

  • 使用表名前缀可以提高执行效率。

    SELECT bt.id,NAME,boyname FROM beauty bt,boys b; WHERE bt.boyfriend_id=b.id;

连接多个表 

连接 n个表,至少需要 n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。 

SQL99:使用ON 子句创建连接

  • 自然连接中是以具有相同名字的列为连接条件的。
  • 可以使用 ON 子句指定额外的连接条件。
  • 这个连接条件是与其它条件分开的。
  • ON 子句使语句具有更高的易读性。

分类:

  1. 内连接 [inner] join on
  2. 外连接
  • 左外连接 left [outer] join on
  • 右外连接 right [outer] join on

ON 子句

SELECT bt.id,NAME,boyname 
FROM beauty bt
Inner join boys b
On bt.`boyfriend_id`=b.id;

使用 ON 子句创建多表连接

SELECT employee_id, city, department_name
FROM employees e 
JOIN departments d
ON d.department_id = e.department_id 
JOIN locations l
ON d.location_id = l.location_id;

SELECT <select_list>
FROM A 
LEFT JOIN B 
ON A.key=B.key

SELECT <select_list>
FROM A 
INNER JOIN B 
ON A.key=B.key

SELECT <select_list>
FROM A 
RIGHT JOIN B 
ON A.key=B.key

SELECT <select_list>
FROM A 
LEFT JOIN B 
ON A.key=B.key
WHERE B.key is null;

SELECT <select_list>
FROM A 
RIGHT JOIN B 
ON A.key=B.key
WHERE A.key is null;

SELECT <select_list>
FROM A 
FULL JOIN B 
ON A.key=B.key

SELECT <select_list>
FROM A 
FULL JOIN B 
ON A.key=B.key
WHERE A.key is null 
OR B.key is null;

注:本文借鉴了尚硅谷公开课的内容,若有错误或不妥之处还望提醒。