1. 程式人生 > >2018/7/31課程總結

2018/7/31課程總結

主要學習內容:SQL各種連線,複雜查詢,資料庫備份,匯入匯出

建立兩個表:
create table grade(
gid int(4) primary key auto_increment comment”學生ID”,
gname varchar(20) comment “學生名字”,
gdesc varchar(30) comment “學生的描述”,
gdate date comment “班級建立的時間”

);

create table student(
sid int(4) primary key auto_increment,
sname varchar(20),
spwd varchar(20),
gid int (4)
);

外來鍵和主鍵的型別必須一樣,必須關聯主鍵

insert into grade values (1,”java”,”admin”,’2018-07-31’),(2,”android”,”admin”,’1999-09-20’);

insert into student values (1,”fujiawei”,”123”,1),(2,”lishun”,”123”,1),(3,”wangda”,”dd”,2),(4,”liqian”,”234”,2);

alter table student add constraint fk_gid foreign key(gid) references grade(gid);
//建立外來鍵聯絡

alter table student drop foreign key fk_gid;
//刪除外來鍵

alter table student add constraint fk_gid foreign key(gid) references grade(gid);
//建立外來鍵聯絡

delete from grade where gid=1;
//因為有外來鍵聯絡,無法刪除

alter table student drop foreign key fk_gid;
//刪除外來鍵

使用層疊關係的外來鍵,就可以刪除了:

alter table student add constraint fk_gid foreign key(gid) references grade(gid) on delete Set null;
//父表更新或刪除,子表對應欄位設定為null

alter table student add constraint fk_gid foreign key(gid) references grade(gid) on delete cascade;
//父表更新或刪除時,對應子表也被更新或刪除;刪除或者更新子表,父表不會被刪除。

mysqldump -uroot -p123456 text >d:/mysqltext.sql
//備份資料庫檔案 *需要在DOS裡面

//如何匯入?
建立庫 text2
use text2
然後source +sql檔案路徑

//索引 提高我們的查詢速度,用於查詢

//常規的索引:1.主鍵索引(非空,唯一) 2.唯一索引(可以新增多個唯一索引,一個元素不止有一個索引) 3.全域性索引 4.index 索引

CREATE TABLE emp(
eid INT (4),
ename VARCHAR (20),
epwd VARCHAR(20)

)

ALTER TABLE emp ADD PRIMARY KEY (eid)
//新增主鍵索引

ALTER TABLE emp ADD uniqu KEY (eid)
//新增唯一索引

還有

//非等值連線查詢 、自連線查詢 一般不用

學生表,科目表,成績表

1.查詢出學生 名字,學號,科目號,成績:

取兩張表的交集

SELECT s.StudentNo,s.StudentName,r.StudentNo,r.StudentResult FROM student s INNER JOIN result r ON s.StudentNo=r.StudentNo
//內連線查詢

SELECT s.StudentNo,s.StudentName,r.SubjectNo,r.StudentResult FROM student s,result r WHERE s.StudentNo=r.StudentNo
//等值連線查詢,和上面的方式得到的結果一樣

2.查詢所有學生,沒考試的也查詢,

SELECT s.StudentNo,s.StudentName,r.SubjectNo,r.StudentResult FROM student s LEFT JOIN result r ON s.StudentNo=r.StudentNo
//使用左外連線,學生表(左表)為基準,成績表一一匹配,匹配不成功用NULL代替

SELECT s.StudentNo,s.StudentName,r.SubjectNo,r.StudentResult FROM student s LEFT JOIN result r ON s.StudentNo=r.StudentNo WHERE r.StudentResult IS null
//查詢沒參加考試的學生

3.查詢學生 學號,名字,科目名,成績

SELECT s.StudentNo,s.StudentName,su.SubjectName,r.SubjectNo FROM student s INNER JOIN result r ON s.StudentNo=r.StudentNo INNER JOIN subject su ON su.SubjectNo=r.SubjectNo
//三張表關聯查詢 內連線

4.查詢科目為 資料庫-1 的所有成績,並以降序排列
SELECT * FROM subject su INNER JOIN result r ON su.SubjectNo=r.SubjectNo WHERE su.SubjectName = “資料庫結構-1” ORDER BY r.StudentResult desc

5.查詢科目為 高等數學-2 且分數不小於80的學生的學號和姓名

SELECT s.StudentNo,s.StudentName FROM student s INNER JOIN result r ON s.StudentNo=r.StudentNo INNER JOIN subject su ON su.SubjectNo=r.SubjectNo WHERE r.StudentResult>=80
//內連線查詢

SELECT s.StudentName,s.StudentNo FROM student s WHERE s.StudentNo IN(SELECT r.Studentno FROM result r WHERE r.SubjectNo=(SELECT su.SubjectNo FROM subject su WHERE su.SubjectName=”高等數學-2”) AND r.StudentResult>=80)
// 子查詢方式