【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 “”

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

去除重复行 DISTINCT

DISTINCT 关键字去重 单独写

SELECT
	DISTINCT department_id AS 部门
FROM
	employees;

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

Null 空值 不等于0

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

SELECT
	employee_id "员工ID",
	salary "月工资",
	salary *(
		1+IFNULL ( commission_pct, 0 ) 
	) "年工资",
	commission_pct 
FROM
	employees;

添加 IFNULL()
前
修改后:
后

着重号 ``

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

SELECT * FROM `order`;

常量

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

常量

描述表结构 DESCRIBE

DESCRIBE employees;DESC employees;

结构

过滤数据 WHERE

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

JIEGUO

三、运算符

算术运算符

表
效果

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

查找所有id为偶数的员工

	SELECT * 
	FROM employees
	WHERE 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,salary
	FROM employees
	WHERE salary BETWEEN 4000 AND 8000;

效果

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

	SELECT employee_id,first_name,salary,manager_id
	FROM employees
	WHERE manager_id IN (201,101,102);

显示

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

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

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

	SELECT employee_id,first_name
	FROM employees
	WHERE first_name LIKE 'J%';

xg

	SELECT employee_id,first_name
	FROM employees
	WHERE first_name LIKE '%et%';

xg

	SELECT employee_id,first_name
	FROM employees
	WHERE 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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git 是什么?

Git 是什么&#xff1f; Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;…

ubuntu 2022.04 安装vcs2018和verdi2018

主要参考网站朋友们的作业。 安装时参考&#xff1a; ubuntu18.04安装vcs、verdi2018_ubuntu安装vcs-CSDN博客https://blog.csdn.net/qq_24287711/article/details/130017583 编译时参考&#xff1a; 【ASIC】VCS报Error-[VCS_COM_UNE] Cannot find VCS compiler解决方法_e…

陶瓷碗口缺口检测-图像分割

图像分割 由于对碗口进行缺口检测&#xff0c;因此只需要碗口的边界信息。得到陶瓷碗区域填充后的图像&#xff0c;对图像进行边缘检测。这是属于图像分割中的内容&#xff0c;在图像的边缘中&#xff0c;可以利用导数算子对数字图像求差分&#xff0c;将边缘提取出来。 本案…

电流检测方法

电路检测电路常用于&#xff1a;高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 对于大部分应用&#xff0c;都是通过感测电阻两端的压降测量电流。 一般使用电流通过时的压降为数十mV&#xff5e;数百mV的电阻值&…

42 智能指针 auto_ptr, unique_ptr,shared_ptr,weak_ptr 整理

都是类模版 都不用开发者自己delete 指针。这是因为智能指针有自己管理指向对象的能力&#xff0c;包括释放指向的内存&#xff0c;因此开发者不要自己释放。 auto_ptr, &#xff08;废弃&#xff09;C98 已经被弃用&#xff0c;替代方案是unique_ptr. 被弃用的原因: 1.不能…

基于传统机器学习模型算法的项目开发详细过程

1 场景分析 1.1 项目背景 描述开发项目模型的一系列情境和因素&#xff0c;包括问题、需求、机会、市场环境、竞争情况等 1.2. 解决问题 传统机器学习在解决实际问题中主要分为两类&#xff1a; 有监督学习&#xff1a;已知输入、输出之间的关系而进行的学习&#xff0c;从而…

Minio安装及整合SpringBoot

一. MinIO概述 官网地址&#xff1a;https://minio.org.cn MinIO是一款基于Apache License v2.0开源协议的分布式文件系统&#xff08;或者叫对象存储服务&#xff09;&#xff0c;可以做为云存储的解决方案用来保存海量的图片、视频、文档等。由于采用Golang实现&#xff0c;服…

《Git学习笔记:Git入门 常用命令》

1. Git概述 1.1 什么是Git&#xff1f; Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html页面等&#xff09;&#xff0c;在软件开发过程中被广泛使用。 其它的版本控制工具 SVNCVSVSS 1.2 学完Git之后能做…

数据在AI任务中的决定性作用:以图像分类为例

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

基于SSM的法律咨询系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

虾皮shopee根据ID取商品详情 API (shopee.item_get)

Shopee 是一个流行的电商平台&#xff0c;提供了 API 来允许开发者与平台进行交互。如果你想通过 API 根据商品 ID 获取商品详情&#xff0c;你可以使用 Shopee 的 item_get API。 以下是使用 Shopee 的 item_get API 根据商品 ID 获取商品详情的步骤&#xff1a; 获取 API 密…

希尔排序和计数排序

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

音频编辑软件:Studio One 6 中文

Studio One 6是一款功能强大的数字音乐制作软件&#xff0c;为用户提供一站式音乐制作解决方案。它具有直观的界面和强大的音频录制、编辑、混音和制作功能&#xff0c;支持虚拟乐器、效果器和第三方插件&#xff0c;可帮助用户实现高质量的音乐创作和制作。同时&#xff0c;St…

verilog编程题

verilog编程题 文章目录 verilog编程题序列检测电路&#xff08;状态机实现&#xff09;分频电路计数器译码器选择器加减器触发器寄存器 序列检测电路&#xff08;状态机实现&#xff09; module Detect_101(input clk,input rst_n,input data,o…

高防云主机安全解决方案

全球防护 高防云服务器支持区域覆盖中国大陆和海外地区&#xff0c;包括北京、上海、广州和中国香港等地。通过组合DDoS高防包和对应地区的CVM资源&#xff0c;可提供T级的单地区防护能力。 稳定可靠 兼顾防护和性能&#xff0c;DDoS提供实时防护&#xff0c;清洗成功率达99…

vulnhub靶场之DC-8

一.环境搭建 1.靶场描述 DC-8 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. This challenge is a bit of a hybrid between being an actual challenge, and being a "proof of concept&quo…

【含完整代码】Java定时任务之xxl-job[超详细]

前言 个人博客&#xff1a;www.wdcdbd.com 在Java中使用定时任务是一件很常见的事情&#xff0c;比如使用定时任务在什么时间&#xff0c;什么时候&#xff0c;去发布一些信息&#xff0c;或者去查询一些日志等相关的代码。这时&#xff0c;我们就要开发定时任务这中功能来实现…

UNRAID 优盘制作

使用方法和开心方法&#xff1a; 如果重启之后显示器有信号但是黑屏无法正常引导系统&#xff0c;此为九代以后主板快速开机&#xff08;快速引导&#xff09;UNRAID并不支持快速引导所以会直接卡黑屏。所以发现这种情况的时候请进BIOS关闭和开机快速引导或和快有关系的任何开…

LeetCode 589. N 叉树的前序遍历

589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [1,nul…

扩散模型(二)——DDIM学习笔记-大白话推导

扩散模型系列&#xff1a; &#xff08;1&#xff09;扩散模型(一)——DDPM推导笔记-大白话推导 &#xff08;2&#xff09;扩散模型(二)——DDIM学习笔记-大白话推导 请提前关注&#xff0c;后续待更新&#xff0c;谢谢… 写在前面&#xff1a; &#xff08;1&#xff09;建议…