MySQL基础篇(运算符、排序分页、多表查询、函数)-1

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL基础篇(运算符、排序分页、多表查询、函数)

数据库概述


数据库与数据库管理系统

DB(Database):数据库


DBMS(Database Management System):数据库管理系统


SQL:结构化查询语言


数据库与数据库管理系统的关系


3765a11ab873bec19198f1b66e60bb0b_385a1ed1e890f9085c0f7add9b28012c.png

98f55b6ec80bd634b6d6e97e923fecf0_98fe85bebf04f0cfb34162031c8f1235.png


一句话总结:DBMS就是管理数据库的软件,如Mysql、Oracle、SQLServer、Redis…


Mysql介绍

MySQL从5.7版本直接跳跃发布了8.0版本,mysql8对源代码进行了重构,最突出的一点是多MySQL Optimizer优化 器进行了改进,性能进一步得到提升


Oracle vs MySQL怎么选?


  • Oracle性能、安全性高,但是收费
  • Mysql体积小,成本低,代码开源


RDBMS 与 非RDBMS

RDBMS(Relational Database Management System)关系型数据库管理系统


关系型数据库(RDBMS)

关系型数据库就是把复杂的数据结构变成二元结构,也就是二维表格形式


e3b849512d436f45726563b1dafcfb3f_a96a1cebc8ccd8d112dc4f52b7392bef.png


  • 关系型数据库以**行(row)和列(column)**的形式存储数据,便于理解。这一系列的行和列组合成表,一组表组合成库
  • 表与表之间的数据记录有关系。通过关系模型来表示,关系型数据库就是建立在关系模型基础上的数据库
  • SQL就是RDB的查询语言


非关系型数据库(非RDBMS)

可以看作关系型数据库的阉割版,它基于key-value存储值,不需要经过SQL层的解析,性能非常高


Redis、mongo、ES


关系型数据库设计规则

ER模型

平时说的ER(entity-relationship)模型,就是实体之间的联系模型


  • 模型中有三个概念是:实体集、属性、联系集
  • 一个实体集对应一个表
  • 一个实体对应一行,也成为一条记录
  • 一个属性对应一列,也称为一个字段

2c4ec01911e951404f1ee23267dd94b5_a68af1d7f2e6ffc192e08c980289b0d5.png


ORM

表 ----- 类


表中数据 ---- 对象


表中列 ---- 属性


表的关联关系

表与表之间的**数据记录**有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用 关系模型来表示


分别是以下四种:


  • 一对一
  • 设计学生表、可以分为常用信息和不常用信息分别建表
  • 每个常用信息记录会 一 一 对应不常用信息记录
  • 一对多
  • 客户表和订单表、分类表和商品表、部门表和员工表
  • 一个客户数据可以对应订单表中的多条数据,一个分类可以对应多个商品、一个部门可以有多个员工
  • 多对多
  • 多对对关系必须用三个表来表示,第三个表被称为连接表,它将多对多关系划分成两个一对多关系
  • 一门课程可以被多个学生选择,一学生可以选择多个课程
  • 自我引用

a99e898a4527234c9d63847bdd4cc1b5_5abe9f84cefe1289e2fca2d3c6fd8b3f.png


基本的SELECT语句


SQL分类

SQL是一种规范,Mysql和Oracle都有对应的实现,但它们都属于SQL


下图形象表达了sql,和DBMS的关系


b87c27600f79f11afcb706bbc5b99d60_e78acb4afd2509143253418978752848.png


SQL在功能上可分为:


  • DDL(Data Definition Languages、数据定义语言)
  • creatre、drop、alter关键字都属于DDL
  • DML(Data Manipulation Language、数据操作语言)
  • insert、delete、update、select关键字都属于DML
  • DCL(Data Control Language、数据控制语言)
  • grant、revoke、commit、rollback关键字都属于DCL


因为SQL中查询用的最为频繁,所以也可以把查询语句相关的定义为DQL(Data Query Language、数据查询语言)


还有commit、rollback取出来称为TCL(Transaction Control Language,事务控制语言)


SQL的规范

这个点其实可以在数据库图形化软件中学习,你写好语句然后点击优化,软件给你优化后的就是标准的格式


特殊点注意:


  • 反引号:它是为了区分MYSQL的保留字与普通字符而引入的符号。
  • 当我们要那他们做表名或字段名的时候,我们要加反引号用于区分避免编译器把这部分认为是保留字而产生错误
  • MySQL 在 Linux 环境下是大小写敏感的
  • 数据库名、表名、表的别名、变量名严格区分大小写
  • Mysql在windows不区分大小写


注释

单行注释:\#注释文字(MySQL特有的方式)
单行注释:-- 注释文字(--后面必须包含一个空格。)
多行注释:/* 注释文字 */

命名规范

f001744e9914d27bcfb01c9fc1be7157_33bfc9fcbfafacdfe7da785d270ce98d.png


导入sql

通过source命令进行导入


win:
mysql> source d:\mysqldb.sql
linux:
mysql> source /home/mysql/w3h5.sql; 或者  mysql -uroot -p123456 w3h5 < /home/mysql/w3h5.sql;
如果已经登陆数据库了,直接输入后面的部分:数据库名 < 数据库文件;
dbname < /home/mysql/data.sql

导出sql

mysqldump -uroot -p dbname > data.sql;
最好是加上路径/数据库文件名
mysqldump -uroot -p dbname > /home/mysql/w3h5.sql;

基本语句

下面通过测试如下表来学习语句使用


038f65f4ca091f954c898a0adac25c05_10f4e68ed0c6fc1259a31f21e92cf85d.png


查看所有

SELECT
  * 
FROM
  pms_brand;

选择特定的列

SELECT
  id,name,sort,logo 
FROM
  pms_brand;

给列起别名


通过AS关键字给列起别名,别名便于计算,见名知意


AS可省略


SELECT
  id id值,
  NAME 名字,
  sort 别名,
  logo 品牌 
FROM
  pms_brand;

去除重复行

使用关键字DISTINCT去除重复行


SELECT DISTINCT
  sort 
FROM
  pms_brand;

空值参与运算

所有空值参与运算的,结果都为null


在mysql中,空值不等于空字符串。一个空字符串的长度是0。空值的长度是空,它是占用空间的!



显示表结构

使用DESC或全程DESCRIBE


DESC pms_brand;

c848f1241b33527093f9cac90b94108f_c6fdcbeaf0eb05f20581ad7f0fa85433.png


  • Fileld:字段名称
  • Type:字段类型
  • Null:改列是否能存NULL值
  • Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示允许出现多次
  • Default:表示该列默认值,如果有,值是多少。
  • Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等


过滤数据

通过WHERE关键字来过滤数据

SELECT
  id,
  NAME,
  sort,
  logo 
FROM
  pms_brand
WHERE
  id = 1


运算符


算术运算符

运算符 作用
+ 加法
- 减法
* 乘法
/ 或 DIV 除法
% 或 MOD 取余

在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL。


比较运算符

通过这些比较运算符,可以判断表中的哪些记录是符合条件的。


  • 结果为真则返回 1
  • 为假则返回 0
  • 不确定则返回 NULL


符号 描述 备注
= 等于
<>, != 不等于
> 大于
< 小于
<= 小于等于
>= 大于等于
BETWEEN 在两值之间 >=min&&<=max
NOT BETWEEN 不在两值之间
IN 在集合中
NOT IN 不在集合中
<=> 严格比较两个NULL值是否相等 两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0
LIKE 模糊匹配
REGEXP 或 RLIKE 正则式匹配
IS NULL 为空
IS NOT NULL 不为空


常用实例


1、安全等于与 = 的区别在于当两个操作码均为 NULL 时,其所得值为 1 而不为 NULL,而当一个操作码为 NULL 时,其所得值为 0而不为 NULL。
mysql> select 2<=>3;
+-------+
| 2<=>3 |
+-------+
|     0 |
+-------+
mysql> select null=null;
+-----------+
| null=null |
+-----------+
|      NULL |
+-----------+
mysql> select null<=>null;
+-------------+
| null<=>null |
+-------------+
|           1 |
+-------------+
2、BETWEEN关键字的使用
mysql> select 5 between 1 and 10;
+--------------------+
| 5 between 1 and 10 |
+--------------------+
|                  1 |
+--------------------+
3、IN关键字的使用
mysql> select 5 in (1,2,3,4,5);
+------------------+
| 5 in (1,2,3,4,5) |
+------------------+
|                1 |
+------------------+
4、LIKE关键字的使用
mysql> select '12345' like '12%';
+--------------------+
| '12345' like '12%' |
+--------------------+
|                  1 |
+--------------------+
5、正则匹配的使用
mysql> select 'beijing' REGEXP 'xi';
+-----------------------+
| 'beijing' REGEXP 'xi' |
+-----------------------+
|                     0 |
+-----------------------+

逻辑运算符

逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。


运算符号 作用
NOT 或 ! 逻辑非
AND 逻辑与
OR 逻辑或
XOR 逻辑异或

位运算符

位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。


运算符号 作用
& 按位与
| 按位或
^ 按位异或
! 取反
<< 左移
>> 右移
  • 异或是相同为0,不同为1
  • 右移也就是把二进制各个位向右边推一位,最后就相当于除以2了
  • 左移同理把二进制各个数位向左边推一位,相当于乘2
1、异或运算
mysql> select 3^5;
+-----+
| 3^5 |
+-----+
|   6 |
+-----+
2、按位右移
mysql> select 3>>1;
+------+
| 3>>1 |
+------+
|    1 |
+------+
3、位左
mysql> select 3<<1;
+------+
| 3<<1 |
+------+
|    6 |
+------+

运算符优先级

d121f5b1003f5d5a47e5b4ffff118f12_d5f22d9a35d4afc5d373711bbc9a690b.png


练习

# 1.选择工资不在5000到12000的员工的姓名和工资
SELECT
  last_name,
  salary 
FROM
  employees 
WHERE
  salary NOT BETWEEN 5000 
  AND 12000
# 2.选择在20或50号部门工作的员工姓名和部门号
SELECT
  last_name,
  department_id 
FROM
  employees 
WHERE
  department_id BETWEEN 20 
  AND 50
# 3.选择公司中没有管理者的员工姓名及job_id
SELECT
  last_name,
  job_id 
FROM
  employees 
WHERE
  manager_id IS NULL
# 4.选择公司中有奖金的员工姓名,工资和奖金级别
SELECT
  last_name,
  salary,
  commission_pct 
FROM
  employees 
WHERE
  commission_pct IS NOT NULL
# 5.选择员工姓名的第三个字母是a的员工姓名
SELECT
  last_name
FROM
  employees 
WHERE
  last_name LIKE '__a%';
# 6.选择姓名中有字母a和k的员工姓名
SELECT
  last_name
FROM
  employees 
WHERE
  last_name LIKE '%a%k%' OR last_name LIKE '%k%a%';
# 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息
SELECT
  first_name
FROM
  employees 
WHERE
  first_name LIKE '%e';
# 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种
SELECT
  last_name,
  job_id 
FROM
  employees 
WHERE
  department_id BETWEEN 80 
  AND 100;
# 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id
SELECT
  last_name,
  salary,
  manager_id
FROM
  employees 
WHERE
  manager_id IN(100,101,110);
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
SQL 关系型数据库 MySQL
【MySQL基础篇】盘点MySQL常用四大类函数
本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。
【MySQL基础篇】盘点MySQL常用四大类函数
|
18天前
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
59 7
|
20天前
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
56 8
|
21天前
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
25天前
|
关系型数据库 MySQL PHP
php实现一个简单的MySQL分页
通过本文的详细步骤和代码示例,我们实现了一个简单的PHP MySQL分页功能。主要步骤包括计算总记录数、设置分页参数、查询当前页的数据以及生成分页链接。这种分页方式适用于大多数Web应用,能够有效提升用户体验和页面响应速度。
26 4
|
25天前
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
28 3
|
24天前
|
SQL 关系型数据库 MySQL
mysql分页读取数据重复问题
在服务端开发中,与MySQL数据库进行数据交互时,常因数据量大、网络延迟等因素需分页读取数据。文章介绍了使用`limit`和`offset`参数实现分页的方法,并针对分页过程中可能出现的数据重复问题进行了详细分析,提出了利用时间戳或确保排序规则绝对性等解决方案。
|
27天前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
31 1
|
3天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
13 3
|
3天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
19 3