1. 程式人生 > >MySQL資料庫的使用方法(連表查詢、分頁查詢)

MySQL資料庫的使用方法(連表查詢、分頁查詢)

資料庫連表查詢

學生表student

老師表teacher

課程表course

選課表student_course

按“0001”號課程成績由高到低順序顯示所有學生學號、姓名、成績(二表連線);

SELECT
       student.student_id,
       student.student_name,
       student_course.score
FROM
       student,
       student_course
WHERE
       student.student_id = student_course.student_id
AND student_course.course_id = '0001'
ORDER BY
       student_course.score DESC; #DESC代表降序排列;ASC代表升序排列

當兩個(多個)表中有相同的欄位(屬性,列名)時,使用表名(或表別名).列名的形式對查詢內容和條件內容進行區分。

執行結果:

2 按“高等數學”課程成績由高到低順序顯示所有學生姓名、學號、分數、課程名(三表連線);

SELECT
       st.student_id,
       st.student_name,
       sc.score,
       co.course_name
FROM
       student AS st,
       student_course AS sc,
       course AS co
WHERE
       st.student_id = sc.student_id
AND sc.course_id = co.course_id
AND co.course_name = '高等數學'
ORDER BY
       sc.score DESC; #DESC代表降序排列;ASC代表升序排列

執行結果:

查詢有薪水差額的任意兩位教師(單表連線查詢);

SELECT
       t1.teacher_id AS '教工號1',
       t1.teacher_name AS '教師姓名1',
       t2.teacher_id AS '教工號2',
       t2.teacher_name AS '教師姓名2'
FROM
       teacher t1,
       teacher t2
WHERE
       t1.teacher_salary > t2.teacher_salary;

執行結果:

查詢既學過“0001”又學過“0002”號課程的所有學生學號;

SELECT
	sc1.student_id '學號'
FROM
	student_course sc1,
	student_course sc2
WHERE
	sc1.student_id = sc2.student_id
AND sc1.course_id = '0001'
AND sc2.course_id = '0002';

執行結果:

查詢“0001”號課程比“0002”號課程成績低的所有學生學號姓名;

SELECT
	st.student_id '學號',
	st.student_name '姓名'
FROM
	student_course sc1,
	student_course sc2,
	student st
WHERE
	sc1.student_id = sc2.student_id
AND sc1.student_id = st.student_id
AND sc1.course_id = '0001'
AND sc2.course_id = '0002'
AND sc1.score < sc2.score;

執行結果:

6. 查詢“0003”老師教的所有的學生

SELECT
	st.*
FROM
        student as st inner join teacher as th on st.teacher_id=th.teacher_id where th.teacher_id =0003

mysql資料庫分頁查詢

select * from student limit 2,3

執行結果

 上面查詢中的2代表從第2條資料之後開始,注意是第2條資料之後,不包含第2條資料。3代表總共查詢3條記錄。那麼limit 2,3代表從第2(不包含第2資料開始查詢出3條記錄。

建立表及插入資料

我們按照以下的語句對我們的資料庫操進行建表和插入資料,方便接下來對我們的兩張表進行操作和演示

#資料庫建表
CREATE TABLE IF NOT EXISTS 'student' (
    'id' INT AUTO_INCREMENT,
    'name' VARCHAR(18) NOT NULL COMMENT '姓名',
    'age' VARCHAR(18) NOT NULL COMMENT '年齡',
    'weight' VARCHAR(18) NOT NULL COMMENT '體重',
    'sex' VARCHAR(18) NOT NULL COMMENT '性別',
    'height' VARCHAR(18) NOT NULL COMMENT '身高',
    'teacher_id' INT NOT NULL COMMENT '教師id',
    'create_time' datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
    PRIMARY KEY ('id')
) ENGINE = InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS 'teacher'(
    'id' INT AUTO_INCREMENT,
    'name' VARCHAR(18) NOT NULL COMMENT '姓名',
    'age'  VARCHAR(18) NOT NULL COMMENT '年齡',
    'weight'  VARCHAR(18) NOT NULL COMMENT '體重',
    'height' VARCHAR(18) NOT NULL COMMENT '身高',
    'sex'  VARCHAR(18) NOT NULL COMMENT '性別',
    'create_time' datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
    PRIMARY KEY ('id')
)ENGINE = InnoDB DEFAULT CHARSET=utf8;
# 在學生表中插入資料
INSERT INTO student(name,age,weight,sex,height,teacher_id)VALUES
                    ("花花","18","50","女","165",1),
                    ("菲菲","17","47","男","162",1),
                    ("西西","19","45","女","161",2),
                    ("玥玥","16","40","女","160",1),
                    ("涵涵","15","49","男","164",2),
                    ("涵涵","17","48","男","163",2),
                    ("若若","20","45","女","161",1);
# 在老師表中插入資料
INSERT INTO teacher (name,age,weight,height,sex)VALUES
                    ("高飛","26","64","170","女"),
                    ("張宇","28","74","179","男");

檢視學生表有無資料

檢視老師表有無資料

刪除表

更新表

排序

這裡時間是一樣的,因為我是批量插入的所以沒有變化

分組

這裡的涵涵原本是有兩個的現在只有一個了

如果執行上面這句報錯進入/etc目錄下,在my.cnf中加上下面圖片所示的程式碼

連表查詢

 

查詢多少個女學生

 

查詢男生的總體重

增加一個老師表中的欄位,用於統計有多少學生

更新老師表中的資料