mysql查詢並生產表 MYSQL實現連表查詢

2021-10-17 11:35:25 字數 4164 閱讀 7643

一.建立相應的表

1)建立一張學生資訊的表,包含 id(自增),學號,姓名,性別,身高,體重,備註

create tablet_student (

idint(25) primary keyauto_increment,number int(25) unique not null,

namevarchar(25) not null,

gendervarchar(9) not null,

heightint(25) default 0,

weightint(25) default 0,

commentvarchar(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 tablet_grade (

idint(26) primary keyauto_increment,number int(26) not null,

subjectvarchar(10) not null,

classvarchar(10) not null,

scorefloat(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 |

以上的難點在於處理兩個表之間的關係。

二.進行連表查詢

1)查詢高一上學期,所有人的總成績,並且從高到低順序

select name,student.number,class,sum(score) from t_student as student,t_grade asgradewhere 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 |

查詢**如下:

select name,gender,students.number,class,sum(score) from t_student as students,t_grade asgradewhere students.number=grade.number and class= '高一上' and students.gender='女'

group by grade.number order by sum(score) asc;

關鍵點還是一樣,要確保兩表的資料一致性,students.number=grade.number 新增這句就是要名字和學號相對應,如若不加的話就會預設匹配一條記錄而已,會出錯的。

MySql 查詢 生產序列號

mysql 如何實現 oracle 的 rownum mysql select from frutas nombre color fresa rojo platano amarillo manzana verde uva verde pera verde mandarina naranja melo...

查詢鎖表並殺死鎖表

1 查詢鎖表的sid 和 serial select s.sid s.serial from v locked object lo dba objects ao v session s where ao.object id lo.object id andlo.session id s.sid 2 ...

查詢Mysql並寫入檔案

conding utf 8 import pymysql import os import sys 開啟資料庫連線 db pymysql.connect 10.33.85.145 root uxx 2013 使用 cursor 方法建立乙個游標物件 cursor runsql db.cursor 使...