【MySQL】基础篇

文章目录

  • 一、SQL规则与规范
  • 二、基本的SELECT语句
    • SELECT...FROM...;
    • 列的别名 AS ""
    • 去除重复行 DISTINCT
    • 空值参与运算 结果一定也为NULL
    • 着重号 ``
    • 常量
    • 描述表结构 DESCRIBE
    • 过滤数据 WHERE
  • 三、运算符
    • 算术运算符
    • 比较运算符
    • 非符号类型运算符
    • 逻辑运算符
    • 运算符优先级
  • 四、排序
    • 单列排序
    • 双列排序
  • 五、分页
  • 综合练习
    • 基本的SELECT语句
    • 运算符
    • 排序与分页


一、SQL规则与规范

SQL分类:

  • DDL(Data Definition Languages、数据定义语言)
    CREATE \ ALTER \ DROP \ RENAME \ TRUNCATE

  • DML(Data Manipulation Language、数据操作语言)
    INSERT \ DELETE \ UPDATE \ SELECT

  • DCL(Data Control Language、数据控制语言)
    COMMIT \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE

二、基本的SELECT语句

  • 字符串型和日期时间类型的数据可以使用单引号(’ ')表示
  • 列的别名,尽量使用双引号(" "),而且不建议省略as

SELECT…FROM…;

SELECT 标识选择哪些列
FROM 标识哪张表;

列的别名 AS “”

SELECTfirst_name 名字,salary AS 薪资,phone_number "手机号" 
FROMemployees;
  1. 直接跟在变量名后面
  2. AS 后面
  3. 加上双引号跟在后面(别名中间需要空格分割时 用这个方式)
    XG

去除重复行 DISTINCT

DISTINCT 关键字去重 单独写

SELECTDISTINCT department_id AS 部门
FROMemployees;

空值参与运算 结果一定也为NULL

Null 空值 不等于0

解决方案: 加上 IFNULL() 为NULL的数值归为0

SELECTemployee_id "员工ID",salary "月工资",salary *(1+IFNULL ( commission_pct, 0 ) ) "年工资",commission_pct 
FROMemployees;

添加 IFNULL()
前
修改后:
后

着重号 ``

需要使用关键字命名的表 用着重号标识 否则会报错

SELECT * FROM `order`;

常量

	SELECT '道格',007,996,salaryFROM employees; -- FROM 这个表可以不用写 --

常量

描述表结构 DESCRIBE

DESCRIBE employees;DESC employees;

结构

过滤数据 WHERE

SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件
  • 使用WHERE 子句,将不满足条件的行过滤掉
  • WHERE子句紧随 FROM子句
	SELECT employee_id,first_name,department_idFROM employeesWHERE department_id = 90;

JIEGUO

三、运算符

算术运算符

表
效果

  • 一个数乘以整数1和除以整数1后仍得原数;
  • 一个数乘以浮点数1和除以浮点数1后变成浮点数,数值与原数相等;
  • 一个数除以整数后,不管是否能除尽,结果都为一个浮点数;
  • 一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位;
  • 乘法和除法的优先级相同,进行先乘后除操作与先除后乘操作,得出的结果相同。
  • 在数学运算中,0不能用作除数,在MySQL中,一个数除以0为NULL。

查找所有id为偶数的员工

	SELECT * FROM employeesWHERE employee_id % 2 = 0;

相关

比较运算符

比较的结果为真则返回1,
比较的结果为假则返回0,
其他情况则返回NULL。
比较

  1. 等于运算符
  • 等号运算符(=)判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回0。

  • 在使用等号运算符时,遵循如下规则:

    • 如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
    • 如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
    • 如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
    • 如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
  • 对比:SQL中赋值符号使用 :=

  1. 安全等于运算符
    安全等于运算符(<=>)与等于运算符(=)的作用是相似的,唯一的区别是‘<=>’可以用来对NULL进行判断。在两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。
    描述
  2. 不等于运算符
    不等于运算符(<>!=)用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。
    结果

非符号类型运算符

运算符

  1. 为Null判断:
#查询commission_pct等于NULL 的四种写法
SELECT employee_id,commission_pct FROM employees WHERE commission_pct IS NULL;
SELECT employee_id,commission_pct FROM employees WHERE commission_pct <=> NULL;
SELECT employee_id,commission_pct FROM employees WHERE ISNULL(commission_pct);

X

  • 最小值运算符 LEAST
SELECT LEAST(1,0,2),LEAST('A','B','C'),LEAST(1,NULL,0);

LEAST

  • 当参数是整数或者浮点数时,LEAST将返回其中最小的值;
  • 当参数为字符串时,返回字母表中顺序最靠前的字符;
  • 当比较值列表中有NULL时,不能判断大小,返回值为NULL。
  1. 最大值运算符 GREATEST
SELECT GREATEST(1,0,2),GREATEST('A','B','C'),GREATEST(1,NULL,0);

XG

  1. BETWEEN AND 运算符
    求出范围内的全部数值
    求出薪资4000 ~ 8000 之间的员工
	SELECT employee_id,salaryFROM employeesWHERE salary BETWEEN 4000 AND 8000;

效果

5. IN 运算符
查找在IN列出的数值 有的 全部打印
查找managerID 是否存在IN()列出的数值中 在的全部显示

	SELECT employee_id,first_name,salary,manager_idFROM employeesWHERE manager_id IN (201,101,102);

显示

6. NOT IN 运算符
与上面相反!不在的数值全部打印。

7. LIKE 运算符
匹配字符串,通常用于模糊匹配。
如果给定的值或者匹配条件为NULL,则返回结果为NULL。

“%”:匹配0个或多个字符。
“_”:只能匹配一个字符。

	SELECT employee_id,first_nameFROM employeesWHERE first_name LIKE 'J%';

xg

	SELECT employee_id,first_nameFROM employeesWHERE first_name LIKE '%et%';

xg

	SELECT employee_id,first_nameFROM employeesWHERE first_name LIKE '_ete_';

xg
8. 转义字符 \ 或者 ESCAPE

SELECT job_id
FROM   jobs
WHERE  job_id LIKE 'HR\_%';

HR
不用\选择$ 作为转义字符 要用关键字ESCAPE标识 还可以用其他的 比如&等等

SELECT job_id
FROM   jobs
WHERE  job_id LIKE 'IT$_%' ESCAPE '$';

XG

逻辑运算符

逻辑运算符的返回结果为1、0或者NULL
逻辑

  1. AND 或 &&
    并且
SELECT employee_id, salary,job_id
FROM employees
WHERE salary >= 10000
AND 	job_id LIKE '%MAN%';

效果
2. OR 或 ||
或者

-- 查询基本薪资不在9000-12000之间的员工编号和基本薪资 --
# 四种写法
SELECT employee_id,salary
FROM employees
WHERE NOT (salary BETWEEN 9000 AND 12000);SELECT employee_id,salary
FROM employees
WHERE salary NOT BETWEEN 9000 AND 12000;SELECT employee_id,salary
FROM employees
WHERE !(salary BETWEEN 9000 AND 12000);SELECT employee_id,salary
FROM employees
WHERE salary < 9000 OR salary > 12000;

注意:
OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。

SELECT employee_id, salary,job_id
FROM employees
WHERE salary >= 10000
OR 	job_id LIKE '%MAN%';

JIEGO

运算符优先级

优先级
数字编号越大,优先级越高,优先级高的运算符先进行计算。
可以看到,赋值运算符的优先级最低,使用“()”括起来的表达式的优先级最高。

四、排序

  • 使用 ORDER BY 子句排序
    • ASC(ascend): 升序(从小到大
    • DESC(descend):降序(从大到小
  • ORDER BY 子句在SELECT语句的结尾。

单列排序

SELECT employee_id,first_name,salary
FROM employees
ORDER BY salary DESC; -- 降序(从大到小) --SELECT employee_id,first_name,salary
FROM employees
ORDER BY salary ASC;-- 默认就是升序 (从小到大)--

从大到小 DESC

双列排序

SELECT employee_id,first_name,department_id,salary
FROM employees
ORDER BY department_id,salary DESC; 

在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。
如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。
效果

五、分页

使用 LIMIT 实现分页
格式:

LIMIT [位置偏移量,] 行数

第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推);
第二个参数“行数”指示返回的记录条数。

举例:

--前10条记录:
SELECT * FROM 表名 LIMIT 0,10;
或者
SELECT * FROM 表名 LIMIT 10;--第11至20条记录:
SELECT * FROM 表名 LIMIT 10,10;--第21至30条记录: 
SELECT * FROM 表名 LIMIT 20,10;

LIMIT [参数一:从哪开始遍历 (不写默认从0) ] , [参数二:需要几条数据];

SELECT *
FROM employees
LIMIT 5,10; -- 从第6条数据开始 打印10条数据 --

效果

需求:每页显示 pageSize 条记录,此时显示第 pageNo 页:
公式:LIMIT (pageNo-1) * pageSize,pageSize;

另外的写法(MySQL 8.0中可以使用)

SELECT *
FROM employees
LIMIT 3 OFFSET 4; -- 从第五个数据开始(因为从0开始) 打印后面的3条数据 --SELECT *
FROM employees
LIMIT 4,3;  -- 与上面代码执行结果相同 --

效果
注意:LIMIT 子句必须放在整个SELECT语句的最后!

好处:

约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率
如果我们知道返回结果只有 1 条,就可以使用LIMIT 1,告诉 SELECT 语句只需要返回一条记录即可。
这样的好处就是 SELECT 不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。

声明顺序:WHERE … ORDER BY …LIMIT


综合练习

基本的SELECT语句

# 1.查询员工12个月的工资总和,并起别名为ANNUAL SALARY
SELECT employee_id,last_name,salary*12*(1+IFNULL(commission_pct,0)) "ANNUAL SALARY",commission_pct
FROM employees;# 2.查询employees表中去除重复的job_id以后的数据
SELECT DISTINCT job_id
FROM employees;# 3.查询工资大于12000的员工姓名和工资
SELECT first_name,last_name,salary
FROM employees
WHERE salary > 12000;# 4.查询员工号为176的员工的姓名和部门号
SELECT employee_id, first_name,last_name,department_id
FROM employees
WHERE employee_id = 176;# 5.显示表 departments 的结构,并查询其中的全部数据
DESC departments;
SELECT *
FROM departments;

运算符

# 1.选择工资不在5000到12000的员工的姓名和工资
SELECT first_name,salary
FROM employees
WHERE salary < 5000 OR salary > 12000;SELECT first_name,salary
FROM employees
WHERE NOT (salary BETWEEN 5000 AND 12000);SELECT first_name,salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;# 2.选择在20或50号部门工作的员工姓名和部门号
SELECT first_name,department_id
FROM employees
WHERE department_id = 20 OR department_id = 50;SELECT first_name,department_id
FROM employees
WHERE department_id IN (20,50);# 3.选择公司中没有管理者的员工姓名及job_id
SELECT first_name,job_id,manager_id
FROM employees
WHERE ISNULL(manager_id);SELECT first_name,job_id,manager_id
FROM employees
WHERE manager_id IS NULL;# 4.选择公司中有奖金的员工姓名,工资和奖金级别
SELECT first_name,salary,commission_pct
FROM employees
WHERE NOT ISNULL(commission_pct);SELECT first_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;# 5.选择员工姓名的第三个字母是a的员工姓名
SELECT first_name,last_name
FROM employees
WHERE first_name LIKE '__a%';SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';# 6.选择姓名中有字母a和k的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '%A%' AND last_name LIKE '%K%';SELECT last_name
FROM employees
WHERE last_name LIKE '%A%K%' OR last_name LIKE '%K%A%';# 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息
SELECT *
FROM employees
WHERE first_name LIKE '%E';# 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种
SELECT first_name,job_id,department_id
FROM employees
WHERE department_id BETWEEN 80 AND 100;# 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id
SELECT first_name,salary,manager_id
FROM employees
WHERE manager_id IN (100,101,110);

排序与分页

#1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示
SELECT first_name,department_id,salary * 12 AS ANNUAL_SAL
FROM employees
ORDER BY salary DESC,first_name ASC; #2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据
SELECT first_name,salary
FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC
LIMIT 20,20;#3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT employee_id,first_name,email,department_id 
FROM employees
WHERE email LIKE '%E%'
ORDER BY LENGTH(email) DESC,department_id ASC;
#练习:表里有107条数据,我们只想要显示第 32、33 条数据怎么办呢?
SELECT employee_id,last_name
FROM employees
LIMIT 31,2;#练习:查询员工表中工资最高的员工信息
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC
#limit 0,1
LIMIT 1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端js写数据结构与算法

1、什么是数据结构与算法 数据结构&#xff1a;是指数据对象中数据元素之间的相互关系。包括集合结构、线性结构、树形结构、图形结构。 算法&#xff1a;解决问题的思路。 2、时间复杂度 1.是什么? 执行当前算法所“花费的时间” 2.干什么? 在写代码的过程中&#xf…

浅学Linux之旅 day1 学习路线及计算机入门知识介绍

我不要做静等被掀起的轻波&#xff0c;我要生起翠绿的斑驳 偶尔过季的遭遭人事化长风拂过 思绪撕碎点燃了火 ——24.1.14 一、Linux学习路线 ①计算机入门知识介绍 ②Linux系统概述 ③Linux系统的安装和体验 ④Linux的网络配置和连接工具 ⑤Linux的目录结构 ⑥Linux的常用命令 …

【docker笔记】docker镜像

是什么 是一种轻量级、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好形成一个可交付的运行环境&#xff08;包括代码、运行时需要的库、环境变量和配置文件等&#xff09;&#xff0c;这个打包好的运行环境就是…

HarmonyOS应用开发学习笔记 arkTS自定义弹窗(CustomDialog)简单使用 arkTS弹出框回调、监听

HarmonyOS应用开发学习笔记 arkTS自定义弹窗&#xff08;CustomDialog&#xff09;简单使用 1、CustomDialog装饰器用于装饰自定义弹框 1、定义弹出框 CustomDialog CustomDialog export struct CustomDialogExample {controller: CustomDialogControllerbuild() {Column() {…

mac vscode latex实用

网上有教程怎么在vscode里安装macTex以及插件&#xff0c;然后就可以在latex里写代码了&#xff0c;这里需要修改的是对应的json文件&#xff0c;输入command P,可以看到最近打开的json设置文件&#xff0c;结果如下 然后设置这个json文件&#xff0c;我的json文件设置如下 …

springcloud微服务分布式 springboot+vue的轻院校园网购商城管理系统 Eureka

本文的研究目标是以商城的轻院网购商城管理体系为对象&#xff0c;论文的研究内容包括&#xff1a;商品信息、系统公告等方面进行了研究。系统以当前应用最为广泛的Java语言为基础&#xff0c;结合了目前应用最为广泛的嵌入式嵌入式平台&#xff0c;集成了B/S体系结构。数据库选…

Tensor Core的一些概念理解

英伟达的GPU产品架构发展如下图&#xff0c;Tensor Core是从2017年的Volta架构开始演变的针对AI模型大量乘加运算的特殊处理单元。本文主要梳理一些关于Tensor Core的一些基础概念知识。 什么是混合精度&#xff1f; 混合精度在底层硬件算子层面&#xff0c;使用半精度&#xf…

墙地砖外形检测的技术方案-图像获取

硬件系统 墙地砖外形检测硬件系统主要由工业相机、光源、瓷砖位置检测电路和上位机组成&#xff0c;其结构如图所示。为了提高系统检测精度和稳定性&#xff0c;系统采用的是较高精度的高速工业相机用于抓取墙地砖表面轮廓图像&#xff0c;图像数据通过USB接口向上位机传送&am…

阿里云服务器的tcp端口无法访问(云服务厂家问题?)

问题->无法访问 阿里云服务器的tcp端口 最近一台阿里云服务器的一个端口61616无法访问&#xff0c;在服务器内用外网地ip发现无法访问&#xff0c;用内网ip访问是正常的&#xff0c;通过技术排查&#xff1a; 解决->无法访问 阿里云服务器的tcp端口 1 配置官网的安全组…

c++学习笔记-STL案例-演讲比赛管理系统2

目录 功能介绍 代码结构部分 查看一下类图 1.Speaker.h 2.speechManager.h 3.speechManager.cpp 4.演讲比赛流程关系系统.cpp 功能介绍 speechManager.h函数包含演讲比赛流程的所有功能如下&#xff1a; 开始演讲比赛&#xff1a;完成整届比赛的流程&#xff0c;每…

数据结构.线性表(2)

一、模板 例子&#xff1a; a: b: 二、基本操作的实现 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;销毁和清空 &#xff08;3&#xff09;求长度和判断是否为空 &#xff08;4&#xff09;取值 &#xff08;5&#xff09;查找 &#xff08;6&#xff09;插入 &…

【期末考试】数据库综合复习宝典

目录 第一章 数据库系统概述 第二章 关系代数 第四章 关系数据库理论 第五章 数据库设计 第六章 数据库管理系统 第八章 事务管理 第一章 数据库系统概述 1.1三级模式 ①外模式&#xff1a;它为特定的应用程序或用户群体提供了一个数据视图&#xff0c;这个视图是独立于…

Maven和MyBatis框架简单实现数据库交互

MyBatis是一种基于Java语言的持久层框架&#xff0c;它的主要目的是简化与数据库的交互过程。MyBatis通过XML或注解配置来映射Java对象和数据库表之间的关系&#xff0c;并提供了灵活的查询方式和结果集处理机制。MyBatis还提供了事务管理、缓存机制、插件扩展等特性。 使用My…

Linux学习记录——사십 高级IO(1)

文章目录 1、IO2、同、异步IO&#xff08;5种IO类型&#xff09;3、其它高级IO4、非阻塞IO 其它IO类型的实现在这篇之后的三篇 1、IO input&#xff0c;output。调用read或recv接口时&#xff0c;如果对方长时间不向我方接收缓冲区拷贝数据&#xff0c;我们的进程就只能阻塞&a…

基于面向对象,C++实现双链表

双链表同单链表类似&#xff0c;由一个值和两个指针组成 Node.h节点头文件 #pragma once class Node { public:int value;Node* prev;Node* next;Node(int value);~Node(); };Node.cpp节点源文件 #include "Node.h"Node::Node(int value) {this->value value…

如何开启文件共享及其他设备如何获取

1.场景分析 日常生活中&#xff0c;常常会遇到多台电脑共同办公文件却不能共享的问题&#xff0c;频繁的用移动硬盘、U盘等拷贝很是繁琐&#xff0c;鉴于此&#xff0c;可以在同一内网环境下设置共享文件夹&#xff0c;减少不必要的文件拷贝工作&#xff0c;提升工作效率。废话…

希尔排序和计数排序

&#x1f4d1;前言 本文主要是【排序】——希尔排序、计数排序的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句…

【PyTorch简介】3.Loading and normalizing datasets 加载和规范化数据集

Loading and normalizing datasets 加载和规范化数据集 文章目录 Loading and normalizing datasets 加载和规范化数据集Datasets & DataLoaders 数据集和数据加载器Loading a Dataset 加载数据集Iterating and Visualizing the Dataset 迭代和可视化数据集Creating a Cust…

【Docker篇】从0到1搭建自己的镜像仓库并且推送镜像到自己的仓库中

文章目录 &#x1f50e;docker私有仓库&#x1f354;具体步骤 &#x1f50e;docker私有仓库 Docker私有仓库的存在为用户提供了更高的灵活性、控制和安全性。与使用公共镜像仓库相比&#xff0c;私有仓库使用户能够完全掌握自己的镜像生命周期。 首先&#xff0c;私有仓库允许…

力扣-盛最多水的容器

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜…