一:可視化軟件(Navicat)
1.什么是可視化軟件?
數據可視化軟件可將文本和數字數據轉換為可視化的圖表,圖形和表格。 通過將重要數據引入中央界面,它被用作創建應用程序/系統性能或操作儀表板的方法。
2.什么是Navicat?
官網下載Navicat:http://www.navicat.com.cn/download/navicat-for-mysql
Navicat是一個可多重連接的數據庫管理工具,它可以連接到MySQL、Oracle、PostgreSQL、SQLite、SQL Server和/或MariaDB數據庫,讓數據庫管理更加方便。Navicat的功能可以滿足專業開發人員的所有需求,對數據庫服務器的新手來說學習起來也不難。有了極完備的圖形用戶界面(GUI),Navicat可以簡便、安全地創建、組織、訪問和共享信息。
Navicat提供三種操作平台:Microsoft Windows、Mac OS X 和Linux。它可以讓用戶連接到本機或遠程服務器、提供一些實用的數據庫工具如數據模型、數據傳輸、數據同步、結構同步、導入、導出、備份、還原、報表創建工具及計划以協助管理數據。

Navicat Premium是一套數據庫管理工具,結合了其它Navicat成員的功能,Navicat Premium可滿足現今數據庫管理系統的使用功能,包括存儲過程、事件、觸發器、函數、視圖等。
- Navicat 該軟件是收費的 但是有很多破解版本 自我百度下載即可(正式版只能使用14天)
為了提高開發的效率 但是不能太過於依賴該軟件
其實這些軟件的底層還是執行的SQL語句來操作數據庫的,只不過是將SQL語句封裝到軟件內。
二:部署MySQL(Navicat)
1.Navicat連接本地MySQL

2.連接MySQL,輸入密碼,在點擊測試即可,不需要輸入HOST,測試成功,會默認填寫。

3.查詢MySQL內,庫和表。

4.創建庫


5.創建表


可視化軟件內,也可以選擇SQL語句編輯,一些代碼,可視化軟件完成不了時,可以自己使用,可視化軟件提供的SQL語句編輯。

6.重新編輯表字段設置

7.編寫表數據

8.創建外鍵
1.外鍵設置 Foreign Keys
2.設置填寫關聯信息與被關聯信息
3.先刷新設置的外鍵,在填寫出對應的被關聯表的設置的外鍵id,必須對應數據,不對應報錯。
注:
如果想要把主鍵關聯id,設置成不重復id,需要在表內編輯,選擇sql語句手寫自行編輯代碼,該可視化軟件無該快捷鍵。

1

2

3

9.圖形化當前庫下面所有的表關系


10.Query編輯SQL語句

11.使用可視化軟件 將MySQL中SQL文件導出到本地

12.使用可視化軟件,將本地SQL文件導入到MySQL內

三:使用可視化軟件實現(MySQL多表查詢)
1.做題思路
寫多表查詢題跟寫代碼是一樣的 先寫思路再寫sql
不要想着一次性寫完 寫一點查一點再寫一點
學生--成績--課程--老師

2.查詢所有的課程的名稱以及對應的任課老師姓名
1、查詢所有的課程的名稱以及對應的任課老師姓名
1.先明確需要用到幾張表 老師表與課程表
2.查詢的結果也必須來源於兩種表
步驟1 先連表
SELECT course.cname,teacher.tname FROM course INNER JOIN teacher ON course.teacher_id = teacher.tid;

3.查詢平均成績大於八十分的同學的姓名和平均成績
查詢平均成績大於八十分的同學的姓名和平均成績(先明確需要用到兩張表)
分解題目執行(提高解題思路)
1.查詢平均成績大於80分的學生id號
按照學生id分組 之后求每個學生的平均成績
select student_id,avg(num) from score group by student_id;
2.在使用having過濾出平均成績大於80分的數據
select student_id,avg(num) as avg_num from score group by student_id
HAVING avg(num) > 80;
3.完善(查詢平均成績大於八十分的同學的姓名和平均成績)
將上述的表與學生表按照學生id拼接到一起
SELECT student.sname,t1.avg_num FROM student INNER JOIN ( SELECT student_id, avg( num ) AS avg_num FROM score GROUP BY student_id HAVING avg( num ) > 80 ) AS t1 ON student.sid = t1.student_id;

# 5.查詢沒有李平老師課的學生姓名
# 1.先查詢李平老師教授的課程編號
# (課程的老師id對應老師id)
-- select course.cid from course where teacher_id = (select tid from teacher where tname = '李平老師');
# 2.根據課程id號篩選出所有報了學生id號
# (老師教授的課程id 篩選出score內的課程id對應,留下來student_id字段)
-- select distinct score.student_id from score where course_id in (select course.cid from course where teacher_id = (select tid from teacher where tname = '李平老師'));
# 3.去學生表中根據id號取反篩選學生姓名
-- select student.sname from student where sid not in (select distinct score.student_id from score where course_id in (select course.cid from course where teacher_id = (select tid from teacher where tname = '李平')));
--
# 6.查詢沒有同時選修物理和體育科技的學生姓名(只要報一門的 兩門和一門沒報的都不要)
# 1.先獲取兩門課程的id號
-- select course.cid from course where cname in ('物理','體育');
# 2.在去分數表中先篩選出所有報了物理和體育的學生id(兩門 一門);
-- select * from score where course_id in (select course.cid from course where cname in ('物理','體育'));
# 3.如何篩選出只報了一門的學生id 按照學生id分組 然后技數 並過濾出計數結果為1的數據
-- select score.student_id from score where course_id in (select course.cid from course where cname in ('物理','體育')) group by score.student_id having count(score.course_id) = 1;
# 4.根據學生id號去student表中篩選學生姓名
-- select student.sname from student where sid in (select score.student_id from score where course_id in (select course.cid from course where cname in ('物理','體育')) group by score.student_id having count(score.course_id) = 1);
# 7.查詢掛科超過兩門(包括兩門)的學生姓名和班級
#1.先篩選出小於60分的數據
-- select * from score where num > 60;
# 2.按照學生id分組 然后統計掛科數量
-- select student_id,count(course_id) from score where num < 60 group by student_id;
# 3.篩選出掛科超過兩門的學生id
-- select student_id from score where num < 60 group by student_id having count(course_id) >=2;
# 4.先將上述結果放在一邊 去連接student和class表
-- select student.sname,class.caption from class inner join student on class.cid = student.class_id where student.sid in (select student_id from score where num < 60 group by student_id having count(course_id) >=2);
