第一期:
學生表(學生id,姓名,性別,分數) )student(s_id, name, sex, score)
班級表(班級id,班級名稱) class(c_id, c_name)
學生班級表(班級id,學生id) student_class(s_id,c_id)
1.查詢一班得分在80分以上或者等於60,61,62的學生
2.査詢所有班級的名稱,和所有版中女生人數和女生的平均分。
答案:
(1)SELECT s.s_id,s.name,s.score,sc.c_id,c.c_name from student s LEFT JOIN student_class sc on s.s_id = sc.s_id LEFT JOIN class c on sc.c_id=c.c_id where (s.score>80 or s.score in(60,61,62)) and c.c_name='一班';
(2)SELECT sc.s_id,c.c_name,COUNT(s.sex),AVG(s.score) from student_class sc LEFT JOIN class c on sc.c_id=c.c_id LEFT JOIN student s on sc.s_id = s.s_id where s.sex='女' group BY c.c_name ORDER BY c.c_id asc;
第二期:
sql語句應該考慮哪些安全性?
答案:
(1)防止sql注入,對特殊字符進行轉義,過濾或者使用預編譯的sql語句綁定變量。
(2)最小權限原則,特別是不要用root賬戶,為不同的類型的動作或者組建使用不同的賬戶。
(3)當sql運行出錯時,不要把數據庫返回的錯誤信息全部顯示給用戶,以防止泄漏服務器和數據庫相關信息。
第三期:
用一條 SQL語句查詢出每門課都大於 80 分的學生姓名?
答案:
select name from student where name not in (select name from student where fenshu <=80);
第四期:
MySQL外連接、內連接的區別?
答案:
內連接
連接的數據表相對應的匹配字段完全相等的連接。連接關鍵字是 inner join
外連接
分為左外連接與右外連接、全連接。
左連接的結果集包括指定的左表全部數據與匹配的右表數據,右表中沒匹配的全為空值.關鍵字 left join
右連接的結果集包含指定的右表全部數據與匹配的左邊數據,左邊中沒匹配的全為空值.關鍵字 right join
全連接返回左右數據表的所有行.關鍵字 full join
第五期:
什么是數據庫事務?
答案:
單個邏輯單元執行的一系列操作,這些操作要么全做要么全不做,是不可分割的.事務的開始和結束用戶是可以控制的,如果沒控制則由數據庫默認的划分事務.事務具有以下性質:
(1)原子性
指一個事務要么全執行,要么全不執行.也就是說一個事務不可能執行到一半就停止了.比如:你去買東西,錢付掉了,東西沒拿.這兩步必須同時執行 ,要么都不執行.
(2)一致性
指事務的運行並不改變數據庫中的一致性.比如 a+b=10;a改變了,b也應該隨之改變.
(3)獨立性
兩個以上的事務不會出現交替運行的狀態,因為這樣可能導致數據的不一致
(4)持久性
事務運行成功之后數據庫的更新是永久的
第六期:
union 與union all的區別?
答案:
union 在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產生的結果集進行排 序運算,刪除重復的記錄再返回結果。
union all 則會顯示重復結果,只是簡單的兩個結果合並並返回.所以效率比union高,在保證沒有重復數據的情況下用union all.