首页 > 编程语言 >JavaWeb学习笔记——第七天

JavaWeb学习笔记——第七天

时间:2024-03-28 13:47:07浏览次数:24  
标签:JavaWeb 外键 查询 分组 笔记 表名 列表 select 第七天

MySQL(二)

数据库查询-DQL

  • DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。
  • 关键字:SELECT

语法

关键字和参数 说明
select 字段列表 基本查询
from 表名列表
where 条件列表 条件查询
group by 分组字段列表 分组查询
having 分组后条件列表
order by 排序字段列表 排序查询
limit 分页参数 分页查询
### 基本查询

查询多个字段:

select 字段1, 字段2, 字段3 from 表名;

查询所有字段(通配符):

select * from 表名;

设置别名:

select 字段1 [ as 别名1 ], 字段2 [ as 别名2 ] from 表名;

去除重复记录:

select distinct 字段列表 from 表名;

注意事项

  • *号代表查询所有字段,在实际开发中尽量少用(不直观、效率低)。
  • 别名会显示在查询结果的表头中。
  • 设置别名时as可省略,且如果别名中包含空格或其他特殊字符,需要用引号围起来。

条件查询

select 字段列表 from 表名 where 条件列表;
select 字段列表 from 表名 where (字段1, 字段2...) = (值1, 值2...); -- 指定多个字段值查询时也可以这样写

条件运算符

比较运算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
between ... and ... 在某个范围之内(含最小、最大值)
in(...) 在in之后的列表中的值,多选一,用逗号分隔
like 占位符 模糊匹配( _ 匹配单个字符,% 匹配任意个字符)
is null 是null
逻辑运算符 功能
and 或 && 并且 (多个条件同时成立)
or 或 || 或者 (多个条件任意一个成立)
not 或 ! 非 , 不是

聚合函数

  • 作用:将一列数据作为一个整体,进行纵向计算。
  • 语法:
select 聚合函数(字段列表) from 表名;
函数 功能
count() 统计数量
max() 最大值
min() 最小值
avg() 平均值
sum() 求和

注意事项

  • null值不参与所有聚合函数运算。
  • 统计数量可以使用:count(*),count(字段),count(常量),推荐使用count(*)。count(*) 的作用是统计表的行数,null也会统计;count(常量)的作用也是统计表的行数,但不包括null; count(字段) 的作用则是统计该字段值中不为null的行数。

分组查询

  • 语法:
select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];
  • where与having区别:
    1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
    2. 判断条件不同:where不能对聚合函数进行判断,而having可以。

注意事项

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
  • 执行顺序:where > 聚合函数 > having 。

排序查询

  • 语法:
select 字段列表 from 表名 [ where 条件列表 ] [ group by 分组字段 [ having 分组后过滤条件 ] ] order by 字段1 排序方式1, 字段2 排序方式2 … ;
  • 排序方式:
    • ASC:升序(默认值)
    • DESC:降序

注意事项

  • 如果是多字段排序,当前面所有字段值都相同时,才会根据当前字段进行排序。

分页查询

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

注意事项

  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 查询记录数。

流程控制函数

  • if表达式:
if(表达式, tvalue, fvalue) -- 当表达式为true时,取值tvalue;当表达式为false时,取值fvalue。
  • case表达式:
case expr when value1 then result1 [when value2 then value2 ...] [else result] end -- 类似于Java中的switch语句

多表设计

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多(多对一)
  • 多对多
  • 一对一

一对多

  • 例子:部门及员工的关系。

  • 一对多关系实现:在数据库表中多的一方添加字段,来关联一的一方的主键。

  • 此时,一的一方也叫父表,多的一方也叫子表。

外键约束

  • 在数据库层面,将父表和子表建立起关联,以保证数据的一致性和完整性。
物理外键
  • 概念:使用 foreign key 定义外键关联另外一张表。

  • 语法:

-- 创建表时指定
create table 表名(
	字段名 数据类型,
	...
	[constraint] [外键名称] foreign key (外键字段名) references 父表名(字段名)	
);

-- 建完表后,添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 父表名(字段名);
  • 缺点:
    • 影响增、删、改的效率(需要检查外键关系)。
    • 仅用于单节点数据库,不适用与分布式、集群场景。
    • 容易引发数据库的死锁问题,消耗性能。
逻辑外键
  • 概念:在业务层逻辑中,解决外键关联。
  • 通过逻辑外键,就可以很方便的解决物理外键的问题。
  • 推荐使用。

一对一

  • 例子:用户与身份证信息的关系。

  • 一对一的关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率。

  • 实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)。

多对多

  • 例子:学生与课程的关系。
  • 一个学生可以选修多门课程,一门课程也可以供多个学生选择。
  • 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。

标签:JavaWeb,外键,查询,分组,笔记,表名,列表,select,第七天
From: https://www.cnblogs.com/zgg1h/p/18101459

相关文章

  • webpack 3 入门笔记
    生产/开发环境生产环境便于开发求方便开发环境便于部署求小体积小项目:用环境名if(evn===proudtion){}else{}大项目:dev(mergecommon),prod(mergecommon)三个文件通过script指令rundev和runbuild--config不同的配置文件。****开发环境:1公共变量2tr......
  • Maven 个人笔记
     常见问题整理1.mvn项目的生命周期是怎样的        Maven项目的主要生命周期阶段包括编译、测试、打包等,以下是这些阶段的详细介绍:编译(Compile):在编译阶段,Maven将项目的源代码(通常是Java源代码)编译成可执行代码。这涉及到源代码的语法检查、错误修正以及将源代码......
  • 《自动机理论、语言和计算导论》阅读笔记:p49-p67
    《自动机理论、语言和计算导论》学习第4天,p49-p67总结,总计19页。一、技术总结1.DeterministicFiniteAutomata(DFA)vsNondeterministicFiniteAutomata(NFA)(1)DFA定义(2)NFA定义A"nonedeterministic"finiteautomatahasthepowertobeinseveralstatesatonce......
  • 算法小笔记0328
    1ios::sync_with_stdio(0);ios::sync_with_stdio(false);是C++中用于关闭C++输入输出流(iostream)与C输入输出库(stdio)同步的语句。默认情况下,C++的流库与C的stdio库是同步的,这意味着你可以混用cin,cout和scanf,printf等而不会出现问题。但是这种同步会导致性能下......
  • On Java8读书笔记
    ObjectsEveryWhere使用Reference掌控对象掌控一个对象有两种不同的方式:直接掌控变量本身or间接掌控一个"通道",通过"通道"可以掌控对象在Java中,我们通过间接的方式掌控对象,而这个"通道"就是ReferenceReference不同于对象本身,对象本身往往是"臃肿的"(对象内包括字段和......
  • JavaWeb——HttpServletRequest获取请求头信息和请求中的参数信息用法
    HttpServletRequest接口提供了访问HTTP请求信息的方法,包括请求行和请求头。下面是一些常用的HttpServletRequest方法,用于获取请求行和请求头信息。StringgetMethod():返回请求的HTTP方法,如GET、POST等。StringgetRequestURI():返回请求的URI,不包括查询字符串。String......
  • 基于HarmonyOS的阅读笔记助手的APP开发第一天
    1.设计原型书籍界面原型书籍阅读界面原型笔记界面原型笔记记录界面原型软件设置界面原型......
  • opensips的dispatcher模块笔记
    操作系统:CentOS7.6_x64opensips版本:2.4.9dispatcher模块模块实现了基于目的地址的调度功能,可用作无状态负载均衡,但不能保证均匀分配。今天整理下CentOS7环境下opensips2.4.9的dispatcher模块使用示例,并提供运行效果视频。我将从以下几方面进行展开:模块数据库说明模块参......
  • 学习java时候的笔记(四)
    数组什么是数组?数组指的是一种容器,可以用来储存同种数据类型的多个值一维数组一维数组的定义:格式1数据类型[]数组名例:int[]array格式2数据类型数组名[]例intarray[]一维数组的静态初始化初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中......
  • java基础 韩顺平老师的 面向对象(高级) 自己记的部分笔记
     373,类变量引出 代码就提到了问题分析里的3点packagecom.hspedu.static_;publicclassChildGame{publicstaticvoidmain(String[]args){//定义一个变量count,统计有多少小孩加入了游戏intcount=0;Childchild1=newChild(......