8.13 JavaWeb(MySQL P89-P103)

DML(數據操作語言)

Data Manipulation Language,用來對數據庫表中的數據記錄進行增、刪、改操作

添加數據

-- DML : 數據操作語言
-- DML : 插入數據 - insert
-- 1.為tb_emp表的username,name,gender字段插入值
insert into tb_emp(username, name, gender,create_time, update_time)values ('wuji', '張無忌', 1, now(), now());-- 2.為tb_emp表的所有字段插入值
insert into tb_emp values (null, 'zhiruo', '123', '周芷若', 2, '1.jpg', 1, '2010-01-01', now(), now());-- 3.批量為tb_emp表的username, name, gender字段插入數據
insert into tb_emp(username, name, gender,create_time, update_time)values ('weifuwang', '韋一笑', 1, now(), now()),('xieshiwang', '謝遜', 1, now(), now());

注意:

1.插入數據時,指定的字段順序需要與值的順序是一一對應的

2.字符串和日期型數據應該包含在引號中

3.插入的數據大小,應該在字段的規定范圍內

修改數據

-- DML : 更新數據 - update
-- 1.將tb_emp表的ID為1的員工姓名name字段更新為‘張三’
update tb_emp set name = '張三', update_time = now() where id = 1;-- 2.將tb_emp表的所有員工的入職日期更新為‘2010-01-01’
update tb_emp set entrydate = '2010-01-01', update_time = now();

刪除數據

-- DML : 刪除數據 - delete
-- 1.刪除tb_emp表中ID為1的員工
delete from tb_emp where id = 1;-- 2.刪除tb_emp表中的所有員工
delete from tb_emp;

注意:delete不能刪除某一個字段的值,如果要操作應該使用update將該字段值設為null

DQL(數據查詢語言)

Data Query Language,用來查詢數據庫表中的記錄

基本查詢

-- DQL : 基本查詢
-- 1.查詢指定字段 name,entrydate 并返回
select name, entrydate
from tb_emp;-- 2.查詢返回所有字段
-- 推薦
select id, username, password, name, gender, image, job, entrydate, create_time, update_time
from tb_emp;-- 不推薦(不直觀、性能低)
select *
from tb_emp;-- 3.查詢所有員工的name, entrydate,并起別名(姓名,入職日期)
select name as 姓名, entrydate  入職日期
from tb_emp;-- 4.查詢已有的員工關聯了哪幾種職位(不要重復)
select distinct job
from tb_emp;

條件查詢

-- DQL : 條件查詢-- 1.查詢 姓名為楊逍的員工
select *
from tb_emp
where name = '楊逍';-- 2.查詢 id小于等于5的員工信息
select *
from tb_emp
where id <= 5;-- 3.查詢沒有分配職位的員工信息
select *
from tb_emp
where job is null;-- 4.查詢有職位的員工信息
select *
from tb_emp
where job is not null;-- 5.查詢密碼不等于‘123456’的員工信息
select *
from tb_emp
where password != '123456';select *
from tb_emp
where password <> '123456';-- 6.查詢入職日期在‘2000-01-01’(包含)到‘2010-01-01’(包含)之間的員工信息
select *
from tb_emp
where entrydate between '2000-01-01' and '2010-01-01';-- 7.查詢入職時間在‘2000-01-01’(包含)到‘2010-01-01’(包含)之間且性別為女的員工信息
select *
from tb_emp
where entrydate between '2000-01-01' and '2010-01-01' and gender = 2;-- 8.查詢職位是2(講師),3(學工主管),4(教研主管)的員工信息
select *
from tb_emp
where job in (2,3,4);-- 9.查詢姓名為兩個字的員工信息
select *
from tb_emp
where name like '__';-- 10.查詢姓‘張’的員工信息
select *
from tb_emp
where name like '張%';

分組查詢

-- DQL : 分組查詢
-- 聚合函數 : 不對null值進行計算-- 1.統計該企業員工數量
select count(id)
from tb_emp;select count(1)
from tb_emp;-- 推薦,因為底層對count(*)作了優化
select count(*)
from tb_emp;-- 2.統計該企業最早入職的員工
select min(entrydate)
from tb_emp;-- 3.統計該企業最遲入職的員工
select max(entrydate)
from tb_emp;-- 4.統計該企業員工ID的平均值
select avg(id)
from tb_emp;-- 5.統計該企業員工的ID之和
select sum(id)
from tb_emp;

-- 分組
-- 1.根據性別分組,統計男性和女性員工的數量
select gender, count(*) -- 注意要返回分組字段
from tb_emp
group by gender;-- 2.先查詢入職時間在‘2015-01-01’(包含)以前的員工,并對結果根據職位分組,獲取員工數量大于等于2的職位
select job
from tb_emp
where entrydate<='2015-01-01'-- where不能使用聚合函數
group by job
having count(*)>=2;

where和having的區別:

1.執行時機不同:where是分組之前進行過濾,不滿足where條件不參與分組;而having是分組后對結果進行過濾

2.判斷條件不同:where不能對聚合函數進行判斷,而having可以

排序查詢

-- 排序查詢
-- 1.根據入職時間,對員工進行升序排序
select *
from tb_emp
order by entrydate;-- 2.根據入職時間,對員工進行降序排序
select *
from tb_emp
order by entrydate desc;-- 3.根據入職時間對公司的員工進行升序排序,入職時間相同,再按照更新時間進行降序排序
select *
from tb_emp
order by entrydate, update_time desc;

分頁查詢

-- 分頁查詢
-- 1.從起始索引0開始查詢員工數據,每頁展示5條記錄
select *
from tb_emp
limit 0,5;-- 2.查詢第1頁員工數據,每頁展示5條記錄
select *
from tb_emp
limit 0,5;-- 3.查詢第2頁員工數據,每頁展示5條記錄
select *
from tb_emp
limit 5,5;-- 4.查詢第3頁員工數據,每頁展示5條記錄
select *
from tb_emp
limit 10,5;-- 起始索引 = (頁碼-1)*每頁展示記錄數

注意:

1.起始索引從0開始,起始索引 = (查詢頁碼-1)*每頁顯示的記錄數

2.分頁查詢是數據庫的方言,不同的數據庫有不同的實現,MySQL中是limit

3.如果查詢的是第一頁數據,起始索引可以省略,直接簡寫為 limit 10

案例

1.根據需求完成員工管理的條件分頁查詢

-- 案例1 : 按需求完成員工管理的條件分頁查詢 - 根據輸入條件,查詢第一頁數據,每頁展示10條記錄
-- 輸入條件:-- 姓名:張-- 性別:男-- 入職時間:2000-01-01   2015-12-31select *
from tb_emp
where name like '張%'and gender = 1and entrydate between '2000-01-01' and '2015-12-31'
order by update_time desc
limit 0,10;

2.根據需求,完成員工信息的統計

-- 案例2-1 : 根據需求,完成員工性別信息的統計
-- if(條件表達式,true取值,false取值)
select if(gender=1,'男性員工', '女性員工') 性別, count(*)
from tb_emp
group by gender;-- 案例2-2 : 根據需求,完成員工職位信息的統計
-- case 表達式 when 值1 then 結果1 when 值2 then 結果2 ...end
select (case jobwhen 1 then '班主任'when 2 then '講師'when 3 then '學工主管'when 4 then '教研主管'else '未分配職位'end) 職位,count(*) 數量
from tb_emp
group by job;

多表設計

項目開發中,在進行數據庫表結構設計時,會根據業務需求及業務模塊之間的關系,分析并設計表結構,由于業務之間相互關聯,所以各個表結構之間也存在著各種聯系,基本上分為三種:一對多、多對多、一對一

一對多

需求:根據頁面原型及需求文檔,完成部門及員工模塊的表結構設計

首先創建一個員工表和一個部門表,這里員工表新增一個字段dept_id表示歸屬部門的id

-- 員工
create table tb_emp (id int unsigned primary key auto_increment comment 'ID',username varchar(20) not null unique comment '用戶名',password varchar(32) default '123456' comment '密碼',name varchar(10) not null comment '姓名',gender tinyint unsigned not null comment '性別, 說明: 1 男, 2 女',image varchar(300) comment '圖像',job tinyint unsigned comment '職位, 說明: 1 班主任,2 講師, 3 學工主管, 4 教研主管',entrydate date comment '入職時間',dept_id int unsigned comment '部門ID',create_time datetime not null comment '創建時間',update_time datetime not null comment '修改時間'
) comment '員工表';-- 部門
create table tb_dept(id int unsigned primary key auto_increment comment 'ID',name varchar(10) not null unique comment '部門名稱',create_time datetime not null comment '創建時間',update_time datetime not null comment '修改時間'
) comment '部門表'

出現的問題:部門數據可以直接刪除,例如在部門表中刪除某各部門,然而還有部分員工歸屬于該部門下,此時就出現了數據的不完整、不一致問題

這里就不采用SQL語句建立外鍵了,直接使用圖形化工具

物理外鍵

概念:使用foreign key定義外鍵關聯另外一張表

缺點:影響增、刪、改的效率(需要檢查外鍵關系)

? ? ? ? ? ?僅用于單節點數據庫,不適用與分布式、集群場景

? ? ? ? ? ?容易引發數據庫的死鎖問題,消耗性能

邏輯外鍵

概念:在業務邏輯中,解決外鍵關聯(代碼中解決)

通過邏輯外鍵,就可以很方便的解決上述問題

一對一

案例:用戶與身份證信息的關系

關系:一對一關系,多用于單表拆分,將一張表的基礎字段放在一張表中,其他字段放在另一張表中,以提升操作效率

實現:在任意一方加入外鍵,關聯另外一方的主鍵,并且設置外鍵為唯一的(unique)

多對多

案例:學生與課程的關系

關系:一個學生可以選修多門課程,一門課程也可以供多個學生選擇

實現:建立第三張中間表,中間表至少包含兩個外鍵,分別關聯兩方主鍵

案例

需求:參考頁面原型及需求,設計合理的表結構

分類表、菜品表、套餐表的關系如圖所示,菜品表和套餐表是多對多關系,因此建立了一個中間表

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918667.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918667.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918667.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 類元編程(元類基礎知識)

元類基礎知識 元類是制造類的工廠&#xff0c;不過不是函數&#xff08;如示例 21-2 中的 record_factory&#xff09;&#xff0c;而是類。圖 21-1 使用機器和小怪獸圖示法描述元 類&#xff0c;可以看出&#xff0c;元類是生產機器的機器。根據 Python 對象模型&#xff0c;類…

【Vue 3 響應式系統深度解析:reactive vs ref 全面對比】

Vue 3 響應式系統深度解析&#xff1a;reactive vs ref 全面對比 目錄 概述響應式系統基礎reactive 深度分析ref 深度分析底層實現原理依賴收集機制演進解構和轉換工具常見誤區和陷阱技術選型指南最佳實踐和建議 概述 Vue 3 引入了基于 Proxy 的全新響應式系統&#xff0c;…

JavaSE高級-01

文章目錄1. 異常異常的分類自定義異常異常的處理資源關閉&#xff1a;try-with-resource2. 泛型泛型類泛型接口泛型方法、通配符、上下限通配符泛型的上下限泛型支持的類型3. 包裝類4. Collection集合和Map集合4.1 Collection集合Collection集合特點Collection的遍歷方式一&…

MyBatis執行器與ORM特性深度解析

一、MyBatis的Executor執行器詳解1. MyBatis執行器類型MyBatis有三種核心執行器實現&#xff0c;在org.apache.ibatis.executor包中定義&#xff1a;執行器類型特點描述SimpleExecutor默認執行器&#xff0c;每次執行都會創建新的Statement對象ReuseExecutor重用預處理語句(Pre…

紅黑樹的特性與實現

在數據結構領域&#xff0c;二叉搜索樹&#xff08;BST&#xff09;憑借 O (log n) 的平均時間復雜度成為查找、插入和刪除操作的優選結構。但它有個致命缺陷&#xff1a;當輸入數據有序時&#xff0c;會退化為鏈表&#xff0c;時間復雜度驟降至 O (n)。為解決這一問題&#xf…

ClickHouse從入門到企業級實戰全解析課程簡介

【課程簡介】你是否正在面臨這些挑戰&#xff1f;海量數據的分析查詢慢如蝸牛&#xff0c;報表一等就是幾小時&#xff1f;想構建實時數倉&#xff0c;卻不知如何高效處理 Kafka 等流式數據&#xff1f;對 ClickHouse 的眾多 MergeTree 引擎感到困惑&#xff0c;不知如何選型&a…

【新啟航】從人工偏差到機械精度:旋轉治具讓三維掃描重構數據重復精度提升至 ±0.01mm

在三維掃描重構領域&#xff0c;傳統人工操作方式受限于人為因素干擾&#xff0c;數據重復精度難以保證&#xff0c;無法滿足高精度工業檢測與逆向工程需求。旋轉治具憑借先進的機械設計與自動化控制技術&#xff0c;將三維掃描重構數據重復精度提升至 0.01mm&#xff0c;實現從…

《匯編語言:基于X86處理器》第13章 復習題和編程練習

本篇記錄了《匯編語言&#xff1a;基于X86處理器》第13章 復習題和編程練習的學習筆記。13.6 復習題1.當匯編過程被高級語言程序調用時&#xff0c;主調程序與被調過程是否應使用相同的內存模式?答&#xff1a;主調程序與被調過程使用的內存模式必須相同。2.C 和 C程序調用匯編…

SpringAI智能航空助手實戰<Demo>

我們將如何將我們得傳統業務進行智能化的改造>>>1.將我們傳統的航空票務系統 我們之前通過按鈕的方式來完成 現在我們通過智能對話的方式完成 >現在我們通過對話的方式來完成 整個智能化的改造 傳統應用如何進行智能化改造 我們把我們的項目通過Spring-ai 來接入A…

windows git安裝步驟

1&#xff0c;從官網下載安裝包&#xff1a;gitg官網 進行安裝 2&#xff0c;配置git環境&#xff1a; git config --global user.name "Your Name" git config --global user.email "Your Email"3&#xff0c;生成 SSH Key&#xff1a; ssh-keygen -t r…

使用chroma和LlamaIndex做RAG增強

RAG 原理&#xff1a;通過 “檢索&#xff08;從知識庫獲取相關信息&#xff09;→ 增強&#xff08;將信息作為上下文輸入模型&#xff09;→ 生成&#xff08;模型基于上下文回答&#xff09;” 三步&#xff0c;解決大模型知識時效性、領域局限性問題。 接下來將完成這么一個…

2025 最應避免的攝影陷阱以及解決方案

你有沒有想過&#xff0c;當你拍完了一個完美的場景后&#xff0c;卻發現畫面模糊、光線不足&#xff0c;或者更糟的是&#xff0c;存儲卡中的文件丟失了&#xff1f;這些問題可能會發生在任何人身上&#xff0c;無論是業余愛好者、專業人士還是最好的攝影師。當珍貴的記憶變成…

python類--python011

面向對象編程中的類的概念、屬性使用、繼承和類的改造問題等。7.1 初識類在軟件編程中&#xff0c;面向過程和面向對象是兩種主要的編程方法。面向過程的編程強調通過函數來實現特定的功能&#xff0c;具有靈活性&#xff0c;但在復雜系統中往往導致代碼重復&#xff0c;維護困…

Python函數篇:從零到精通

一、函數1.1 為什么有函數我們對于一個項目時&#xff0c;會有上千甚至上萬條代碼&#xff0c;當我們要使用到某個函數時&#xff0c;例如我需要計算一個求和代碼&#xff0c;獲得求和的值來服務我們的項目&#xff0c;那我們可能會這樣#計算1&#xff5e;100的和 theSun 0 fo…

QT項目之記事本

本文用QT實現記事本功能。一、成品展示1.界面主要元素&#xff1a;1.標題為MyNoteBook&#xff1b;2.相應圖標為&#xff1a;打開文件&#xff0c;保存&#xff0c;退出&#xff1b;3.右下角標注光標所在行列&#xff0c;默認編碼方式為UTF-8&#xff1b;4.鼠標所在圖標位置時會…

【軟件測試】性能測試 —— 工具篇 JMeter 介紹與使用

&#x1f970;&#x1f970;&#x1f970;來都來了&#xff0c;不妨點個關注叭&#xff01; &#x1f449;博客主頁&#xff1a;歡迎各位大佬!&#x1f448; 文章目錄1. JMeter 的介紹2. JMeter 安裝、配置、搭建2.1 前置條件 —— Java環境搭建2.2 JMeter 下載2.3 JMeter 安裝…

二十二、Mybatis-快速入門程序

入門程序大概步驟敘述&#xff1a; 步驟一&#xff1a;創建springboot工程并且數據庫提前創建表步驟二&#xff1a;創建springboot工程對Mybatis相關依賴注意打勾步驟三&#xff1a;編寫查找方法步驟四&#xff1a;編寫測試方法項目目錄結構與數據庫以及代碼&#xff1a; 項目目…

Blender模擬結構光3D Scanner(一)外參數匹配

如何使用Blender模擬FPP(Fringe Projection Profilometry) 原理的結構光3D傳感器&#xff1f;主要包含的工作有&#xff1a;1&#xff09;相機、投影儀定位與內外參數匹配&#xff1b;2&#xff09;投影儀投射指定Pattern圖像&#xff1b;3&#xff09;被測物體材質屬性配置等&…

LangChain是如何實現RAG多輪問答的

目錄引言一、LangChain實現RAG多輪問答核心機制1. 對話歷史管理&#xff08;Memory&#xff09;2. 問題重寫&#xff08;Query Rewriting&#xff09;3. 檢索增強生成&#xff08;RAG Core&#xff09;4. 鏈式工作流&#xff08;Chain&#xff09;二、關鍵設計特點三、完整示例…

DAY 44 預訓練模型

知識點回顧&#xff1a; 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰&#xff1a;resnet18 一、預訓練的概念 我們之前在訓練中發現&#xff0c;準確率最開始隨著epoch的增加而增加。隨著循環的更新&#xff0c;參數在不斷發生更新。 所…