MySQL数据库的学习

MySQL数据库的学习

序言:这些笔记是我跟着尚硅谷讲师所做的,全文都是个人亲手码出,同时表也是用的是讲师所用到的表(当然自己去建也是可以的)。所以下面的SQL 语句只做语法学习参考。

排序操作和分页操作

排序操作(ORDER BY)

排序操作升序(ASC)和降序(DESC)操作。一般情况下,MySQL 中用ORDER BY 来进行语句的说明操作(默认情况下是升序操作)。可以通过字面意思去理解ORDER(排序的意思) BY(通过什么。。。)

这里直接上代码演示

-- 按照薪资的升序(由小到大)进行排序操作
SELECT employee_id,last_name,salary 
FROM employees
ORDER BY salary;
-- 按照薪资的升序(由小到大)进行排序操作
SELECT employee_id,last_name,salary 
FROM employees
ORDER BY salary ASC;
-- 按照薪资的降序(由大到小)进行排序操作
SELECT employee_id,last_name,salary 
FROM employees
ORDER BY salary DESC; 

这里我们序言提出一个疑问了?

我们可以使用列的别名进行筛选和排序吗?
-- 此语句可以执行
SELECT employee_id,last_name,salary,salary*12 annual_sal
FROM employees
ORDER BY annual_sal;

-- 此语句无法执行
SELECT employee_id,last_name,salary,salary*12 annual_sal
FROM employees
WHERE annual_sal > 57600.00;

-- 再可以参考一下下面的语句(可以执行)
SELECT employee_id,last_name,salary,salary*12 annual_sal
FROM employees
WHERE department_id IN(50,60,70) 
ORDER BY annual_sal;

通过上面的代码我们可以看出,列的别名可以在排序条件中使用,但是不能在筛选条件中使用。因为我们的SQL语句执行顺序有关,只有执行完了 SELECT之后(才有相应的列的别名),ORDER BY才能获取这个列的别名。而 WHERE是在 SELECT 之前就已经执行,获取不到列的别名。你可以先简单地记住WHERE是需要紧跟在From后面的。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二级排序

也是比较简单的一个内容,无非就是在之前的排序中再加一个排序

-- 根据department_id进行降序操作,然后对相同的department_id的人的薪资进行工资的升序排序
SELECT department_id,last_name,salary 
FROM employees
ORDER BY department_id DESC,salary ASC;

分页操作(LIMIT)

分页操作的关键字是LIMIT,一般的格式为:LIMIT (PageNum PageSize)PageNum就是从哪条数据开始,PageSize显示的是每页多少条数据。其中PageNum = (PageNum - 1 ) * PageSize

-- 0代表的是从第几条数据开始,20代表的是一页显示多少条数据
-- 每页显示20条数据,此时显示第一页
SELECT employee_id,last_name
FROM employees
LIMIT 0,20;
-- 每页显示20条数据,此时显示第二页
SELECT employee_id,last_name
FROM employees
LIMIT 20,20;
-- 每页显示20条数据,此时显示第三页
SELECT employee_id,last_name
FROM employees
LIMIT 40,20;
WHERE…ORDER BY…LIMIT声明顺序

下面一段代码可以看出:

SELECT employee_id,last_name,salary
FROM employees
WHERE salary > 6000
ORDER BY salary DESC
LIMIT 10,10;

了解一下MySQL8.0新特性

SELECT employee_id,last_name
FROM employees
LIMIT 20 OFFSET 0; -- 每页的偏移量和条目数调转过来 

七种join的方式(内连接 外连接)

在学习join方式之前,我们首先要区分好内连接和外连接的核心概念。我们这里先看下面这张图 这张图需要记住(这里最好自己建立几张合适的表)
在这里插入图片描述

内连接:官方一点的说法就是合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。

内连接语法格式 :INNER JOIN

SELECT * 
FROM1
INNER JOIN2
ON1.字段 =2.字段

外连接:官方一点的说法就是合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行 还查询到了左表 或 右表中不匹配的行

只要开发中看到需要查询两个表中所有的信息出来就用到外连接。

外连接一般分为:左外连接(LEFT OUTER JOIIN)右外连接(RIGHT OUTER JOIN)满外连接(MySQL 不支持该FULL 语法),其中OUTER 可以省略。

左连接返回包括左表中的所有记录和右表中连接字段相等的记录对应的是上图的 左上图

右连接返回包括右表中的所有记录和左表中连接字段相等的记录对应的是上图的 右上图

-- 外连接
SELECT * 
FROM1
OUTER JOIN2
ON1.字段 =2.字段

-- 左连接
SELECT * 
FROM1
LEFT JOIN2
ON1.字段 =2.字段

-- 右连接
SELECT * 
FROM1
RIGHT JOIN2
ON1.字段 =2.字段

这里补充一个 UNIONUNION ALL的知识点

这两个关键字就是对两个表的结果进行连接

UNION:会执行去重操作

UNION ALL:不会执行去重操作(建议使用,因为不需要进行去重操作,会提升数据查询效率)

满外连接虽然Mysql不支持Full语法,但是我们可以借助上图的左上图和右中图进行UNION ALL 或者是 UNION进行合并。

SELECT * 
FROM 表1
LEFT JOIN 表2
ON 表1.字段 = 表2.字段
UNION ALL
SELECT * 
FROM 表1
RIGHT JOIN 表2
ON 表1.字段 = 表2.字段

函数分类(主要是日期类型)

日期时间类型的分类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值