小白學習java第14天(中):數據庫

1.DML data manage language數據庫管理語言

外鍵:外鍵是什么?就是對其進行表與表之間的聯系,就是使用的鍵進行關聯!

方法一:我們在數據庫里面就對其進行表與表之間的連接【這種是不建議的,我不太喜歡就是將數據里面弄得很復雜,數據庫就是對其存儲數據就行,這種物理外鍵不建議,我們可以執行使用軟件程序方面對其進行操作就行,本質上面就是一個篩選的過程!

可以參考一下這個文章,解釋了為什么不能用外鍵】

create table if not exists grade (id int not null auto_increment comment '學生id',name varchar(10) not null default '匿名' comment '學生名字',primary key (id)
);
alter table student addconstraint fk_student_grade foreign key (id) references grade (id);
-- alter table 表 add constraint 外鍵名 foreign key (字段名) references 主表名(主鍵字段名);

方法二:軟件層面(后面我才開始介紹!應用層面的時候會進行介紹!)

下面就開始介紹數據庫的操作!

增:(為了加上記憶,就是你要添加(insert into),你先需要先說明你哪個表(student),表里面的哪個字段(字段1,字段2....),然后在對字段進行添加(值1,值2...))

-- insert into 表(字段1,字段2...) values (值1,值2...);
-- 主鍵是自增的不需要對其進行定義
-- 字段需要和后面的值一一對應
insert into student (name, password, sex, birthday, address, email)
values ('張三', '123456', '男', '1999-01-01', '北京', 'zhangsan@qq.com');
insert into student (name, password, sex, birthday, address, email)
values ('李四', '15951', '男', '1999-01-01', '四川', 'lisi@qq.com');

刪:(首先我們需要對其進行要進行刪除,要找到對應的表(delete? from student),當然你不能不加條件對其刪除,那最終導致的結果就會全部進行刪除(where id = 3))

-- delete from 表名 where 條件;
delete from student where id = 3;

改(你要對其進行修改,首先你需要設置條件然后對其進行尋找(where id= 2),然后選擇表對其進行修改 (update student),選擇字段進行修改 set 字段 = ‘修改 ’ )

-- update 表名 set 字段1 = 值1,字段2 = 值2... where 條件;
update student set name = '李化' where id = 2;
update student set password = '123', sex = '女' where id = 3;
update student set name = '李化', password = '123' where id = 3 and sex = '女';
update student set name = '李化化', password = '123' where id = 3 or sex = '男'; -- 這里表示就是男或者id為3,都需要對其進行修改

!!!這里面稍微需要注意一點就是where里面是進行條件的,換句話說就是一些操作符

大于小于等于不等于(不說了噻!)

between..and..(范圍)

and,or

2.DQL data quire language數據庫查詢語言

(查詢毋庸置疑是最重要的,因為大部分我們的數據庫是進行查詢的)

2.1.最簡單就是查詢表里面的所有內容,對于數據庫表達式列的處理!

-- 語法:select 字段 from 表名;
select * from student;
-- 可以起別名,便于好看
select sex as '性別' from student as s;
-- 使用函數
select concat('性別:', sex) as '性別' from student;
-- 進行去重
select distinct sex from student;

2.2where條件查詢

2.2.1與或非

select  name as '名字' from student where address = '北京'and sex = '男';

2.2.2模糊查詢

還有什么 is null 或者is not null

模糊查詢
運算符語法描述
likea like b就相當于就是 ‘小紅’ like ‘小紅。。。。’
in

a in (b1,b2.。)

就相當于就是‘a’ i在這里面
-- where條件進行查詢
select  name as '名字' from student where address = '北京'and sex = '男';
-- 模糊查詢
-- like
-- %表示任意字符,_表示一個字符
-- 查看張姓的人
select name as '名字' from student where name like '張%';-- 查看張姓的第二個人
select name as '名字' from student where name like '張_';-- 查看中間一個字為‘佳’
select name as '名字' from student where name like '%佳%';-- in
-- 查詢地址子在北京和上海的人
select name as '名字' from student where address in ('北京', '上海');

2.3.聯表查詢(join連接)

聯表查詢主要分為三個:

inner join:只要滿足要求就進行匹配

select name,s.address,st.des
from student as s
inner join status as st
where s.address = st.address ;

right join:(其實就是必須包含右邊的東西,然后再進行篩選)

select name,s.address,st.des
from student as s
right join status as st
on s.address = st.address ;

left join:(其實就是必須包含左邊的東西,然后再進行篩選)

select name,s.address,st.des
from student as s
left join status as st
on s.address = st.address ;

小結一下:(我們做一個綜合的案例)

首先我們創建四個表,學生,老師,課程,成績,并對其進行數據填寫!

-- ==================學生=========================
create table if not exists student
(s_no       varchar(21)      not null primary key comment '學號',s_name     varchar(12)      not null comment '學生姓名',s_age      tinyint unsigned not null comment '學生年齡',s_sex      enum ('1','0') default '1' comment '學生性別',s_birthday datetime comment '學生生日',class      varchar(10)      not null comment '學生班級'
);insert into student(s_no, s_name, s_age, s_sex, s_birthday, class)
values (1, '李洋', 18, '1', 19980422, '1'),(2, '溫俊林', 19, '0', 19970422, '1'),(3, '周恒華', 20, '1', 19950422, '1'),(4, '張松濤', 22, '1', 19940422, '2'),(5, '李暉', 20, '0', 19960622, '2'),(6, '包政', 23, '1', 19930422, '2');-- ==================課程=========================
create table if not exists course
(cno   varchar(21) not null primary key comment '課程號',cname varchar(10) not null comment '課程名稱',tno   varchar(10) not null comment '教師編號'
);insert into course(cno, cname, tno)
values ('1', 'linux', '001'),('2', 'linux', '002'),('3', 'python', '003');-- ==================分數=========================
create table if not exists score
(sno  varchar(21) not null primary key comment '學號',cno  varchar(21) not null comment '課程號',mark float(4, 1) not null comment '成績'
);insert into score(sno, cno, mark)
values ('1', '1', '99.5'),('2', '1', '80.5'),('3', '1', '85.5'),('4', '1', '84.5'),('5', '1', '89.5'),('6', '1', '89.5');-- ==================老師=========================
create table if not exists teacher
(t_no   varchar(21)      not null primary key comment '教師編號',t_name varchar(10)      not null comment '教師姓名',t_age  tinyint unsigned not null comment '教師年齡',t_sex  enum ('0','1')   not null default '1' comment '教師性別',prof   varchar(10) comment '教師職稱',depart varchar(15)      not null comment '教師部門'
);insert into teacher(t_no, t_name, t_age, t_sex, prof, depart)
values ('001', '曾導', 18, 1, '校長', 'linux'),('002', '徐導', 19, 1, '教學總監', 'linux'),('003', '李導', 20, 1, '講師', 'python');

select的練習題:(注意我使用的不是那個一層一層進行篩選)

-- 查詢student表中的所有記錄的s_name、s_sex和class列
select student.s_name,student.s_sex,student.class from student;
-- 查詢教師所有的單位即不重復的depart列
select distinct teacher.depart from teacher;
-- 查詢score表中成績在80到90之間的所有記錄
select * from score where mark between 80 and 90;
-- 查詢score表中成績為85.5,89.5或80.5的記錄
select * from score where mark in (85.5,89.5,80.5);
-- 查詢student表中1班或性別為“女”的同學記錄
select * from student where class='1' or s_sex='女';
-- 以cno升序、mark降序查詢Score表的所有記錄
select * from score order by cno asc,mark desc;
-- 查詢”曾導“教師任課的學生成績
select teacher.t_name,course.cname,student.s_name,score.mark
from teacher,course,student,score
where teacher.t_name='曾導' andteacher.t_no=course.tno andcourse.cno=score.cno andscore.sno=student.s_no;
--  查詢linux課程所有男生的成績并且查出對應課程的教師名,職稱,及所在部門。
-- 96ms運行時間
select teacher.t_name,teacher.prof,teacher.depart,score.mark
from teacher,course,student,score
where course.cname='linux' andstudent.s_sex='1' andteacher.t_no=course.tno andcourse.cno=score.cno andscore.sno=student.s_no;/*我要進行一層一層的查詢1. 先查詢linux課程的所有成績2. 再查詢linux課程的所有男生3. 最后查詢linux課程的所有男生對應的成績4. 最后查詢linux課程的所有男生對應的成績對應的教師名,職稱,及所在部門*/-- 40ms運行時間select teacher.t_name,teacher.prof,teacher.depart,mark,s_namefrom teacherinner join course
on teacher.t_no = course.tno and depart = 'linux'
inner join scoreon score.cno = course.cnoinner join studenton student.s_no = score.sno and student.s_sex = '1';

值得注意一點就是,我們在使用的時候一層一層要不直接進行判斷要節約一半的時間!!!

2.4自連接(換句話說就是自己對自己的這個表進行拆分成兩個一模一樣的表,然后通過拆成的兩個進行比較!)

我們還是舉一個例子:

創建shop表格,添加數據進行對比!

create table if not exists shop (id int not null auto_increment comment '商品id',name varchar(10) not null default '匿名' comment '商品名字',price float(10,2) not null default 0.00 comment '商品價格',primary key (id)
);
insert into shop (name,price) values ('華為手機',6999.00);
insert into shop (name,price) values ('小米手機',5000.00);
insert into shop (name,price) values ('榮耀手機',5999.00);
insert into shop (name,price) values ('華為平板',4999.00);
insert into shop (name,price) values ('小米平板',3999.00);
insert into shop (name,price) values ('榮耀平板',8999.00);

然后我想對其價格估算,我想知道比華為平板高的商品有哪些?

方法1:就是進行分步查詢

select price from shop where name = '華為平板'; -- 先進行查詢
select * from shop where price > 4999;

方法2.自連接

select a.*
from shop as a,shop as b
where b.name = '華為平板'and a.price > b.price;

3.排序和分頁

排序:升序ASC,降序DESC

select a.*
from shop as a,shop as b
where b.name = '華為平板'and a.price > b.price
order by a.price desc;

分頁: 1.環節數據庫壓力 2.還有就是美觀!

select a.*
from shop as a,shop as b
where b.name = '華為平板'and a.price > b.price
order by a.price desc
limit 0, 2; -- 起始值,頁面大小
-- limit規律就是limit (當前頁-1)*頁面大小,頁面大小

4.MySQ函數(畢竟是一門語言,就有自己的api,自己的函數)

4.1常用函數(常見但是也不是很常用)

就是什么絕對值,向上取整,向下取整,產生隨機數等等!

需要就進行查詢一下!

4.2聚合函數(就是比如有時候需要對其表格里面的數據進行處理)

聚合函數的查詢

常見聚合函數
函數名稱描述
count()計數
sum()求和
avg()平均值
max()最大值
min()最小值
-- =============count()===============
select count(shop.name)
from shop; -- 會忽略null值select count(*)
from shop; -- 不會忽略nullselect count(1)
from shop;  -- 不會忽略null-- ====================sum()==============select sum(shop.price)
from shop;-- ====================avg()==============
select avg(shop.price)
from shop;-- ====================max()==============
select max(shop.price)
from shop;-- ====================min()==============
select min(shop.price)
from shop;

下面我們通過分組來進行查詢

select shop.name,sum(shop.price) as sum_price,avg(shop.price) as avg_price,max(shop.price) as max_price,min(shop.price) as min_price
from shop
group by shop.name;

【小的知識點補充一下就是md5:messenge digest 信息摘要算法,是不可逆的一種加密算法,我們可以對于數據庫里面的數據進行加密】

【但是就是我們網上不是有那種在線破解碼,那些都是把一些常見的密碼已經存好了,存放在一個字典里面,你去查詢就可以看到了!】

insert into shop (name, price)
values (md5('華為汽車'), 699);

總結

select完整的語句:

-- select的查詢語法完整語句
select 去重的列
要查詢的字段
*** join 關聯表名 on 關聯條件
from 表名
where 指定結果需滿足的條件,或者子查詢
group by 指定結果按照哪幾個字段進行分組
having 指定分組后,分組結果需滿足的條件
order by 指定結果按照哪一個字段進行排序
limit 指定結果返回的條數

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

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

相關文章

NO.95十六屆藍橋杯備戰|圖論基礎-單源最短路|負環|BF判斷負環|SPFA判斷負環|郵遞員送信|采購特價產品|拉近距離|最短路計數(C++)

P3385 【模板】負環 - 洛谷 如果圖中存在負環&#xff0c;那么有可能不存在最短路。 BF算法判斷負環 執?n輪松弛操作&#xff0c;如果第n輪還存在松弛操作&#xff0c;那么就有負環。 #include <bits/stdc.h> using namespace std;const int N 2e3 10, M 3e3 1…

K8s pod 應用

/** 個人學習筆記&#xff0c;如有問題歡迎交流&#xff0c;文章編排和格式等問題見諒&#xff01; */ &#xff08;1&#xff09;編寫 pod.yaml 文件 pod 是 kubernetes 中最小的編排單位&#xff0c;一個 pod 里包含一個或多個容器。 apiVersion: v1 # 指定api版本 kind…

Oracle創建觸發器實例

一 創建DML 觸發器 DML觸發器基本要點&#xff1a; 觸發時機&#xff1a;指定觸發器的觸發時間。如果指定為BEFORE&#xff0c;則表示在執行DML操作之前觸發&#xff0c;以便防止某些錯誤操作發生或實現某些業務規則&#xff1b;如果指定為AFTER&#xff0c;則表示在執行DML操作…

Filename too long 錯誤

Filename too long 錯誤表明文件名超出了文件系統或版本控制系統允許的最大長度。 可能的原因 文件系統限制 不同的文件系統對文件名長度有不同的限制。例如&#xff0c;FAT32 文件名最長為 255 個字符&#xff0c;而 NTFS 雖然支持較長的文件名&#xff0c;但在某些情況下也…

網絡不可達network unreachable問題解決過程

問題&#xff1a;訪問一個環境中的路由器172.16.1.1&#xff0c;發現ssh無法訪問&#xff0c;ping發現回網絡不可達 C:\Windows\System32>ping 172.16.1.1 正在 Ping 172.16.1.1 具有 32 字節的數據: 來自 172.16.81.1 的回復: 無法訪問目標網。 來自 172.16.81.1 的回復:…

Python設計模式:備忘錄模式

1. 什么是備忘錄模式&#xff1f; 備忘錄模式是一種行為設計模式&#xff0c;它允許在不暴露對象內部狀態的情況下&#xff0c;保存和恢復對象的狀態。備忘錄模式的核心思想是將對象的狀態保存到一個備忘錄對象中&#xff0c;以便在需要時可以恢復到之前的狀態。這種模式通常用…

Python基礎語法3

目錄 1、函數 1.1、語法格式 1.2、函數返回值 1.3、變量作用域 1.4、執行過程 1.5、鏈式調用 1.6、嵌套調用 1.7、函數遞歸 1.8、參數默認值 1.9、關鍵字參數 2、列表 2.1、創建列表 2.2、下標訪問 2.3、切片操作 2.4、遍歷列表元素 2.5、新增元素 2.6、查找元…

JavaEE學習筆記(第二課)

1、好用的AI代碼工具cursor 2、Java框架&#xff1a;Spring(高級框架)、Servelt、Struts、EJB 3、Spring有兩層含義&#xff1a; ①Spring Framework&#xff08;原始框架&#xff09; ②Spring家族 4、Spring Boot(為了使Spring簡化) 5、創建Spring Boot 項目 ① ② ③…

基于Flask與Ngrok實現Pycharm本地項目公網訪問:從零部署

目錄 概要 1. 環境與前置條件 2. 安裝與配置 Flask 2.1 創建虛擬環境 2.2 安裝 Flask 3. 安裝與配置 Ngrok 3.1 下載 Ngrok 3.2 注冊并獲取 Authtoken 4. 在 PyCharm 中創建 Flask 項目 5. 運行本地 Flask 服務 6. 啟動 Ngrok 隧道并獲取公網地址 7. 完整示例代碼匯…

Ragflow、Dify、FastGPT、COZE核心差異對比與Ragflow的深度文檔理解能力??和??全流程優化設計

一、Ragflow、Dify、FastGPT、COZE核心差異對比 以下從核心功能、目標用戶、技術特性等維度對比四款工具的核心差異&#xff1a; 核心功能定位 ? Ragflow&#xff1a;專注于深度文檔理解的RAG引擎&#xff0c;擅長處理復雜格式&#xff08;PDF、掃描件、表格等&#xff09;的…

LeetCode[232]用棧實現隊列

思路&#xff1a; 一道很簡單的題&#xff0c;就是棧是先進后出&#xff0c;隊列是先進先出&#xff0c;用兩個棧底相互對著&#xff0c;這樣一個隊列就產生了&#xff0c;右棧為空的情況&#xff0c;左棧棧底就是隊首元素&#xff0c;所以我們需要將左棧全部壓入右棧&#xff…

postman 刪除注銷賬號

一、刪除賬號 1.右上角找到 頭像&#xff0c;view profile https://123456-6586950.postman.co/settings/me/account 二、找回賬號 1.查看日志所在位置 三、postman更新后只剩下history 在 Postman 中&#xff0c;如果你發現更新后只剩下 History&#xff08;歷史記錄&…

微服務相比傳統服務的優勢

這是一道面試題&#xff0c;咱們先來分析這道題考察的是什么。 如果分析面試官主要考察以下幾個方面&#xff1a; 技術理解深度 你是否清楚微服務架構&#xff08;Microservices&#xff09;和傳統單體架構&#xff08;Monolithic&#xff09;的本質區別。能否從設計理念、技術…

【KWDB 創作者計劃】_深度學習篇---向量指令集

文章目錄 前言一、加速原理數據級并行(DLP)計算密度提升減少指令開銷內存帶寬優化隱藏內存延遲二、關鍵實現技術1. 手動向量化(Intrinsics)優勢挑戰2. 編譯器自動向量化限制3. BLAS/LAPACK庫優化4. 框架級優化三、典型應用場景矩陣運算卷積優化歸一化/激活函數嵌入層(Embe…

跳躍游戲(每日一題-中等)

題解&#xff1a;定義一個變量&#xff0c;用來存儲可以到達的最遠位置。初始化為0。 然后對數組進行遍歷&#xff0c;遍歷開始的時候&#xff0c;先判斷當前這個位置和最遠位置誰大&#xff0c;如果最遠位置比較大&#xff0c;那么就說明當前這個位置也能達到&#xff0c;就看…

第七篇:linux之基本權限、進程管理、系統服務

第七篇&#xff1a;linux之基本權限、進程管理、系統服務 文章目錄 第七篇&#xff1a;linux之基本權限、進程管理、系統服務一、基本權限1、什么是權限&#xff1f;2、為什么要有權限&#xff1f;3、權限與用戶之間的關系&#xff1f;4、權限對應的數字含義5、使用chmod設定權…

音視頻小白系統入門課-2

本系列筆記為博主學習李超老師課程的課堂筆記&#xff0c;僅供參閱 往期課程筆記傳送門&#xff1a; 音視頻小白系統入門筆記-0音視頻小白系統入門筆記-1 課程實踐代碼倉庫&#xff1a;傳送門 音視頻編解碼 可以通過ffmpeg -f avfoundation -list_devices true -i "&…

外賣“三國殺”開新局,餓了么已手握AI牌

【潮汐商業評論/原創】 01 新戰役&#xff0c;新變量 外賣行業&#xff0c;又迎來了新一輪戰役。 前有京東宣布斥資百億進軍外賣市場&#xff0c;后有美團宣布發布即時零售品牌“美團閃購”。雙方在隔空秀肌肉、彰顯自身實力的同時&#xff0c;行業巨頭圍繞本地生活服務的攻…

HAProxy 和 Keepalived 區別

HAProxy 和 Keepalived 是在構建高可用和可擴展Web服務時常用的兩個開源軟件&#xff0c;但它們的核心功能和目的有顯著區別。 簡單來說&#xff1a; HAProxy: 主要是一個 負載均衡器 (Load Balancer) 和 反向代理 (Reverse Proxy)。它負責將客戶端的請求智能地分發到后端的多…

YOLO算法的革命性升級:深度解析Repulsion損失函數在目標檢測中的創新應用

## 一、目標檢測的痛點與YOLO的局限性 在自動駕駛、智能監控等復雜場景中,目標檢測算法常面臨致命挑戰——遮擋問題。當多個物體相互遮擋時,傳統檢測器容易出現漏檢、誤檢現象,YOLO系列算法盡管在速度與精度上表現優異,但在處理密集遮擋目標時仍存在明顯短板。 ### 1.1 遮…