MySQL資料庫的使用方法(連表查詢、分頁查詢)
阿新 • • 發佈:2018-12-28
資料庫連表查詢
學生表student
老師表teacher
課程表course
選課表student_course
1 按“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代表升序排列
執行結果:
3 查詢有薪水差額的任意兩位教師(單表連線查詢);
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;
執行結果:
4 查詢既學過“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';
執行結果:
5 查詢“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中加上下面圖片所示的程式碼
連表查詢
查詢多少個女學生
查詢男生的總體重
增加一個老師表中的欄位,用於統計有多少學生
更新老師表中的資料