一.建立相應的表
1)建立一張學生信息的表,包含 id(自增),學號,姓名,性別,身高,體重,備註spa
CREATE TABLE t_student ( id int(25) PRIMARY KEY auto_increment, number int(25) UNIQUE not null, name varchar(25) not null , gender varchar(9) not null, height int(25) default 0, weight int(25) default 0, comment varchar(9) default ' ' ); insert into t_student values(null,2018001,'李四','男',167,50,''); insert into t_student values(null,2018002,'李內','男',173,58,''); insert into t_student values(null,2018003,'蒙牛','男',172,70,'');
±—±--------±-------±-------±-------±-------±--------+
| id | number | name | gender | height | weight | comment |
±—±--------±-------±-------±-------±-------±--------+
| 1 | 2018001 | 李四 | 男 | 167 | 50 | |
| 2 | 2018002 | 李內 | 男 | 173 | 58 | |
| 3 | 2018003 | 蒙牛 | 男 | 172 | 70 | |
±—±--------±-------±-------±-------±-------±--------+
2)建立一張成績表,包含 成績ID ,學號,科目(語數英),年級,分數
根據設計的目的這個時候,要考慮到兩張表之間的關係,學生信息表的學號成爲成績表的外鍵,確保學號的一致性,代碼以下:
須要注意的是,在下表中不能再將number學號再設置爲惟一鍵了,由於要存放多個重複的值。設計
create table t_grade ( id int(26) primary key auto_increment, number int(26) not null , subject varchar(10) not null , class varchar(10) not null, score float(10,2) default 0.0 , foreign key (number) REFERENCES t_student(number)); insert into t_grade values(null,2018001,'數學','高一上',89); insert into t_grade values(null,2018001,'語文','高一上',93); insert into t_grade values(null,2018001,'英語','高一上',79); insert into t_grade values(null,2018002,'數學','高一上',84); insert into t_grade values(null,2018002,'語文','高一上',95); insert into t_grade values(null,2018002,'英語','高一上',45); insert into t_grade values(null,2018003,'數學','高一上',84); insert into t_grade values(null,2018003,'語文','高一上',99); insert into t_grade values(null,2018003,'英語','高一上',78);
±—±--------±--------±----------±------+
| id | number | subject | class | score |
±—±--------±--------±----------±------+
| 1 | 2018001 | 數學 | 高一上 | 89.00 |
| 2 | 2018001 | 語文 | 高一上 | 93.00 |
| 3 | 2018001 | 英語 | 高一上 | 79.00 |
| 4 | 2018002 | 數學 | 高一上 | 84.00 |
| 5 | 2018002 | 語文 | 高一上 | 95.00 |
| 6 | 2018002 | 英語 | 高一上 | 45.00 |
| 7 | 2018003 | 數學 | 高一上 | 84.00 |
| 8 | 2018003 | 語文 | 高一上 | 99.00 |
| 9 | 2018003 | 英語 | 高一上 | 78.00 |
±—±--------±--------±----------±------+code
以上的難點在於處理兩個表之間的關係。blog
二.進行連表查詢
1)查詢高一上學期,全部人的總成績,而且從高到低順序rem
select name,student.number,class,sum(score) from t_student as student,t_grade as grade where student.number=grade.number and class = '高一上' GROUP BY grade.number ORDER BY SUM(score) ASC ;
±-------±--------±----------±-----------+
| name | number | class | sum(score) |
±-------±--------±----------±-----------+
| 李內 | 2018002 | 高一上 | 224.00 |
| 李四 | 2018001 | 高一上 | 261.00 |
| 蒙牛 | 2018003 | 高一上 | 261.00 |
±-------±--------±----------±-----------+數學
首先,分析上面的語句,先選則要查詢的字段,注意到number字段在兩個表中都有,因此能夠用來作,相等判斷,保持名字和學號在兩個表中的一致性。
兩個表中都有number字段,指定其中一個便可。
還有是根據number分組的,因此查詢選擇分組很重要。
2)查詢高一上全部女同窗的總成績
±—±--------±-------±-------±-------±-------±--------+
| id | number | name | gender | height | weight | comment |
±—±--------±-------±-------±-------±-------±--------+
| 1 | 2018001 | 李四 | 男 | 167 | 50 | |
| 2 | 2018002 | 李內 | 男 | 173 | 58 | |
| 3 | 2018003 | 蒙牛 | 男 | 172 | 70 | |
| 4 | 2018004 | 慧萍 | 女 | 167 | 50 | |
| 5 | 2018005 | 流水 | 女 | 173 | 58 | |
| 6 | 2018006 | 蒙香 | 女 | 172 | 70 | |
±—±--------±-------±-------±-------±-------±--------+
±—±--------±--------±----------±------+
| id | number | subject | class | score |
±—±--------±--------±----------±------+
| 1 | 2018001 | 數學 | 高一上 | 89.00 |
| 2 | 2018001 | 語文 | 高一上 | 93.00 |
| 3 | 2018001 | 英語 | 高一上 | 79.00 |
| 4 | 2018002 | 數學 | 高一上 | 84.00 |
| 5 | 2018002 | 語文 | 高一上 | 95.00 |
| 6 | 2018002 | 英語 | 高一上 | 45.00 |
| 7 | 2018003 | 數學 | 高一上 | 84.00 |
| 8 | 2018003 | 語文 | 高一上 | 99.00 |
| 9 | 2018003 | 英語 | 高一上 | 78.00 |
| 10 | 2018004 | 數學 | 高一上 | 89.00 |
| 11 | 2018004 | 語文 | 高一上 | 93.00 |
| 12 | 2018004 | 英語 | 高一上 | 79.00 |
| 13 | 2018005 | 數學 | 高一上 | 84.00 |
| 14 | 2018005 | 語文 | 高一上 | 95.00 |
| 15 | 2018005 | 英語 | 高一上 | 45.00 |
| 16 | 2018006 | 數學 | 高一上 | 84.00 |
| 17 | 2018006 | 語文 | 高一上 | 99.00 |
| 18 | 2018006 | 英語 | 高一上 | 78.00 |
±—±--------±--------±----------±------+
查詢代碼以下:table
select name,gender,students.number,class,SUM(score) from t_student as students,t_grade as grade where students.number=grade.number and class= '高一上' and students.gender='女' GROUP BY grade.number ORDER BY SUM(score) ASC;
關鍵點仍是同樣,要確保兩表的數據一致性,students.number=grade.number 添加這句就是要名字和學號相對應,如若不加的話就會默認匹配一條記錄而已,會出錯的。class