电竞比分网-中国电竞赛事及体育赛事平台

分享

從零學(xué)習(xí)數(shù)據(jù)庫mysql--表的操作

 路人甲Java 2022-03-31

數(shù)據(jù)庫的完整性

什么是數(shù)據(jù)的完整性

保證用戶輸入的數(shù)據(jù)保存到數(shù)據(jù)庫中是正確的。

如何添加數(shù)據(jù)完整性

在創(chuàng)建表時給表中添加約束

完整性分類

  1. 實(shí)體完整性
  2. 域完整性
  3. 參照完整性

實(shí)體完整性

  1. 什么是實(shí)體完整性

表中的一行(一條記錄)代表一個實(shí)體(entity)

  1. 實(shí)體完整性的作用

標(biāo)識每一行數(shù)據(jù)不重復(fù)。行級約束

  1. 約束類型
  1. 主鍵約束(primary key)
  2. 唯一約束(unique)
  3. 自動增長列(auto_increment)
  1. 主鍵約束

特點(diǎn):

  1. 每個表中要有一個主鍵
  2. 數(shù)據(jù)唯一,且不能為null

添加主鍵約束的方式

CREATE TABLE 表名(字段名1 數(shù)據(jù)類型 primary key,字段2 數(shù)據(jù)類型);
CREATE TABLE 表名(字段1 數(shù)據(jù)類型, 字段2 數(shù)據(jù)類型,primary key(要設(shè)置主鍵的字段));
CREATE TABLE 表名(字段1 數(shù)據(jù)類型, 字段2 數(shù)據(jù)類型,primary key(主鍵1,主鍵2));

聯(lián)合主鍵: 兩個字段數(shù)據(jù)同時相同時,才違反聯(lián)合主鍵約束。

1.先創(chuàng)建表

2.再去修改表,添加主鍵

ALTER TABLE student  ADD CONSTRAINT  PRIMARY  KEY (id);
  1. 唯一約束:

特點(diǎn):

  1. 指定列的數(shù)據(jù)不能重復(fù)
  2. 可以為空值
CREATE TABLE 表名(字段名1 數(shù)據(jù)類型 字段2 數(shù)據(jù)類型 UNIQUE);
  1. 自動增長列

特點(diǎn):

  1. 指定列的數(shù)據(jù)自動增長
  2. 即使數(shù)據(jù)刪除,還是從刪除的序號繼續(xù)往下
CREATE TABLE 表名(字段名1 數(shù)據(jù)類型 PRIMARY KEY AUTO_INCREMENT ,字段2 數(shù)據(jù)類型 UNIQUE);

域完整性

限制此單元格的數(shù)據(jù)正確,不對照此列的其它單元格比較
域代表當(dāng)前單元格

域完整性約束:

  1. 數(shù)據(jù)類型 :
    數(shù)值類型、日期類型、字符串類型

  2. 非空約束(not null)

    CREATE TABLE 表名(字段名1 數(shù)據(jù)類型 PRIMARY KEY AUTO_INCREMENT ,字段2 數(shù)據(jù)類型 UNIQUE not null);
    
  3. 默認(rèn)值約束(default)

CREATE TABLE 表名(字段名1 數(shù)據(jù)類型 PRIMARY KEY AUTO_INCREMENT ,字段2 數(shù)據(jù)類型 UNIQUE not null default '男');

? 插入的時候,values當(dāng)中的值直接給default

參照完整性

  1. 什么是參照完整性

    是指表與表之間的一種對應(yīng)關(guān)系
    通常情況下可以通過設(shè)置兩表之間的主鍵、外鍵關(guān)系,或者編寫兩表的觸發(fā)器來實(shí)現(xiàn)。
    有對應(yīng)參照完整性的兩張表格,在對他們進(jìn)行數(shù)據(jù)插入、更新、刪除的過程中,系統(tǒng)都會將被修改表格與另一張對應(yīng)表格進(jìn)行對照,從而阻止一些不正確的數(shù)據(jù)的操作。
    數(shù)據(jù)庫的主鍵和外鍵類型一定要一致;
    兩個表必須得要是InnoDB類型
    設(shè)置參照完整性后 ,外鍵當(dāng)中的內(nèi)值,必須得是主鍵當(dāng)中的內(nèi)容

  2. 一個表設(shè)置當(dāng)中的字段設(shè)置為主鍵,設(shè)置主鍵的為主表

    CREATE TABLE student(sid int PRIMARY key,name varchar(50) not null,sex varchar(10) default '男');
    
  3. 創(chuàng)建表時,設(shè)置外鍵,設(shè)置外鍵的為子表

    CREATE TABLE score(
    sid INT,
    score DOUBLE,
    CONSTRAINT fk_stu_score_sid FOREIGN KEY(sid) REFERENCES student(id));
    

    ?

表之間關(guān)系

  1. 一對一
    一夫一妻
  2. 一對多關(guān)系
    一個人可以擁有多輛汽車,要求查詢某個人擁有的所有車輛。
    創(chuàng)建Person表
    在這里插入圖片描述
    創(chuàng)建Car表 在這里插入圖片描述
    在這里插入圖片描述
  3. 多對多關(guān)系
  1. 學(xué)生選課,一個學(xué)生可以選修多門課程,每門課程可供多個學(xué)生選擇。
  2. 一個學(xué)生可以有多個老師,而一個老師也可以有多個學(xué)生

創(chuàng)建老師表
在這里插入圖片描述
創(chuàng)建學(xué)生表
在這里插入圖片描述
創(chuàng)建學(xué)生與老師關(guān)系表
在這里插入圖片描述
關(guān)系圖
在這里插入圖片描述

添加外鍵
在這里插入圖片描述
在這里插入圖片描述

多表操作

合并結(jié)果集

  1. 什么是合并結(jié)果集

合并結(jié)果集就是把兩個select語句的查詢結(jié)果合并到一起

  1. 合并結(jié)果集的兩種方式
  1. UNION
    合并時去除重復(fù)記錄
  2. UNION ALL
    合并時不去除重復(fù)記錄

格式:
UNION:

SELECT * FROM 表1 UNION SELECT * FROM 表2;
SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;

創(chuàng)建表:
在這里插入圖片描述
UNION:
在這里插入圖片描述
在這里插入圖片描述
UNION ALL:
在這里插入圖片描述
在這里插入圖片描述

注意事項(xiàng):被合并的兩個結(jié)果:列數(shù)、列類型必須相同。

多表聯(lián)查:

  1. 什么是連接查詢

也可以叫跨表查詢,需要關(guān)聯(lián)多個表進(jìn)行查詢

  1. 什么是笛卡爾集

假設(shè)集合A={a,b},集合B={0,1,2},
則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。
可以擴(kuò)展到多個集合的情況
同時查詢兩個表,出現(xiàn)的就是笛卡爾集結(jié)果

  1. 查詢時給表起別名
    在這里插入圖片描述
  2. 多表聯(lián)查,如何保證數(shù)據(jù)正確
    逐行判斷,相等的留下,不相等的全不要
    在這里插入圖片描述

連接查詢

1. 內(nèi)連接

內(nèi)連接
圖示:
在這里插入圖片描述
作用:查詢兩張表的共有部分
語句:

Select <select_list> from tableA A  Inner join  tableB B  on A.Key = B.Key

示例:

SELECT * from employee e  INNER JOIN department d on e.depart_id = d.id;

多表連接:
建表:
在這里插入圖片描述
使用99連接法:
在這里插入圖片描述
使用內(nèi)聯(lián)查詢
在這里插入圖片描述
在這里插入圖片描述

2. 左連接

圖示
在這里插入圖片描述
作用: 把左邊表的內(nèi)容全部查出,右邊表只查出滿足條件的記錄
語句:

Select <select_list> from tableA A Left Join  tableB B  on A.Key = B.Key

示例

SELECT * from employee e  LEFT JOIN department d on e.depart_id = d.id;		

在這里插入圖片描述 在這里插入圖片描述

3. 右連接

圖示:
在這里插入圖片描述
作用

把右邊表的內(nèi)容全部查出,左邊表只查出滿足條件的記錄

語句

Select <select_list> from tableA A Right Join  tableB B  on A.Key = B.Key

示例

SELECT * from employee e  RIGHT JOIN department d on e.depart_id = d.id;

在這里插入圖片描述
在這里插入圖片描述

子查詢

什么是子查詢

一個select語句中包含另一個完整的select語句。 或兩個以上SELECT,那么就是子查詢語句了。

子查詢出現(xiàn)的位置

  1. where后,把select查詢出的結(jié)果當(dāng)作另一個select的條件值
  2. from后,把查詢出的結(jié)果當(dāng)作一個新表;

示例表
在這里插入圖片描述
使用

查詢與項(xiàng)羽同一個部門人員工

  1. 先查出項(xiàng)羽所在的部門編號
    在這里插入圖片描述
  2. 再根據(jù)編號查同一部門的員工
    在這里插入圖片描述
    把第1條查出來的結(jié)果當(dāng)?shù)?天語句的條件

查詢工資高于程咬金的員工

  1. 查出程咬金的工資
    在這里插入圖片描述
  2. 再去根據(jù)查出的結(jié)果查詢出大于該值的記錄員工名稱
    在這里插入圖片描述

工資高于30號部門所有人的員工信息

  1. 先查出30號部門工資最高的那個人
    在這里插入圖片描述
  2. 再到整個表中查詢大于30號部門工資最高的那個人
    在這里插入圖片描述

查詢工作和工資與妲己完全相同的員工信息

  1. 先查出妲已的工作和工資
    在這里插入圖片描述
  2. 根據(jù)查詢結(jié)果當(dāng)作條件再去查詢工作和工資相同的員工
    由于是兩個條件,使用 IN進(jìn)行判斷
    在這里插入圖片描述

有2個以上直接下屬的員工信息

  1. 對所有的上級編號進(jìn)行分組
    在這里插入圖片描述

  2. 找出大于2個的,大于2個說明有兩個下屬
    在這里插入圖片描述

  3. 把上條的結(jié)果當(dāng)作員工編號時行查詢
    在這里插入圖片描述

查詢員工編號為7788的員工名稱、員工工資、部門名稱、部門地址

在這里插入圖片描述

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多