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)
// 子查詢方式