MySql基礎篇
多表設計:
在存盤不同的一類資訊時
減少資料冗余
表與表之間如何關聯
資料庫設計范式:
1.列的原子性(不可再分)
2.要有主鍵(唯一的標識列),表中其他資訊都依賴于主鍵
3.一張表存盤一類資訊,關聯其他表,消除資料冗余
學生資訊表:
學號,姓名,性別,生日,手機號,年級ID,注冊時間
年級表:
年級ID,年級名稱
-- 老師資訊表
工號,姓名,性別,年級ID
課程資訊表
-- 創建年級表
CREATE TABLE grade(id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10))
-- 創建學生表
CREATE TABLE student(
num INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10) NOT NULL,
sex CHAR(1),
birthday DATE,
phone CHAR(11),
grade_id INT, -- 外鍵約束
reg_time DATETIME
)
-- 弱關系,在表與表關聯時,沒有任何約束
-- 強關系,表與表之間存在約束關系
-- 修改表,添加年級外鍵約束
-- 外鍵約束:外鍵與另一個表中的主鍵對應的
ALTER TABLE student ADD CONSTRAINT grade_fk FOREIGN KEY(grade_id) REFERENCES grade(id)
/*
表與表之間的聯系關系
一對一:一個人有一個學號,一個學號對應一個人
一對多:一個人屬于一個年級
多對一:多名學生屬于一個年級
多對多:一個人可以選多門課程,一個課程可以被多名學生選
*/
CREATE TABLE course(id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10)
)
-- 多對多設計一個關系表來存盤學生與課程關系
CREATE TABLE student_course(
stu_num INT,
course_id INT,
CONSTRAINT stu_fk FOREIGN KEY(stu_num) REFERENCES student(num),
CONSTRAINT course_fk FOREIGN KEY(course_id) REFERENCES course(id)
)
子查詢
-- 子查詢:出現在其他陳述句(insert update delete select) 中的select陳述句,成為子查詢或內查詢
-- 外部的查詢陳述句,稱為主查詢或外查詢
-- 在insert陳述句中使用子查詢
INSERT INTO stu SELECT * FROM student
-- 在update中使用子查詢
UPDATE student SET sex='男' WHERE num IN (SELECT num FROM stu WHERE score>80)
-- 在delete陳述句中使用子查詢
DELETE FROM student WHERE num IN(SELECT num FROM stu WHERE score>=90)
-- 查詢陳述句中使用子查詢
-- select后面:僅僅支持標量子查詢(一行一列)
SELECT (
SELECT ts.num
FROM student ts
WHERE ts.num = t.num
),t.name FROM student t
-- 在where后面使用列子查詢
SELECT * FROM student WHERE score IN (SELECT score FROM student WHERE score>60)
-- 在where后面使用行子查詢 同時滿足多個條件
SELECT *
FROM student
WHERE (num,score)=(
SELECT MIN(num),MAX(score)
FROM student
)
-- 在from后使用子查詢 只支持表子查詢(多行多列)
-- 把一個查詢出來的結果,可以當一只那個臨時表
SELECT *
FROM(
SELECT COUNT(*)c ,sex
FROM student
GROUP BY sex) t
WHERE t.c >= 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/261794.html
標籤:其他
上一篇:mysql篇面試題
下一篇:pg資料庫啟動不了了
