【数据库开发】DQL操作和多表设计

数据库开发

一、数据库操作-DQL

1.概述

用来查询数据库表中的记录,查询操作分为两部分,单表操作和多表操作,针对于查询而言(相较于增删改更加的灵活)基于目标分析条件转换为SQL语句

2.语法
SELECT 字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段列表
HAVING分组后条件列表
ORDER BY排序字段列表
LIMIT分页参数
3.基本查询(不带任何条件查询)
  • 查询多个字段

     select 字段1,字段2,字段3 from 表名;
    
  • 查询所有字段

    select * from 表名;
    
  • 设置别名

    select 字段1 [as 别名1],字段2 [as 别名2] from 表名;
    
  • 去除重复记录

    select distinct 字段列表 from 表名;
    
4.条件查询

条件列表:可以有多个条件

select 字段列表 from 表名 where 条件列表;

SQL语句中构建条件的运算符有两类:比较运算符和逻辑运算符

比较运算符中特殊的

比较运算符功能
<>或!=不等于
in(…)在in范围之内的值,多选一
like 占位符模糊匹配(_匹配单个字符,%匹配人任意个字符)
is null是null

常用的逻辑运算符

逻辑运算符功能
and或&&并且(多个条件同时成立)
or或||或者(多个条件任意一个成立)
not或!非,不是
5.聚合函数

之前的查询都是横向查询,根据条件一行一行进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,返回一个结果值(将一列数据作为一个整体,进行纵向计算)

语法:

select 聚合函数(字段列表) from 表名;

聚合函数会忽略空值,对null值不作为统计

常用聚合函数:

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

sum聚合函数计算指定列的数值和时,如果不是数值类型,那么计算结果为0

案例:统计该企业最早入职的员工

select min(entrydate) from tb_emp;
6.分组查询

分组查询是按照某一列或者某几列,把相同的数据进行合并输出,分组查询通常会使用聚合函数进行计算

语法:

select 字段列表 from 表名 [wehere 条件] group by 分组字段 [having 分组后过滤条件];

案例:根据性别分组 , 统计男性和女性员工的数量

select gender, count(*) from tb_emp group by gender; 
7.排序查询

排序查询分为升序排序和降序排序

语法:

select 字段列表 from 表名 [where 条件列表] [group by 分组字段] order by 字段1 排序方式1,字段2,排序方式2...;

排序方式:

  • ASC:升序(默认值)
  • DESC:降序

案例:查询所有男生违纪扣分分数的数据(降序排列)如果分数相同按照扣分次数继续降序排列

SELECT * FROM tb_students WHERE gender = '男' ORDER BY break_law_score DESC,break_law_count DESC;
8.分页查询

语法:

select 字段列表 from 表名 limit 起始索引,查询记录数;

起始索引:从0开始

查询记录数:基于起始索引查询的条数

前台传递到后台只有两个数据(要查询第几页)(每页查询多少条)要基于公式进行换算

公式:起始索引=(要查询的页数-1)*每页显示的条数

案例:查询tb_students 查询第3页 每页展示2条

SELECT * FROM tb_students LIMIT 4 , 2;

二、多表设计

在实际开发中,由于业务之间相互关联,所以各个表结构之间存在着各种联系,分为三种:一对多(多对一)、多对多和一对一

  • 一对多(多对一)

    问题分析:两张表(员工表、部门表),如果删除部门表中的一个部门,那么在这个部门的员工应该也被删除,在数据库层面并未建立关联,造成部门表不存在而在该部门的员工仍然存在,所以无法保证数据的一致性

    问题解决:通过数据库中外键约束来解决

    外键约束:让两张表数据建立连接,保证数据的一致性和完整性

    关键字:foreign key

    语法:

-- 创建表时指定
create table 表名(字段名  数据类型, ...[constraint] [外键名称] foreign key(外键字段名) references 主表(主表列名));
-- 建完表后,添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名)
  • 一对一

    一对一关系表通常用来做单表的拆分,将一张大表拆分成两张小表,将大表中的一些基础字段放在一张表中,将其他的字段放在另一张表中,以此来提高数据的操作效率

    应用场景:用户表(基本信息+身份信息)

    基本信息:用户ID额,姓名、性别、手机号、学历

    身份信息:民族、生日、身份证号、身份签发机关、身份证的有效时间

    一对一添加外键:在任意一方添加外键,关联另一方的主键,并且设置外键唯一(UNIQUE)

  • 多对多

    学生与课程的关系属于多对多,一个学生可以选修多门课程,一门课程也可以供多个学生选择

    实现关系:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

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

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

相关文章

基于安卓android微信小程序的旅游app系统

项目介绍 随着人民生活水平的提高,旅游业已经越来越大众化,而旅游业的核心是信息,不论是对旅游管理部门、对旅游企业,或是对旅游者而言,有效的获取旅游信息,都显得特别重要.自助定制游将使旅游相关信息管理工作规范化、信息化、程序化,提供旅游景点、旅游线路,旅游新闻等服务本…

Java线程池:并发编程的利器

Java线程池&#xff1a;并发编程的利器 在多任务、高并发的时代&#xff0c;Java并发编程显得尤为重要。其中&#xff0c;Java线程池是一种高效的管理线程的工具&#xff0c;能够提高应用程序的性能和响应速度。本文将深入探讨Java线程池的工作原理、应用场景以及简单示例&…

SpringBoot整合POI实现Excel文件读写操作

1.环境准备 1、导入sql脚本&#xff1a; create database if not exists springboot default charset utf8mb4;use springboot;create table if not exists user (id bigint(20) primary key auto_increment comment 主键id,username varchar(255) not null comment 用…

10.5 认识XEDParse汇编引擎

XEDParse 是一款开源的x86指令编码库&#xff0c;该库用于将MASM语法的汇编指令级转换为对等的机器码&#xff0c;并以XED格式输出&#xff0c;目前该库支持x86、x64平台下的汇编编码&#xff0c;XEDParse的特点是高效、准确、易于使用&#xff0c;它可以良好地处理各种类型的指…

学习笔记(css穿透、vue-cookie、拦截器、vuex、导航守卫、token/Cookie、正则校验)

目录 一、记录 1、CSS穿透 2、输入框是否提示输入 3、插槽 #slot 4、v-deep深入改掉属性值 二、vue-cookie 1、官方文档 2、使用 三、拦截器 1、请求拦截器 2、响应拦截器 四、vuex对信息存取改 五、路由导航守卫 1、登录思路 2、设置白名单 六、Token与Cookie…

蓝桥杯每日一题2023.9.30

蓝桥杯大赛历届真题 - C&C 大学 B 组 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 对于此题&#xff0c;首先想到了dfs进行一一找寻&#xff0c;注意每次不要将重复的算进去&#xff0c;故我们每次循环可以记录一个开始的位置&#xff0c;下一次到这个位置时&#xff0c;…

WIFI频段

问题&#xff1a; 5ghzwifi频段带宽怎么选 智造喵回答&#xff1a; 选择5GHz WiFi频段的带宽取决于你的网络需求和设备兼容性。通常有两种可选的带宽&#xff1a;20MHz和40MHz。 20MHz带宽&#xff1a;这是较为常见的 WiFi 频段带宽设置。它提供较好的穿墙能力和信号稳定性…

【MySQL基础】概述、DDL和DML

MySQL基础 1.MySQL概述 安装 MySQL官方提供了两个版本&#xff1a; 商业版本&#xff08;MySQL Enterprise Edition&#xff09; 该版本是收费的&#xff0c;可以使用30天。 官方会提供对应的技术支持。 社区版本&#xff08;MySQL Community Server&#xff09; 该版本是免费…

【数据结构-二叉树 九】【树的子结构】:树的子结构

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【子结构】&#xff0c;使用【二叉树】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

软考程序员考试大纲(2023)

文章目录 前言一、考试说明1.考试目标2.考试要求3&#xff0e;考试科目设置 二、考试范围考试科目1&#xff1a;计算机与软件工程基本知识1&#xff0e;计算机科学基础2&#xff0e;计算机系统基础知识3&#xff0e;系统开发和运行知识4&#xff0e;网络与信息安全基础知识5&am…

WebKit Inside: CSS 样式表的匹配时机

WebKit Inside: CSS 的解析 介绍了 CSS 样式表的解析过程&#xff0c;这篇文章继续介绍 CSS 的匹配时机。 无外部样式表 内部样式表和行内样式表本身就在 HTML 里面&#xff0c;解析 HTML 标签构建 DOM 树时内部样式表和行内样式就会被解析完毕。因此如果 HTML 里面只有内部样式…

【Qt】顶层窗口和普通窗口区别以及用法

区别 在Qt项目开发中&#xff0c;经常会用到窗体控件用于显示及数据操作和其他交互等。 但&#xff0c;窗体分为顶层窗口&#xff08;Top-level Window&#xff09;和普通窗口&#xff08;Regular Window&#xff09;。 他们之间是有区别的&#xff0c;包括在项目实际中的用法…

导出word文件 表格file-saver、html-docx-js-typescript

根据html代码转换为word文件 1、下载file-saver、html-docx-js-typescript npm install file-saver html-docx-js-typescript2、 <span click"downloadWordWithHtmlString()">导出doc</span> <div id"eltable" ref"eltable" st…

【力扣面试题】URL化

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析1、使用String内部方法2、使用StringBuilder 一、题目描述 题目链接&#xff1a;URL化 编写一种…

邮件群发工具哪个好

邮件群发是一种通过电子邮件向多个收件人发送邮件的方式。同时&#xff0c;邮件群发也是一种低成本、高回报的营销手段。因此邮件群发被广泛应用于各种营销活动中&#xff0c;例如活动邀请、新品上线、产品促销等等。而群发邮件最有效的方式就是借助邮件群发工具&#xff0c;而…

业务测试常见问题(一)

如何多维度的分析一个需求&#xff1f; 功能维度&#xff1a;需求中所描述的功能是否实现&#xff0c;与用户的需求是否一致&#xff0c;是否完整符合用户的需求等。 安全性维度&#xff1a;是否有安全漏洞&#xff0c;是否存在未授权访问漏洞等&#xff0c;以保证系统的安全性…

纵享丝滑!Cesium + ffmpegserver 生成高质量动态视频【逐帧生成】

工作中需要提供一些在三维场景下的视频动画素材&#xff0c;屏幕录制会出现掉帧等其他问题&#xff0c;看到 ffmpegserver 后&#xff0c;眼前一亮 Cesium ffmpegserver 生成高质量视频 1.自建 ffmpegserver 首先&#xff0c;克隆 ffmpegserver 仓库代码 git clone https://…

文本自动输入/删除的加载动画效果

效果展示 CSS 知识点 绕矩形四周跑的光柱动画实现animation 属性的 steps 属性值运用 页面基础结构实现 <div class"loader"><!-- span 标签是围绕矩形四周的光柱 --><span></span><span></span><span></span>&l…

Scratch3.0下载

通俗易懂&#xff0c;直接上链接 链接&#xff1a;https://pan.baidu.com/s/1n-QFEQWT8im8BHQu1wIjtg?pwd1016 提取码&#xff1a;1016

zookeeper选举机制

全新集群选举 zookeeper 全新集群选举机制网上资料很多说法很模糊&#xff0c;仔细思考了一下&#xff0c;应该是这样 得到票数最多的机器>机器总数半数 具体启动过程中的哪个节点成为 leader 与 zoo.cfg 中配置的节点数有关&#xff0c;下面以3个举例 选举过程如下 server…