MySQL数据库:SQL语言入门 【上】(学习笔记)
SQL(Structured Query Language)是结构化查询语言的简称,它是一种数据库查询和程序设计语言,同时也是目前使用最广泛的关系型数据库操作语言。(95%适用于所有关系型数据库) 【 SQL是关系型数据库通用的操作语言】
在数据库管理系统中,使用SQL语言来实现数据的存取、查询、更新等功能。SQL是一种非过程化语言,只需提出“做什么”,而不需要指明“怎么做”。
SQL语言具有集数据查询、数据操纵、数据定义和数据控制功能于一体,类似自然语言、简单易用以及非过程化等特点,
数据库管理人员(DBA)通过数据库管理系统(DBMS)可以对数据库(DB)中的数据进行操作,
(分页查询语句不同)
MySQL: limit ?, ?
orcale: top 5 where
- 介绍MySQL数据库
mysql是一款开放源码,轻量级的关系型数据库
具有体积小,数据快,成本低,开放源码等特点
使用sql语言对数据库进行管理
一,SQL语言组成部分(5)
DQL* 数据的查询语言:查询语句的6个组成部分
DML* 数据的操作语言:insert delete update
DDL 数据的定义语言:(了解)创建/删除/修改 数据库对象
DCL 数据的控制语言:(了解)授予,撤回
TCL* 事务的控制语言:提交,回滚
1,DQL —— 数据查询语言(Data Query Language)
主要用于数据的查询,其基本结构是使用 select 子句,from 子句和 where 子句的组合来查询一条或多条数据。
(1)组成结构
select 字段名,字段名,字段名,
from 表名,表名,表名
where 条件 and/or 条件 and/or 条件 ———— 【分组前条件判断】
group by 字段名,字段名,字段名————【分组】
having 条件 and/or 条件 and/or 字段名————【分组后条件判断】
order by 字段名,字段名,字段名————【排序】
【select 语句的执行顺序】
from--where -- group by– select - having- order by
(2)单表查询
【1】介绍 select 部分
===查指定的部位(与表内数据的顺序不关)
select ename,empno from emp
===查表内全部数据
select * from emp
===别名——as
----- 真实案例 :实体类 属性名写错了; 多表查询的时候
---改名--》deptno改成eptno
select empno,ename,job,deptno as eptno from emp
----- 真实案例 开发组 每周会议
---写别名 as可以省略
--- ' ' 可加可不加,如果别名类里面有特殊符号或者空格 必须用!!!
select empno 员工编号,ename 员工姓名,job 岗位名称,deptno as '部门编号' from emp
===简单的算术运算
----- 查询表里所有员工的年薪是多少? (忽视了奖金,流程函数处补全)
---空值做任何运算结果都为空!!!
select sal*12 年薪,ename,comm from emp
===去重操作
去重关键字 distinct
----- 查询员工都在哪几个部门工作?
select distinct deptno from emp
select distinct job,deptno from emp; -- 对后面的所有列组合 去重 ,而不是单独的某一列去重
===介绍 order by
默认情况下是按照升序排列的
asc---升序 (可以默认不写)
desc---降序
select * from emp order by sal; -- 默认情况下是按照升序排列的
select * from emp order by sal asc; -- asc 升序,可以默认不写
select * from emp order by sal desc; -- desc 降序
select * from emp order by sal asc ,deptno desc; -- 在工资升序的情况下,deptno按照降序排列select deptno,count(*) num
from emp
where year(hiredate)=1981
GROUP BY deptno
order by num,deptno desc
【2】介绍 where 部分
将过滤条件放在where子句的后面,可以筛选/过滤出我们想要的符合条件的数据:
===关系运算符
= , > ,< ,>= ,<= ,!= ,<> (最后两个都是 不等于)
-----查询入职时间在1981年的所有员工信息
select * from emp where hiredate>='1981-1-1' and hiredate<='1981-12-31'
-----查寻部门编号不是30的所有员工信息
select * from emp where deptno!=30
-----查询工资范围在1000--2000的所有员工信息
select * from emp where sal>1000 and sal<2000
-----查询经理编号是7321的所有员工信息
select * from emp where mgr=7321
===逻辑运算符
and && or | | in———替换 or
-----查寻部门编号是10或者20的所有员工信息
select * from emp where deptno=10 or deptno=20
select * from emp where deptno in (10,20)
===空值判断
..... where is null ————为空
..... where is not null ————不为空
-----查询没有奖金的所有员工信息
select * from emp where comm is null
===模糊查询
% :0~n位任意字符 ; _ :1位任意字符
----- 查询名字第三位是a的
select * from emp where ename like '__a%'
----- 查询员工姓名里以A开头的员工信息
select * from emp where ename like 'A%'
----- 查询岗位名称里,带A或者带C的员工信息
select * from emp where job like '%A%' or '%C%'
----- 查询 没有奖金,不是20号部门 ,名字里没有A的员工信息
select * from emp where comm is null and deptno!=30 and ename not like '%A%'
===小括号的使用
因为不同的运算符的优先级别不同,加括号为了可读性
select * from emp where job = 'SALESMAN' or job = 'CLERK' and sal >=1500; -- 先and再or and > or
select * from emp where job = 'SALESMAN' or (job = 'CLERK' and sal >=1500);
select * from emp where (job = 'SALESMAN' or job = 'CLERK') and sal >=1500;
【3】函数
- 函数只是对查询结果中的数据进行处理,不会改变数据库中数据表的值。
- 使用函数可以大大提高SELECT语句操作数据库的能力,同时也给数据的转换和处理提供了方便。 (在sql中使用函数)
- 函数的功能:封装了特定的一些功能,我们直接拿过来使用,可以实现对应的功能
- 函数作用:为了提高select的能力
===分类:
单行函数 (进去一条数据,出来一条数据)
多行函数/分组函数/聚合函数(进去一组数据,出来一条数据)
- 除了多行函数(max,min,count,sum,avg),都是单行函数
===单行函数
----- 字符串函数
拼接:concat(str1,str2,。。。strn)
---查询所有 部门编号员工编号员工姓名 的员工信息
select concat(deptno,'_',empno,'_',ename) from emp
添加:insert(str,index,n,newstr)
---查询所有 长春吉软_员工姓名 的员工信息
select ename,insert(ename,1,0,'长春吉软_') from emp
总长度:length(str)
---查询所有 员工姓名长度 大于5位的
select * from emp where length(ename)>5
-- 仅查询了 字节数和员工姓名
select length(ename),ename from emp where length(ename)>5
替换:replace(str,oldstr,newstr)
获取:substring(str,index,n)
---查询所有 员工姓名(保留第一位和最后一位字母,中间用。。。代替)
SELECT REPLACE(ename,substring(ename,2,length(ename)-2),'...') FROM emp
-- 拼接和获取
SELECT CONCAT(substring(ename,1,1),'...',substring(ename,length(ename),1)) FROM emp;
函数 | 描述 |
---|---|
concat(str1,str2,···strn) | 将str1、str2···strn拼接成一个新的字符串 |
insert(str,index,n,newstr) | 将字符串str从第index位置开始的n个字符替换成字符串newstr |
length(str) | 获取字符串str的长度 |
lower(str) | 将字符串str中的每个字符转换为小写 |
upper(str) | 将字符串str中的每个字符转换为大写 |
left(str, n) | 获取字符串str最左边的n个字符 |
right(str, n) | 获取字符串str最右边的n个字符 |
lpad(str, n, pad) | 使用字符串pad在str的最左边进行填充,直到长度为n个字符为止 |
rpad(str, n, pad | 使用字符串pad在str的最右边进行填充,直到长度为n个字符为止 |
ltrim(str) | 去除字符串str左侧的空格 |
rtrim(str) | 去除字符串str右侧的空格 |
trim(str) | 去除字符串str左右两侧的空格 |
replace(str,oldstr,newstr) | 用字符串newstr替换字符串str中所有的子字符串oldstr |
reverse(str) | 将字符串str中的字符逆序 |
strcmp(str1, str2) | 比较字符串str1和str2的大小 |
substring(str,index,n) | 获取从字符串str的index位置开始的n个字符 |
函数 | 描述 |
---|---|
ABS(num) | 返回num的绝对值 |
CEIL(num) | 返回大于num的最小整数(向上取整) |
FLOOR(num) | 返回小于num的最大整数(向下取整) |
MOD(num1, num2) | 返回num1/num2的余数(取模) |
PI() | 返回圆周率的值 |
POW(num,n) POWER(num, n) | 返回num的n次方 |
RAND(num) | 返回0~1之间的随机数 |
ROUND(num, n) | 返回x四舍五入后的值,该值保留到小数点后n位 |
TRUNCATE(num, n) | 返回num被舍去至小数点后n位的值 |
----- 日期时间函数
dual ---虚拟表
----- 房租一个月后到期,问到期时间?
select ADDDATE(NOW(),INTERVAL 1 MONTH) from dual
----- 查询所有员工试用期通过的时间
select ename,ADDDATE(hiredate,INTERVAL 3 MONTH) from emp
----- 查询所有员工里工龄超过20年的所有员工
select * from emp where (DATEDIFF(NOW(),hiredate)/365)>20
select * from EMP WHERE SUBDATE(Now(), INTERVAL 20 YEAR) > hiredate -- 减
select * from emp where adddate(hiredate,interval 20 year)<now() -- 加
----- 查询所有员工,在1981年9月份入职的所有员工
select * from emp where year(hiredate) = 1981 and month(hiredate) = 9
-----查询入职时间超100天的所有员工
select DATEDIFF(NOW(),hiredate) from emp where DATEDIFF(NOW(),hiredate)>100
时间与日期函数
----- 流程函数
----- 查询表里所有员工的年薪是多少?
select sal*12+ IFNULL(comm,0) 年薪 from emp
----- 查询所有员工编号,姓名,以及所在的部门名称(单表查询)
select empno,ename,
case deptno when 10 then '开发部'when 20 then '测试部'when 30 then '运维部'when 40 then '实施部'else '最后' end 部门名称 from emp
流程函数
===多行函数/分组函数/聚合函数
max()—最大值 ;min()—最小值 ;avg()—平均值 ;sum()—求和 ;count()—求个数 ;
select max(sal),min(sal),avg(sal),sum(sal),count(sal) from emp
----- 介绍 group by 和 having
----- 查询每个部门里 的最大工资,最小工资,平均工资
select max(sal),min(sal),avg(sal)
from emp
group by deptno
----- 查询 每个岗位的最高工资,最低工资,平均工资
select job,max(sal),min(sal),avg(sal)
from emp
GROUP BY job
----- 查询 1000元以上的每个工资的总人数,总人数低于5个的部门不显示
select deptno,count(*) c
from emp
where sal>1000
GROUP BY deptno
having c>=5
----- 查询 每个经理人所带的手下员工的总人数
select mgr,count(*)
from emp
GROUP BY mgr
----- 查询 在1981年入职的各部门总人数
select deptno,count(*)
from emp
where year(hiredate)=1981
GROUP BY deptno
其他函数
(3)多表查询
===分类
内连接查询,外连接查询
-- from部分
select * from emp,dept (缺少关联关系) 造成--笛卡尔积现象 15*3=45
===内连接查询
----- 【写法一】
select * from emp,dept where emp.deptno=dept.deptno
----- inner join . . . on 【写法二】
inner join —— 内连接 ; on —— 通过on做两张表之间的关联查询
select * from emp inner join dept on emp.deptno=dept.deptno
----- 关键字 using 【写法三】
要求:两张表之间的关联列是同名的
select * from emp inner join dept using(deptno)
----- 自然连接 【写法四】
要求:两张表之间的关联列 同名,同类型,同长度
select * from emp e natural join dept d
----- 自身内连接 (一张表)
----- 例子:查找每个经理的名字,入职时间,和工资
select distinct m.empno,m.ename,m.hiredate
from emp m,emp e
where m.empno=e.mgr
===外连接查询
左外连接 右外连接
——区分原理:一个查询的SQL语句里,第一个表名 叫 左表;第二个表名叫 右表。
如果是内连接查询,左右两个表的地位是一样的
select * from t_emp,dept where dept.deptno=t_emp.deptno
如果使用左外连接查询,那么左表是主表,主表里的数据都会显示出来;右表是子表,子表里的数据,只显示符合连接条件的。
select * from t_emp left join dept on dept.deptno=t_emp.deptno-- 右表做主表
select * from t_emp right join dept on dept.deptno=t_emp.deptno
(4)子查询
{没有子查询,可能要执行很多次,才能得到最终结果 ;有子查询,执行一次就能拿到最终结果}
===分类
不相关子查询(简单) ——单行不相关子查询
——多行不相关子查询
相关子查询 ----》存储过程
----- 单行不相关子查询
--- 查询工资最高的员工信息
select * from emp where sal=(select max(sal) from emp)
--- 查询工资高于平均工资的雇员名字和工资
select ename,sal from emp where sal>(select avg(sal) from emp)
----- 多行不相关子查询
any————任何
all————全部
select * from emp where sal>any/all(select语句)
----- 相关子查询
---查询本部门最高工资的员工
select * from emp e
where sal =(select max(sal) from emp where deptno=e.deptno)
order by deptno
--- 查询工资高于其所在岗位的平均工资
select * from emp e
where sal>= (select avg(sal) from emp where emp.job=e.job)
order by deptno desc
相关文章:

MySQL数据库:SQL语言入门 【上】(学习笔记)
SQL(Structured Query Language)是结构化查询语言的简称,它是一种数据库查询和程序设计语言,同时也是目前使用最广泛的关系型数据库操作语言。(95%适用于所有关系型数据库) 【 SQL是关系型数据库通用的操作…...

重学 Android 自定义 View 系列(六):环形进度条
目标 自定义一个环形进度条,可以自定义其最大值、当前进度、背景色、进度色,宽度等信息。 最终效果如下(GIF展示纯色有点问题): 1. 结构分析 背景圆环:表示进度条的背景。进度圆环:表示当前…...

nodejs 020: React语法规则 props和state
props和state 在 React 中,props 和 state 是管理数据流的两种核心机制。理解它们之间的区别和用途是构建 React 应用程序的基础。 一、props 和 state的区别 特性propsstate定义方式由父组件传递给子组件的数据组件内部管理的本地数据是否可修改不可变ÿ…...

STM32问题集
这里写目录标题 一、烧录1、 Can not connect to target!【ST-LINK烧录】 一、烧录 1、 Can not connect to target!【ST-LINK烧录】 烧录突然 If the target is in low power mode, please enable “Debug in Low Power mode” option from Target->settings menu 然后就&…...

SwiftUI(十二)- 容器组件 布局与结构的基石
引言 在用户界面开发中,布局是设计一个应用程序的视觉层次和交互体验的核心之一。无论是设计简单的按钮排布,还是复杂的多层次页面,合理的布局和结构可以极大地提升用户体验。而容器组件,作为将多个视图整合、组织、排列的工具&a…...

想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)
各位小伙伴们大家好~ 不知道各位同学在科研过程中是否有这样的苦恼 电脑无显卡。难不成我要用CPU跑实验吗?救救我吧电脑显卡算力太低。训练过程慢慢慢慢慢,等半天都出不来结果电脑显卡显存不够,batchsize稍微高一点点,就要爆显存…...

LeetCode【0039】组合总和
本文目录 1 中文题目2 求解方法:回溯法2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 给定一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#…...

AscendC从入门到精通系列(一)初步感知AscendC
1 什么是AscendC Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C标准规范,兼具开发效率和运行性能。基于Ascend C编写的算子程序,通过编译器编译和运行时调度,运行在昇腾AI处理器上。使用Ascend C,开发者…...

PostgreSQL中的COPY命令:高效数据导入与导出
在PostgreSQL数据库中,数据导入和导出是日常工作中常见的操作。传统的插入(INSERT)方法虽然可以实现数据的导入,但在处理大量数据时效率较低。而COPY命令则提供了一个快速、高效的方式来完成这一任务。COPY命令不仅可以用于将数据…...

【HAL库】STM32F105VCTx多通道ADC+DMA方式的【STM32CubeMX】配置及代码实现
相关代码编写 配置好后点击生成代码,在生成代码的adc.c文件中的初始化函数MX_ADC1_Init中添加如下代码: HAL_ADCEx_Calibration_Start(&hadc1); /* 校准ADC */HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Value,ADC_DMA_…...

[SaaS] 数禾科技 AIGC生成营销素材
https://zhuanlan.zhihu.com/p/923637935https://zhuanlan.zhihu.com/p/923637935...

vue3中查找字典列表中某个元素的值对应的列表索引值
vue3中查找字典列表中某个元素的值对应的列表索引值 目录思路方法代码实现示例解释说明 目录 思路方法 要获取字典列表中某个元素的值对应的列表索引值,可以使用数组的 findIndex 方法。这个方法返回数组中满足提供的测试函数的第一个元素的索引。如果没有找到&am…...

爱普生机器人EPSON RC
爱普生机器人Epson RC系列,搭配其专用的Epson RC编程语言和软件环境,为用户提供了一个直观且功能强大的机器人控制和编程解决方案。以下是对Epson RC及爱普生机器人的一些详细介绍: Epson RC 定义:Epson RC 是爱普生机器人技术中…...

Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(1)
1.Linux的背景介绍 Linux 操作系统的发展历程充满了激情与创新喵~🎀 萌芽期 (1983 - 1991):Linux 的历史可追溯到 1983 年,理查德斯托曼 (Richard Stallman) 发起 GNU 计划,目标是创建一个自由软件操作系统。1987 年发…...

❤React-JSX语法认识和使用
1、JSX基本使用 JSX是React的核心 JSX是ES的扩展 jsx语法 -> 普通的JavaScript代码 -> babel React可以使用JSX的前提和原因: React生态系统支持: 脚手架通常用于构建React应用程序,而JSX是React框架的核心语法之一。因此…...

51单片机应用开发(进阶)---定时器应用(电子时钟)
实现目标 1、巩固定时器的配置流程; 2、掌握按键、数码管与定时器配合使用; 3、功能1:(1)简单显示时间。显示格式:88-88-88(时-分-秒) 4、功能2:(1&#…...

JavaScript中的对象-栈内存和堆内存以及this指向的两种情况(后续会出进阶)
1.1 栈内存和堆内存 我们知道程序是需要加载到内存中来执行的,我们可以将内存划分为两个区域:栈内存和堆内存 原始类型占据的空间是在栈内存中分配的对象类型占据的空间是在堆内存中分配的 1.1.1 值类型和引用类型 原始类型的保存方式:在变量中保存的是…...

shell脚本使用curl上传FTP
背景:要求使用curl通过shell脚本实现上传文件到FTP的功能,同时对远程目录不存在的时候,主动创建目录并上传文件,shell脚本如下: #!/bin/bash# FTP服务器的地址 FTP_SERVER"ftp://1.1.1.1:2121" # FTP用户名…...

【漏洞分析】Fastjson最新版本RCE漏洞
01漏洞编号 CVE-2022-25845CNVD-2022-40233CNNVD-202206-1037二、Fastjson知多少 万恶之源AutoType Fastjson的主要功能是将Java Bean序列化为JSON字符串,这样得到的字符串就可以通过数据库等方式进行持久化了。 但是,Fastjson在序列化及反序列化的过…...

【项目开发 | 跨域认证】JSON Web Token(JWT)
未经许可,不得转载。 文章目录 JWT设计背景:跨域认证JWT 原理JWT 结构JWT 使用方式注意JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理、结构及用法。 JWT设计背景:跨域认证 互联网服务的用户认证流程是现代应用中的核心组成部分,通常的流程…...

杨中科 .Net Core 笔记 DI 依赖注入2
ServiceCollection services new ServiceCollection();//定义一个承放服务的集合 services.AddScoped<iGetRole, GetRole>();using (ServiceProvider serviceProvider services.BuildServiceProvider()) {var list serviceProvider.GetServices(typeof(iGetRole));//获…...

微信版产品目录如何制作?
微信作为我国最流行的社交媒体平台,拥有庞大的用户群体。许多企业都希望通过微信来推广自己的产品,提高品牌知名度。制作一份精美、实用的微信版产品目录,是企业微信营销的重要手段。微信版产品目录的制作方法,帮助您轻松入门。 …...

使用HTML、CSS和JavaScript创建动态圣诞树
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏:…...

机器学习-35-提取时间序列信号的特征
文章目录 1 特征提取方法1.1 特征提取过程1.2 两类特征提取方法2 基于数据驱动的方法2.1 领域特定特征提取2.2 基于频率的特征提取2.2.1 模拟信号2.2.2 傅里叶变换2.2.3 抽取最大幅值对应特征2.2.4 抽取峰值幅值对应特征2.3 基于统计的特征提取2.4 基于时间的特征提取3 参考附录…...

【软件测试】设计测试用例的万能公式
文章目录 概念设计测试用例的万能公式常规思考逆向思维发散性思维万能公式水杯测试弱网测试如何进行弱网测试 安装卸载测试 概念 什么是测试用例? 测试⽤例(Test Case)是为了实施测试⽽向被测试的系统提供的⼀组集合,这组集合包…...

【MySQL 保姆级教学】事务的自动提交和手动提交(重点)--上(13)
目录 1. 什么是事务?2. 事务的版本支持3. 事务提交的方式3.1 事务提交方式的分类3.2 演示的准备的工作3.2.1 创建表3.2.2 MySQL的服务端和客户端3.2.3 调低事务的隔离级别 4. 手动提交4.1 手动提交的命令说明4.2 示例一4.3 示例二4.4 示例三4.5 示例四 5. 自动提交5…...

CUDA 核心与科学计算 :NVIDIA 计算核心在计算服务器的价值
在现代科学计算领域,NVIDIA GPU 的计算能力是突破研究瓶颈的关键力量,而其中的 CUDA 核心与科学计算有着紧密的联系。 CUDA 核心于 2007 年开发,是一款基于单指令多线程 (SIMT) 模型的多功能通用核心。它在处理并行计算任务方面能力卓越&…...

架构师之路-学渣到学霸历程-58
Nginx的反向代理实验 今天分享的实验其实就是一个变形;变形uri看看nginx的配置有什么区别; 这个就更加绕,是比较不同的配置路径会有什么的区别? 来看看这个变形会得出什么的效果 1.首先配置后端服务器的资源 首页资源–>1…...

qq相册为啥越来越糊
电子存储衰退的原因 存储设备的失真通常和 存储介质的老化、数据退化、电荷泄漏 等问题有关。尤其是对闪存类存储(如SSD、U盘)来说,随着时间的推移,存储在其中的电荷可能会流失,导致数据损坏。而对于传统的机械硬盘&am…...

<有毒?!> 诺顿检测:这篇 CSDN 文章有病毒
NAS(qnap)中安装git服务(gogs),硬件为TS-453Bmini,固件版本:QTS 5.1.2.2533_qnap git服务器-CSDN博客 https://estar.blog.csdn.net/article/details/134138932 威胁名称:JS:Downloader-GEG [Trj]威胁类型:特洛伊木马…...