mysql学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 此为个人学习笔记的第二部分

### 2.9、基本SELECT语句的课后练习

```mysql

#题目1:查询员工12个月工资的总和,并起别名为ANNUAL SALARY,写法如下:

SELECT employee_id ,last_name,

salary * 12 AS "ANNUAL SALARY"

FROM employees;

#题目2:查询employees表中去除重复的job_id以后的数据,写法如下:

SELECT DISTINCT job_id

FROM employees;

#题目三:查询工资大于12000的员工姓名和部门号,写法如下:

SELECT employee_id ,last_name

FROM employees

WHERE salary>12000;

#题目四:查询员工号为176的员工姓名和部门号

SELECT last_name,employee_id

FROM employees

WHERE employee_id = 176;

#第五题:显示表departments 的结构,并查询其中的全部数据

DESC departments;

SELECT * FROM departments;

```

## 3、运算符

### 3.1、算数运算符

* 就是简单的加减乘除,这块就不演示了

### 3.2、比较运算符

* 比较运算符用来对表达式左边操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况返回NULL;比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录;

* =  <=>  <> !=  <  <=   >  >= ;分别是等于,安全等于,不等于,小于,小于等与,大于,大于等于,举例如下:

```mysql

SELECT 1 = 2,1!=2,1='1',1='a',0='a'

FROM DUAL;   #字符串存在隐式转换,如果隐式转换不成功则看做是0

SELECT 'a' ='a','ab' ='ab','a' = 'b'

FROM DUAL;   #两边都是字符串的话,则按照ANST的比较规则来比较

```

* <=>  (意为安全等于,就是为NULL而生的)

 * 为什么这么说呢,因为其他的运算符只要有NULL参与进来结果都是为NULL

 * 但有了这个符号,我们就可以利用这个符号去判断有NULL的情况

* 实际场景中表中肯定会有NULL的数据,我们也需要这个符号去查询有关于NULL的数据

* 比如呢?比如我想查询表中commisssion_pct为NULL的数据,那么,写法如下:

```mysql

SELECT *

FROM employees

WHERE commission_pct <=> null;  #加上此运算符就可以查出employees表中数据commission——pct字段为NULL的数据了

```

* IS NULL \ IS NOT NULL \ ISNULL

* 以上对三个关键字进行解读,IS NULL 就是查询为空的数据,作用与<=>作用一致

```mysql

SELECT *

FROM employees

WHERE commission_pct IS NULL;  # 作用也是查询表的commission_pct字段中为NULL的数据

```

* IS NOT NULL 则跟他相反,即查询不为空的数据;

```mysql

SELECT *  

FROM employees

WHERE commission_pct IS NOT NULL; #作用就是查询employees表中数据commission_pct字段不为NULL的数据

```

* ISNULL则与<=> 、 IS NULL的作用相同,都是表示为空的,但是与之不同的地方是,ISNULL更像是一个方法

```mysql

SELECT *  

FROM employees

WHERE ISNULL(commission_pct);  #作用与IS NULL和<=>的作用一致,但ISNULL更像是一种函数(方法)

```

* 防止绕晕!!!!!当需求是要求查询为空的时候,就使用IS NULL ,反之,需要查询不为空的时候,就使用IS NOT NULL;

* LEAST()  \ GREATEST    即最大和最小值,写法为:

* GREATEST则和它相反

```mysql

SELECT LEAST(first_name,last_name),LEAST(LENGTH(first_name),LENGTH(last_name))

FROM employees; #意为比较两边字符串哪边更短,后面函数的时候会具体讲到

```

* BETWEEN (条件一) AND (条件二)      (查询条件一和条件二范围内的数据,注意这块是包含边界的数据)

* 实际应用场景:查询工资在6000到八千之间的员工信息;写法如下:

```mysql

SELECT employee_id,last_name,salary

FROM employees

WHERE salary BETWEEN 6000 AND 8000;   #BETWEEN意为查询工资6000到八千的区间信息

```

* 当然,使用逻辑运算符来表示也是可以的,逻辑运算符的写法如下:

```mysql

SELECT empkoyee_id,last_name,salary

FROM employees

WHERE salary >=6000 && salary<=8000;   #这块的作用跟BETWEEN的作用是一样的

```

* 但还有一种场景,就是当把6000和八千互换位置时,数据表是查不到任何数据的

![image-20220912234557401](https://xujicheng.oss-cn-guangzhou.aliyuncs.com/picture/typoraimage-20220912234557401.png)

* 所以由此得出结论,6000的位置是上界标,8000的位置是下界标,可以理解为上限或者下限,所以交换了他们的位置变查询不到

* 还有一种实际场景:查询工资不在6000到8000的员工信息,写法如下:

```mysql

SELECT last_name,employee_id,salary

FROM employees

WHERE salary NOT BETWEEN salary 8000;   #即在BETWEEN前加上关键字NOT就可以实现该需求

SELECT last_name,employee_id,salary

FROM employees

WHERE salary < 6000 OR salary > 8000;  #当然使用or关键字也能实现同样的效果

```

* IN  /  NOT IN  (与BETWEEN不同的是,BETWEEN表示的是一种范围,而IN和NOT IN 表示的是一种零散的数值

* 实际场景:查询部门为10、20、30的员工信息,根据题目需求,得出这块要用到 IN ,写法如下:

```mysql

SELECT department_id,last_name,salary

FROM employees

WHERE department_id IN (10,20,30) #其中需要查询的数据需放入括号中否则就会报错

SELECT last_name,salary,department_id

FROM employees

WHERE department_id = 10 OR department_id = 20 OR department_id =30;   #两种写法的作用一致,但不可直接用OR拼接

```

* 实际场景:查询工资不是6000,7000,8000的员工信息,写法如下:

```mysql

SELECT last_name,department_id,salary

FROM employees

WHERE salary NOT IN (6000,7000,8000);  #NOT IN 即不在,和IN的作用是相反的

```

* LIKE ,模糊查询,当你只记得表中某一字段或者某一字母的时候,就可以使用模糊查询

* 实际场景:查询last_name中包含'a'的员工信息;写法如下

```mysql

SELECT last_name, salary,department_id

FROM employees

WHERE last_name LIKE '%a%'; #其中%代表不确定个数的字符,即字符a前有0个或多个字符,a后面也有0个或多个字符

```

* 以上是单个字符查询,现在还有一种需求是要查询包含字符 'a' 且包含字符 'e'的数据,写法如下:

```mysql

SELECT last_name

FROM employees

WHERE last_name LIKE '%a%' AND last_name LIKE '%e%'; #这样写查出来的数据就包含字符'a'且包含字符'e'

```

* 还有一种场景即查询员工表中第二个字符是 'a'的数据,写法如下:

```mysql

SELECT last_name

FROM employees

WHERE last_name LIKE '_a%';   # _ :的作用是表示一个不确定的字符,用此符号可表示指定位置,有点不清楚,再举例

```

* 查询员工表数据中第三个字符是 'a' 的数据,写法如下:

```mysql

SELECT last_name

FROM employees

WHERE last_name LIKE '__a%'  #加上一个下划线表示第二个字符,查询第三个字符就多加上一个下划线,表示第三个字符带a的数据

```

* 查询员工表中第二个字符是 _ 且第三个字符是 'a' 的员工信息,这个时候我们就需要用到转义字符,写法如下:

```mysql

SELECT last_name

FROM employees

WHERE last_name LIKE '_\_a%';   #此处使用转义字符即可转义,因为需求中是明确第二个字符为下划线,所以需要转义后才能使用

```

* REGEXP \  RLIKE : 正则表达式,正则表达式就不再是模糊查询,而是精确到某一位置 '^' 则表示头,'$'则表示尾,举例如下:

```mysql

SELECT last_name

FROM employees

WHERE last_name RLIKE '^a';  #以a字符开头,注:要带上关键字RLIKE

SELECT last_name

FROM employees

WHERE last_name RLIKE 'a$' #以a字符结尾的数据

SELECT last_name

FROM employees

WHERE last_name RLIKE 'a' #即包含字符a的数据

```

### 3.3、逻辑运算符

* NOT或 !、AND或&& 、OR或||

* 上面有举例场景,我这块就把语句重新打一遍即可

```mysql

SELECT last_name,department_id

FROM employees

WHERE department_id = 10 OR department_id =20; #OR关键字可替换为||

SELECT last_name,department_id,salary

FROM employees

WHERE department_id = 60 AND salary > 8000;  #AND关键字可替换为&&

SELECT last_name,salary

FROM employees

WHERE salary NOT IN(1000);  #NOT关键字可替换为!  

```

### 3.4、运算符的课后练习

```mysql

#题目1:选择工资不在5000到12000的员工姓名和工资

SELECT last_name,salary

FROM employees

WHERE salary NOT BETWEEN 5000 AND 8000;

#题目二:选择在20或50号部门的员工姓名和部门号

SELECT last_name,department_id

FROM employees

WHERE department_id IN (20,50);

#题目三:选择公司中没有管理者的员工姓名和job_id

SELECT last_name,job_id,department_id

FROM employees

WHERE department_id IS NULL;

#题目四:选择公司中有奖金的员工姓名,工资和奖金级别

SELECT last_name,salary,commission_pct

FROM employees

WHERE commission_pct IS NOT NULL;

#题目五:选择员工姓名中第三个字母是a的员工姓名

SELECT last_name

FROM employees

WHERE last_name LIKE '__a%';

#题目六:选择姓名中带有字母a和k的员工姓名

SELECT last_name

FROM employees

WHERE last_name RLIKE 'a' AND last_name RLIKE 'k';

#题目七:显示出表employees表中first_name 以'e'字符结尾的员工信息

SELECT first_name

FROM employees

WHERE first_name RLIKE 'e$';

#题目八:显示出表employees部门编号在80-100之间的姓名,工种

SELECT last_name,job_id,department_id

FROM employees

WHERE department_id BETWEEN 80 AND 100;

#题目九:显示出表employees的manager_id是100,101,110的员工姓名、工资、管理者id

SELECT last_name,salary,employee_id,manager_id

FROM employees

WHERE manager_id IN (100,101,110);  

```

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
145 0
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
128 6
|
1月前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
54 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
1月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
70 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
61 1
|
5月前
|
SQL Oracle 关系型数据库
MySQL学习笔记
MySQL学习笔记
39 0
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
55 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
3月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
126 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
3月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
3月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
38 6