基於MySql數據庫的單表與多表聯合查詢

這裏以學生 班級 身份證 以及課程爲例

1,啓動MySql數據庫  開啓服務數據庫

2.1.0新建一張班級表測試

備註:CHARSET = UTF8 (指定編碼格式爲utf8 防止中文亂碼)編碼

/*班級表*/
CREATE TABLE CLASS_INFO(
C_ID INT PRIMARY KEY,
CLASS_NAME VARCHAR(20) not NULL
)CHARSET = UTF8;

運行效果:spa

新建成功3d

 

2.1.1依次建好學生表(學生表有一個指向班級表的主鍵  以便作關聯查詢)code

/*學生表*/
CREATE TABLE STUDENTS(
STU_ID INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
STU_NAME VARCHAR(20) NOT NULL,
STU_AGE INT NOT NULL,
C_ID INT references CLASS_INFO(C_ID)
)CHARSET = UTF8;

 

 2.1.2身份證表(身份證表有一個外鍵指向學生表的主鍵 以便作學生—身份證一對一查詢)blog

/*身份證表*/
CREATE TABLE STU_CARD(
CARD_ID INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
CARD_NUM VARCHAR(30)  NOT NULL,
STU_ID INT REFERENCES  STUDENTS(STU_ID) 
)CHARSET = UTF8;
/*給STU_CARD列添加一個惟一約束  保證身份證跟學生是一對一的關係*/
ALTER TABLE STU_CARD ADD UNIQUE (STU_ID);

 

 2.1.3課程表數學

/*課程表*/
CREATE TABLE COURSE(
    COURSE_ID INT PRIMARY KEY NOT NULL,
    COURSE_NAME VARCHAR(20) NOT NULL
)CHARSET = UTF8;

 

 2.1.4 學生跟課程關聯的中間表(多對多須要有一箇中間表來維護2張表的關係)table

/*關聯學生和課程的中間表*/
CREATE TABLE COURSE_STU(
    STU_ID INT references STUDENTS(STU_ID),
    COURSE_ID INT REFERENCES COURSE(COURSE_ID)
)CHARSET = UTF8;

 

3.分別插入測試數據

3.1.0給班級表插入測試數據class

INSERT INTO CLASS_INFO VALUES (1,'TEAM01');
INSERT INTO CLASS_INFO VALUES (2,'TEAM02');
INSERT INTO CLASS_INFO VALUES (3,'TEAM03');

 

3.1.1給學生表插入測試數據(學生id,學生姓名,年齡,該學生所在的班級)

INSERT INTO STUDENTS VALUES(1,'張三',12,1);
INSERT INTO STUDENTS VALUES(2,'李四',15,3);
INSERT INTO STUDENTS VALUES(3,'王五',15,2);
INSERT INTO STUDENTS VALUES(4,'趙六',16,2);
INSERT INTO STUDENTS VALUES(5,'小二',12,3);

 

3.1.2給身份證表插入測試數據(id,身份證號,身份證所關聯的學生)

INSERT INTO STU_CARD VALUES(1,'1234566543',2);
INSERT INTO STU_CARD VALUES(2,'4324543565',1);
INSERT INTO STU_CARD VALUES(3,'2345654334',3);

 

3.1.3給課程表表插入測試數據(id,課程)

INSERT INTO COURSE VALUES(1,'語文');
INSERT INTO COURSE VALUES(2,'數學');
INSERT INTO COURSE VALUES(3,'英語');

 

3.1.4給學生—學科中間表插入測試數據(第一列指向學生ID , 第二列指向課程ID)

INSERT INTO COURSE_STU VALUES (1,1);
INSERT INTO COURSE_STU VALUES (2,2);
INSERT INTO COURSE_STU VALUES (2,3);
INSERT INTO COURSE_STU VALUES (3,2);

 

4.查出全部所建的表 以及 插入的數據

SELECT * FROM CLASS_INFO;
SELECT * from students;
SELECT * FROM STU_CARD;
SELECT * from COURSE;
SELECT * FROM COURSE_STU;

運行效果:

 

 

 

 

 

5.查詢

5.1.1查出班級ID爲2的全部學生信息

/* 查出班級ID爲2的全部學生信息*/
SELECT * FROM STUDENTS S LEFT JOIN CLASS_INFO C ON  S.C_ID=C.C_ID WHERE C.C_ID = 2;

 運行效果:

 

5.1.2查詢學生表的總記錄數

/*查詢學生表的總記錄數*/
SELECT COUNT(*) FROM STUDENTS;

 運行效果:

 

5.1.3查詢班級id爲2的總記錄數

/*查詢班級id爲2的總記錄數*/
SELECT COUNT(*) FROM STUDENTS S LEFT JOIN CLASS_INFO C ON  S.C_ID=C.C_ID WHERE C.C_ID = 2;

運行效果:

 

5.1.4查出班級名稱爲TEAM01的全部學生信息

/* 查出班級名稱爲TEAM01的學生信息(班級,姓名,年齡)*/
SELECT C.CLASS_NAME, S.STU_NAME,S.STU_AGE FROM STUDENTS S LEFT JOIN CLASS_INFO C ON  S.C_ID=C.C_ID WHERE C.CLASS_NAME='TEAM01';

運行效果:

 

5.1.5查出全部人以及所在的班級

/*查出全部人以及所在的班級*/
SELECT S.STU_NAME, C.CLASS_NAME FROM STUDENTS S LEFT JOIN CLASS_INFO C ON C.C_ID = S.C_ID;

 運行效果:

 

5.1.6查詢班級ID爲2 的全部學生id 姓名 以及年齡

/*查詢班級ID爲2 的全部學生id 姓名 以及年齡*/
SELECT C.C_ID , C.CLASS_NAME, S.STU_NAME,S.STU_AGE FROM CLASS_INFO C LEFT JOIN STUDENTS S ON C.C_ID = S.C_ID WHERE S.C_ID= 2;

運行效果:

 

5.1.7查詢班級ID爲3 的班級名稱 以及學生年齡  降序排列  

/*查詢班級ID爲3 的班級名稱 以及學生年齡  降序排列   升序ASC*/
SELECT C.CLASS_NAME, S.STU_NAME,S.STU_AGE FROM CLASS_INFO C LEFT JOIN STUDENTS S ON C.C_ID = S.C_ID WHERE C.C_ID=3 ORDER BY S.STU_AGE DESC;

 運行效果:

 

5.1.8查詢ID爲1 的學生所在的班級(CLASS_INFO) 姓名 年齡(STUDENTS) 以及 身份證號(STU_CARD) 3表聯查

/*查詢ID爲1 的學生所在的班級(CLASS_INFO) 姓名 年齡(STUDENTS) 以及 身份證號(STU_CARD) 3表聯查*/
SELECT C.CLASS_NAME, S.STU_NAME,S.STU_AGE,CA.CARD_NUM FROM STU_CARD CA LEFT JOIN STUDENTS S ON CA.STU_ID=S.STU_ID LEFT JOIN class_info C ON C.C_ID=S.C_ID WHERE S.STU_ID = 1;

運行效果:

 

5.1.9右鏈接查詢每一個學生所選的每一門課程  以課程爲基準

/*右鏈接查詢每一個學生所選的每一門課程  以課程爲基準*/
SELECT * FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID RIGHT  JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID;

運行效果:

 

5.2.0右鏈接查詢 學生ID 姓名 以及所選的課程

/*右鏈接查詢 學生ID 姓名 以及所選的課程*/
SELECT S.STU_ID, S.STU_NAME,C.COURSE_NAME FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID RIGHT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID;

運行效果:

 

5.2.1查詢全部學生ID 姓名 年齡(STUDENTS) 以及他所選的課程(3表聯查)

/*查詢全部學生ID 姓名 年齡(STUDENTS) 以及他所選的課程(3表聯查)*/
SELECT S.STU_ID , S.STU_NAME,S.STU_AGE, C.COURSE_NAME FROM STUDENTS S LEFT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID;

運行效果:

 

5.2.2查詢學生id爲2的學生姓名 以及他所選的課程

/*查詢學生id爲2的學生姓名 以及他所選的課程*/
SELECT S.STU_NAME,C.COURSE_NAME FROM STUDENTS S LEFT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID WHERE S.STU_ID = 2;

運行效果:

 

5.2.3查詢班級id爲2 的學生姓名 所選的課程 以及所在的班級名稱

/*查詢班級id爲2 的學生姓名 所選的課程 以及所在的班級名稱*/
SELECT  S.STU_NAME, C.COURSE_NAME,CL.CLASS_NAME FROM STUDENTS S LEFT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID LEFT JOIN CLASS_INFO CL ON CL.C_ID=S.C_ID WHERE CL.C_ID=2;

運行效果:

 

5.2.4查詢全部學生的學生身份證信息,身份證信息,班級信息

/*查詢全部學生的學生身份證信息,身份證信息,班級信息*/
SELECT * FROM STUDENTS S LEFT JOIN STU_CARD CA ON S.STU_ID = CA.STU_ID RIGHT JOIN CLASS_INFO C ON S.C_ID = C.C_ID;

運行效果:

 

5.2.5  4表聯查 學生信息,課程信息 班級信息 身份證信息

/*4表聯查 學生信息,課程信息 班級信息 身份證信息*/
SELECT * FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID LEFT JOIN CLASS_INFO CI ON CI.C_ID=S.C_ID LEFT JOIN STU_CARD SC ON SC.STU_ID = S.STU_ID; 

運行效果:

 

5.2.6  5張表聯查  查出學生姓名 他所在的班級 所選的課程 以及該學生的身份證號

/*5張表聯查  查出學生姓名 他所在的班級 所選的課程 以及該學生的身份證號*/
SELECT S.STU_NAME,CI.CLASS_NAME,C.COURSE_NAME,SC.CARD_NUM FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID LEFT JOIN CLASS_INFO CI ON CI.C_ID=S.C_ID LEFT JOIN STU_CARD SC ON SC.STU_ID = S.STU_ID;

運行效果:

 

5.2.7  5張表聯查  查出學生ID爲2的學生姓名 他所在的班級 所選的課程 以及該學生的身份證號

/*5張表聯查  查出學生ID爲2的學生姓名 他所在的班級 所選的課程 以及該學生的身份證號*/
SELECT S.STU_NAME,CI.CLASS_NAME,C.COURSE_NAME,SC.CARD_NUM FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID LEFT JOIN CLASS_INFO CI ON CI.C_ID=S.C_ID LEFT JOIN STU_CARD SC ON SC.STU_ID = S.STU_ID WHERE S.STU_ID=2

運行效果: 

 

 所有建表語句 以及 查詢語句以下:

drop TABLE students
drop table CLASS_INFO
drop table course
drop table stu_card;
drop table COURSE_STU;

/*學生表*/
CREATE TABLE STUDENTS(
STU_ID INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
STU_NAME VARCHAR(20) NOT NULL,
STU_AGE INT NOT NULL,
C_ID INT references CLASS_INFO(C_ID)
)CHARSET = UTF8;

/*班級表*/
CREATE TABLE CLASS_INFO(
C_ID INT PRIMARY KEY,
CLASS_NAME VARCHAR(20) not NULL
)CHARSET = UTF8;


/*身份證表*/
CREATE TABLE STU_CARD(
CARD_ID INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
CARD_NUM VARCHAR(30)  NOT NULL,
STU_ID INT REFERENCES  STUDENTS(STU_ID) 
)CHARSET = UTF8;
/*給STU_CARD列添加一個惟一約束  保證身份證跟學生是一對一的關係*/
ALTER TABLE STU_CARD ADD UNIQUE (STU_ID);

/*課程表*/
CREATE TABLE COURSE(
    COURSE_ID INT PRIMARY KEY NOT NULL,
    COURSE_NAME VARCHAR(20) NOT NULL
)CHARSET = UTF8;

/*關聯學生和課程的中間表*/
CREATE TABLE COURSE_STU(
    STU_ID INT references STUDENTS(STU_ID),
    COURSE_ID INT REFERENCES COURSE(COURSE_ID)
)CHARSET = UTF8;

INSERT INTO CLASS_INFO VALUES (1,'TEAM01');
INSERT INTO CLASS_INFO VALUES (2,'TEAM02');
INSERT INTO CLASS_INFO VALUES (3,'TEAM03');

INSERT INTO STUDENTS VALUES(1,'張三',12,1);
INSERT INTO STUDENTS VALUES(2,'李四',15,3);
INSERT INTO STUDENTS VALUES(3,'王五',15,2);
INSERT INTO STUDENTS VALUES(4,'趙六',16,2);
INSERT INTO STUDENTS VALUES(5,'小二',12,3);


INSERT INTO STU_CARD VALUES(1,'1234566543',2);
INSERT INTO STU_CARD VALUES(2,'4324543565',1);
INSERT INTO STU_CARD VALUES(3,'2345654334',3);
INSERT INTO STU_CARD VALUES(4,'4345324534',3);

INSERT INTO COURSE VALUES(1,'語文');
INSERT INTO COURSE VALUES(2,'數學');
INSERT INTO COURSE VALUES(3,'英語');

INSERT INTO COURSE_STU VALUES (1,1);
INSERT INTO COURSE_STU VALUES (2,2);
INSERT INTO COURSE_STU VALUES (2,3);
INSERT INTO COURSE_STU VALUES (3,2);


SELECT * FROM CLASS_INFO;
SELECT * from students;
SELECT * FROM STU_CARD;
SELECT * from COURSE;
SELECT * FROM COURSE_STU;

DELETE FROM STU_CARD WHERE CARD_ID = 4;
DELETE FROM COURSE_STU WHERE COURSE_ID = 3;
/* 查出班級ID爲2的全部學生信息*/
SELECT * FROM STUDENTS S LEFT JOIN CLASS_INFO C ON  S.C_ID=C.C_ID WHERE C.C_ID = 2;

/*查詢學生表的總記錄數*/
SELECT COUNT(*) FROM STUDENTS;

/*查詢班級id爲2的總記錄數*/
SELECT COUNT(*) FROM STUDENTS S LEFT JOIN CLASS_INFO C ON  S.C_ID=C.C_ID WHERE C.C_ID = 2;

/* 查出班級名稱爲TEAM01的全部學生信息*/
SELECT C.CLASS_NAME, S.STU_NAME,S.STU_AGE FROM STUDENTS S LEFT JOIN CLASS_INFO C ON  S.C_ID=C.C_ID WHERE C.CLASS_NAME='TEAM02';

/*查出全部人以及所在的班級*/
SELECT S.STU_NAME, C.CLASS_NAME FROM STUDENTS S LEFT JOIN CLASS_INFO C ON C.C_ID = S.C_ID;

/*查詢班級ID爲2 的全部學生id 姓名 以及年齡*/
SELECT C.C_ID , C.CLASS_NAME, S.STU_NAME,S.STU_AGE FROM CLASS_INFO C LEFT JOIN STUDENTS S ON C.C_ID = S.C_ID WHERE S.C_ID= 2;

/*查詢班級ID爲1 的班級名稱 以及學生年齡  降序排列   升序ASC*/
SELECT C.CLASS_NAME, S.STU_NAME,S.STU_AGE FROM CLASS_INFO C LEFT JOIN STUDENTS S ON C.C_ID = S.C_ID WHERE C.C_ID=3 ORDER BY S.STU_AGE DESC;


/*查詢ID爲1 的學生所在的班級(CLASS_INFO) 姓名 年齡(STUDENTS) 以及 身份證號(STU_CARD) 3表聯查*/
SELECT C.CLASS_NAME, S.STU_NAME,S.STU_AGE,CA.CARD_NUM FROM STU_CARD CA LEFT JOIN STUDENTS S ON CA.STU_ID=S.STU_ID LEFT JOIN class_info C ON C.C_ID=S.C_ID WHERE S.STU_ID = 1;

/*右鏈接查詢每一個學生所選的每一門課程  以課程爲基準*/
SELECT * FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID RIGHT  JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID;

/*右鏈接查詢 學生ID 姓名 以及所選的課程*/
SELECT S.STU_ID, S.STU_NAME,C.COURSE_NAME FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID RIGHT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID;
/*查詢全部學生ID 姓名 年齡(STUDENTS) 以及他所選的課程(3表聯查)*/
SELECT S.STU_ID , S.STU_NAME,S.STU_AGE, C.COURSE_NAME FROM STUDENTS S LEFT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID;
/*查詢學生id爲2的學生姓名 以及他所選的課程*/
SELECT S.STU_NAME,C.COURSE_NAME FROM STUDENTS S LEFT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID WHERE S.STU_ID = 2;

/*查詢班級id爲2 的學生姓名 所選的課程 以及所在的班級名稱*/
SELECT  S.STU_NAME, C.COURSE_NAME,CL.CLASS_NAME FROM STUDENTS S LEFT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID LEFT JOIN CLASS_INFO CL ON CL.C_ID=S.C_ID WHERE CL.C_ID=2;

/*查詢學生ID爲2的全部學生信息(學生表+身份證表+班級表)*/
SELECT * FROM STUDENTS S LEFT JOIN STU_CARD CA ON S.STU_ID = CA.STU_ID LEFT JOIN CLASS_INFO C ON S.C_ID = C.C_ID WHERE S.STU_ID = 2;

/*查詢全部學生的學生身份證信息,身份證信息,班級信息*/
SELECT * FROM STUDENTS S LEFT JOIN STU_CARD CA ON S.STU_ID = CA.STU_ID RIGHT JOIN CLASS_INFO C ON S.C_ID = C.C_ID;

/*查詢班級名稱爲TEAM02的全部學生的學生身份證信息,身份證信息,班級信息*/
SELECT * FROM STUDENTS S LEFT  JOIN STU_CARD CA ON S.STU_ID = CA.STU_ID RIGHT JOIN CLASS_INFO C ON S.C_ID = C.C_ID WHERE C.CLASS_NAME='TEAM02';


/*4表聯查 學生信息,課程信息 班級信息 身份證信息*/
SELECT * FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID LEFT JOIN CLASS_INFO CI ON CI.C_ID=S.C_ID LEFT JOIN STU_CARD SC ON SC.STU_ID = S.STU_ID;

/*5張表聯查  查出學生姓名 他所在的班級 所選的課程 以及該學生的身份證號*/
SELECT S.STU_NAME,CI.CLASS_NAME,C.COURSE_NAME,SC.CARD_NUM FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID LEFT JOIN CLASS_INFO CI ON CI.C_ID=S.C_ID LEFT JOIN STU_CARD SC ON SC.STU_ID = S.STU_ID;

/*5張表聯查  查出學生ID爲2的學生姓名 他所在的班級 所選的課程 以及該學生的身份證號*/
SELECT S.STU_NAME,CI.CLASS_NAME,C.COURSE_NAME,SC.CARD_NUM FROM STUDENTS S RIGHT JOIN COURSE_STU CS ON S.STU_ID = CS.STU_ID LEFT JOIN COURSE C ON C.COURSE_ID = CS.COURSE_ID LEFT JOIN CLASS_INFO CI ON CI.C_ID=S.C_ID LEFT JOIN STU_CARD SC ON SC.STU_ID = S.STU_ID WHERE S.STU_ID=2;
相關文章
相關標籤/搜索