软件设计之MySQL(2)

news2024/9/22 3:46:22

软件设计之MySQL(2)

此篇应在JavaSE之后进行学习:
路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
Navicat可以在软件管家下载
使用navicat连接mysql数据库创建数据库、表、转储sql文件,导入sql数据

学习内容:

  1. 基础的SELECT语句
  2. 运算符
  3. 排序与分页
  4. 多表查询
  5. 新特性:自然连接与USING

1、基础的SELECT语句

SELECT 字段1,字段2,…FROM表名
FROM DUAL 其中dual是伪表
SEKECT * FROM 表名 其中*表示所有的字段

列的别名

别名:alias,可以用一对“”引起来
结果集的概念:查询语句返回的结果叫做结果集
举例: SELECT 字段1 AS(可省略) 别名(可以另起一个名字)
结果集中对应的字段1会显示为设置的别名

去除重复行

默认情况下,查询会返回全部行,包括重复行
在SELECT语句中使用关键字DISTINCT去除重复行

SELECT DISTINCT department_id
FROM employees;

空值参与运算

空值:NULL
空值不等同于0,''
当空值参与运算时,结果一定也是空值(null)
commission_pct为null,则annual_sal返回的也是null

SELECT employee_id,salary,commission_pct,
12 * salary * (1 + commission_pct) "annual_sal"
FROM employees;

着重号

``TAB上的`
必须保证你的字段没有和保留字、数据库系统或常用方法冲突
当冲突的时候,在SQL中就需要使用着重号

SELECT * FROM  `order`

查询常数

在 SELECT 查询结果中增加一列固定的常数列
从employees表中查询corporation, last_name,并在结果中返回一列固定的常数列‘尚硅谷’

SELECT '尚硅谷' as corporation, last_name FROM employees;

显示表结构

使用DESCRIBE 或 DESC 命令,表示表结构
显示表中字段的详细信息,比如类型、是否可以写为空等

过滤条件

使用WHERE 子句,将不满足条件的行过滤掉

SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;

2、运算符

算数运算符

      • (/ 或 div) (% 或mod)
        1、在SQL中 +没有连接的作用,仅表示加法运算,
        2、取模正负结果仅与被模数正负有关,且符号一致
SELECT 100 + '1' 
FROM DUAL;
SELECT 100 + 'a' 
FROM DUAL; # 非数字字符串进行加法运算,作为0处理
SELECT 100 + NULL 
FROM DUAL;# NULL
SELECT 100 DIV 0
FROM DUAL;# NULL

比较运算符

比较结果有三种,真返回1;假返回0,其他情况返回NULL
1、=等于:如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
2、不等于:!= 或者 <>,此外还有非符号类型运算符
IS NULL:判断是否为空;IS NOT NULL :判断是否不为空 ISNULL(函数形式)
LEAST():返回最小值GREATEST():返回最大值.两字符串比较,不按长度,而是按从左至右的顺序比APP与ABD,ABD小
BETWEEN 条件下界1 AND 条件上界2
数据 IN(数据1,数据2,数据3) #查询数据中是否存在数据1,2,3,
LIKE ‘%a%’ :表示查询不确定有几个字符,但字符包含a或A的数据
LIKE ‘a%’ :表示查询末尾不确定有几个字符,但首个字符包含a或A的数据
3、<=>安全等于:为了处理NULL判断而出现
在这里插入图片描述

SELECT 1 = 1,  1!=2, 1= '1', 0 = 'a'
FROM DUAL;# 1,1,1,1
SELECT 'a' = 'a', 'a' = 'b'
FROM DUAL;# 1,0
SELECT 1 = NULL, NULL = NULL
FROM DUAL;# NULL,NULL
SELECT 1 <=>NULL, NULL<=> NULL
FROM DUAL;# 0,1
SELECT salary
FROM employees;
WHERE salary IS NOT NULL
SELECT salary
FROM employees;
WHERE ISNULL(salary)
SELECT LEAST('g','t'),GREATEST('a','b')
FROM DUAL;# g,b

逻辑运算符

1、四种逻辑运算符:或、与、非、异或
2、三种返回结果:1、0、NULL
3、逻辑非(NOT或!)运算符表示当给定的值为0时返回1;当给定的值为非0值时返回0;当给定的值为NULL时,返回NULL
4、逻辑与(AND或&&)运算符是当给定的所有值均为非0值,并且都不为NULL时,返回
1;当给定的一个值或者多个值为0时则返回0;否则返回NULL。(1 AND NULL 返回NULL)
5、逻辑或(OR或||)运算符是当给定的值都不为NULL,并且任何一个值为非0值时,则返
回1,否则返回0;当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;当两个值都为NULL时,返回NULL。
6、逻辑异或(XOR)运算符是当给定的值中任意一个值为NULL时,则返回NULL;如果
两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1。
在这里插入图片描述

位运算符

按位与(&)运算符将给定值对应的二进制数逐位进行逻辑与运算。当给定值对应的二
进制位的数值都为1时,则该位返回1,否则返回0。
按位或(|)运算符将给定的值对应的二进制数逐位进行逻辑或运算。当给定值对应的
二进制位的数值有一个或两个为1时,则该位返回1,否则返回0。
按位取反(~)运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变
为1
按位取反(~)运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变
为1
在一定范围内满足:向左移一位,相当于乘2;向右移一位,相当于除以2
按位右移(>>)运算符将给定的值的二进制数的所有位右移指定的位数。右移指定的
位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0补齐
>按位左移(<<)运算符将给定的值的二进制数的所有位左移指定的位数。左移指定的
位数后,左边高位的数值被移出并丢弃,右边低位空出的位置用0补齐。

3、排序与分页

排序

1、如果没有使用排序操作,默认情况下查询返回的数据是按照添加的顺序显示的
2、使用ORDER BY 对查询到的数据进行排序操作[默认升序排列,从低到高]
3、升序操作:ASC(ascend)
4、降序操作:DESC(descend)
5、列的别名只能在ORDER BY中使用,却不能在WHERE中使用
解释:执行顺序是先从FROM选取表,再通过WHERE筛选,接着SELECT(这里才出现别名)
格式:WHERE需要声明在FROM后,ORDER BY之前

#以salary的降序排列,从高到低
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC;

二级排序

当第一次排序有相同数值的情况下需要二级排序
先department_id降序,在基于此,对salary升序排列

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

分页

LIMIT关键字
顺序:WHERE>ORDER BY>LIMIT
公式:LIMIT (pageNo-1) * pageSize,pageSize;
8.0新特性: LIMIT pageSize OFFSET (pageNo-1) * pageSize

SELECT employee_id,last_name
FROM employees
LIMIT 0,20;# 0表示偏移量(从第一条数据开始),20表示每一页20条记录
SELECT employee_id,last_name
FROM employees
LIMIT 20,20;# 20表示偏移量(从第20条数据开始),20表示每一页20条记录

4、多表查询

笛卡尔积错误:是指当你在查询中没有使用适当的连接条件时,两个表的所有行的组合。这个错误通常会导致返回的结果集非常大,因为每一行都与另一个表中的每一行组合。例如,如果有两个表 A 和 B,表 A 有 10 行,表 B 有 20 行,那么没有任何连接条件的查询将返回 10 × 20 = 200 行的结果集。这种情况通常不是你想要的结果。
出错原因:省略多个表的连接条件(或关联条件)、连接条件(或关联条件)无效、所有表中的所有行互相连接
正确方式:需要有连接条件
注意点
1、如果查询语句中出现多个表都存在的字段,必须指明此字段所在的表
2、从SQL优化角度,建议多表查询时,每个字段前都指明其所在的表
3、可以给表起别名,在SELECT和WHERE中使用表的别名(使用了就得都用)
4、如果有n个表实现多表查询,则需要n-1个连接条件

#别名
SELECT emp.employee_id
FROM employees emp
WHERE emp.'department_id'=10;

多表查询分类

角度1:等值连接 vs非等值连接
角度2:自连接vs非自连接
角度3:内连接vs外连接

非等值连接

表1的值并非等于表2的值,而是处于表2值的某个范围

SELECT e.last_name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;

自连接

自连接(Self-Join)是一种特殊类型的连接操作,其中一个表与自身进行连接。自连接通常用于在同一个表中比较记录或找出相关数据。它的主要用途是处理表中存在父子关系或相似记录的情况。

#每个员工ID对应了一个领导的ID
SELECT emp.employee_id,emp.last_name, mgr.employee_id,mgr.last_name
FROM employees emp,employees mgr
WHERE emp.manager_id = mgr.employee_id

UNION相关操作符

假设A有107条数据,B有108条数据,两人交集部分是106条数据
UNION操作符:返回两个查询结果的并集,去除重复记录,即1+106+2条数据
UNION ALL操作符,返回两个查询结果的并集,不去重,即1+106+106+2条数据
如果明确知道合并数据不存在重复,优先用UNION ALL

内连接与外连接

1、内连接返回两个表中符合连接条件的记录。也就是说,它只返回在所有表中都存在的匹配记录。如果某些记录在其中一个表中找不到匹配项,那么这些记录将不会出现在结果中。
2、外连接返回符合连接条件的记录以及在一个表中存在但在另一个表中没有匹配的记录。外连接分为三种类型:
(1)左外连接:返回左表中的所有记录以及右表中匹配的记录。如果右表中没有匹配项,结果中会显示左表的记录以及右表的空值(NULL)。
(2)右外连接:返回右表中的所有记录以及左表中匹配的记录。如果左表中没有匹配项,结果中会显示右表的记录以及左表的空值(NULL)。
(3)全外连接:返回两个表中所有记录。当一个表中的记录在另一个表中找不到匹配时,结果中会显示两个表的记录,并且没有匹配项的列显示 NULL。[MySQL不支持FULL OUTER JOIN]

#内连接,添加一个表join一下,再ON后加条件
SELECT last_name,department_name,city
FROM employees e 
JOIN departments d
ON e.department_id = d.department_id
JOIN locations l
ON d.location_id = l.location_id;
#左外连接
SELECT last_name,department_name
FROM employees e 
LEFT JOIN departments d
ON e.department_id = d.department_id
#右外连接
SELECT last_name,department_name
FROM employees e 
RIGHT JOIN departments d
ON e.department_id = d.department_id

外连接解决方案

1、利用左上图和右中图UNION ALL连接
2、利用左中图和右上图UNION ALL连接
在这里插入图片描述

#左上图
SELECT employee_id,department_name
FROM employees e 
LEFT JOIN departments d
ON e.department_id = d.department_id
UNION ALL
#右中图
SELECT employee_id,department_name
FROM employees e 
RIGHT JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL

5、新特性:自然连接与USING

自然连接

它会帮你自动查询两张连接表中所有的相同字段,进行等值连接

USING

使用JOIN…USING可以简化JOIN ON的等值连接

SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`
#使用USING
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
USING (department_id);

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

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

相关文章

数据分析:宏基因组数据的荟萃分析

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 介绍 宏基因组数据的荟萃分析是一种综合多个独立宏基因组研究结果的方法&#xff0c;目的是揭示不同人群或样本中微生物群落的共同特征和差异。这种方法特别适用…

ubantu安装python3.10

1.从官网下载安装 1.1安装依赖 sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev1.2从官网下载源文件 wget https://www.python.org/ftp/pyth…

设计资讯 | 巴黎 2024 年奥运会“另一个自我”以 DAB 汽车定制电动摩托车的形式亮相

巴黎 2024 年奥运会运动作为定制电动摩托车 DAB Motors 融入了2024 年巴黎奥运会的精神&#xff0c;通过其定制电动摩托车诠释了奥运会的五环。这些车辆由其服务部门 DAB Custom Studio (DCS) 提供&#xff0c;颜色编码与奥运五环一样。每种颜色代表一项运动&#xff1a;蓝色代…

RobotFramework框架+Selenium实现UI自动化测试(十六)

学习目录 1 UI自动化测试 2安装RF框架所需的 robotframework-seleniumlibrary包 1&#xff09; robotframework-seleniumLibrary版本说明 2&#xff09; robotframework-selenium2Library版本说明 3 selenium介绍 3.1 配置操作系统环境支持使用selenium打开浏览器 3.2 s…

「OC」简单网络请求的实现

「OC」简单网络请求的实现 文章目录 「OC」简单网络请求的实现写在前面URL和API网络请求的流程网络申请数据解析参考文章 写在前面 在暑假最后一个项目天气预报之中&#xff0c;使用了网络请求&#xff0c;虽然说还是不太理解网络请求之中的相关内容&#xff0c;以及在写天气预…

傻瓜式一步到位Mysql 8.0 密码修改

5.7之前修改密码语句 update user set authentication_string password(“root”) where user “root”; mysql 5.7.9以后废弃了password字段和password()函数&#xff1b;并在user表加了authentication_string:字段表示用户密码 #进入到mysql 安装目录下 #停止 mysql 服务 …

低碳环保测试知识问答活动

全国生态日&#xff0c;倒计时1天。为了组织这场关于“低碳环保测试知识问答”主题的线上知识竞赛&#xff0c;我们历经从活动方案策划到落地答题小程序上线。 一、活动背景 通过举办此次知识竞赛&#xff0c;旨在提高公众对低碳环保的认识和参与度&#xff0c;推广低碳生活方…

网络协议七 应用层 DNS协议 和 DHCP协议 这两个都了解就好

应用层常见的协议 1. DNS 协议 了解 将baidu.com 解析成具体IP的协议 实际上可以理解为&#xff1a;客户端 通过 DNS 协议 和 DNS 服务器进行交互&#xff0c;将域名转换成IP 2. DHCP 协议 了解 从DHCP 服务器自动获取IP地址

P1305 新二叉树

题目&#xff1a; 洛谷传送门&#xff1a;P1305 新二叉树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int n,ans; char root; struct node{char nod,r,l; }a[100000]; void dfs(char idx){cout<…

Erupt 项目搭建

创建Spring Boot项目 Maven依赖 Spring Boot版本为 2.7.10&#xff0c;erupt版本为 1.12.14 erupt版本要与Spring Boot版本适配&#xff0c;3.x.x版本Spring Boot暂不适用说是 <properties><erupt.version>1.12.14</erupt.version></properties> <…

全场景——(三)USB开发基础(1)

文章目录 一、USB 系统硬件框架和软件框架1.1 实验现象1.2 硬件框架1.3 软件框架 二、USB 电气信号2.1 USB 设备状态切换图2.2 硬件线路2.3 电子信号2.4 低速/全速信号电平2.5 高速信号电平2.6 设备连接与断开2.6.1 连接2.6.2 断开 2.7 复位2.8 设备速率识别2.8.1 低速/全速2.8…

【STM32】入门教程(完整版汇总非常详细)

本教程参考b站江协科技STM32入门教程&#xff0c;视频链接&#xff1a; 哔哩哔哩江协科技STM32入门教程https://www.bilibili.com/video/BV1th411z7sn/?spm_id_from333.337.search-card.all.click “唯一能持久的竞争优势是胜过竞争对手的学习能力。”——盖亚斯 希望对您有帮…

栈的定义及基本操作

栈的定义和特点 栈是一个特殊的线性表&#xff0c;是限定在一端进行插入和删除操作的线性表&#xff1b; 插入到栈顶称作入栈&#xff08;PUSH) 从栈顶删除最后一个元素称作出栈 &#xff08;POP&#xff09; 图1 栈的表示 假设三个元素a,b,c入栈顺序为a&#xf…

【洛谷/水滴题解】[NOIP2005 普及组] 采药

1.难度&#xff1a;普及- 2.类型&#xff1a;dp&#xff0c;01背包 3.描述&#xff0c;输入输出格式&#xff0c;样例&#xff1a; 4.AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int t,m; int dp[1005]; int main() {ios::sync_with_stdio(false…

MySQL第8讲--DCL(数据控制语言)的基本操作

文章目录 前言DCL(数据控制语言)用户管理查询用户创建用户修改用户密码删除用户 权限控制查询权限授予权限撤销权限 前言 在第六讲MySQL第6讲–DQL(数据查询语言)的基本操作之基本和条件查询和第七讲MySQL第7讲–DQL(数据查询语言)的基本操作中我们讲述了DQL中的&#xff0c;基…

高性能云桌面在工业设计中的应用,百度智能云云桌面给出答案

在之前的文章中我们讲到&#xff0c;边缘云桌面可以通过在距离用户较近的边缘节点上直接处理数据和应用&#xff0c;减少了数据传输时间&#xff0c;降低延迟&#xff0c;提高数据处理的速度和安全性。用户可以通过任何设备&#xff0c;随时随地访问自己的桌面环境&#xff0c;…

每日OJ_牛客HJ59 找出字符串中第一个只出现一次的字符

目录 牛客HJ59 找出字符串中第一个只出现一次的字符 解析代码 牛客HJ59 找出字符串中第一个只出现一次的字符 找出字符串中第一个只出现一次的字符_牛客题霸_牛客网 解析代码 可以用一个数组的每一个位置表示对应的位置。对应的字符位置存放字符出现的次数。统计完之后&…

【云备份】学习bundle库

文章目录 1.认识bundle⽂件压缩库bundle库实现⽂件压缩bundle实现文件解压缩 1.认识bundle⽂件压缩库 BundleBundle 是一个嵌入式压缩库&#xff0c;支持23种压缩算法和2种存档格式。使用的时候只需要加入两个文件 bundle.h 和 bundle.cpp 即可。 showcase #include <cass…

安全入门day.02

一、环境部署 1、windows版本 2、Linux版本 二、WEB应用组成角色名词 1、开发语言 2、程序源码 3、中间件容器 4、数据库 5、服务器操作系统 6、第三方软件 三、WEB应用安全漏洞分类 1、SQL注入 2、文件安全 3、RCE执行 4、XSS跨站 5、CSRF/SSRF/CRLF 6、反序列…

基于RK3568 Android11 移除长按电源按键弹窗的对话框中的 [关机] 和 [紧急呼救] 选项(详细分析)

一般来说&#xff0c;与Android按键窗口事件相关的基本是与frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java 这个文件有关。   因此先打开与输入相关的日志&#xff0c;如下&#xff1a;   然后重新编译烧录后查看打印的日志可以看…