(5)查詢資料
阿新 • • 發佈:2019-01-29
(1)建立student表和score表
CREATE TABLE student(id INT(10) NOT NULL UNIQUE PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
sex VARCHAR(4),
birth YEAR,
department VARCHAR(20),
address VARCHAR(50)
);
CREATE TABLE score(id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
stu_id INT(10) NOT NULL,
c_name VARCHAR(20),
grade INT(10)
);
(2)插入資料
INSERT INTO student VALUES(901,'張老大','男',1985,'計算機系','北京市海定區');
INSERT INTO student VALUES(902,'張老二','男',1986,'中文系','北京市昌平區');
INSERT INTO student VALUES(903,'張三','女',1990,'中文系','湖南省永州市');
INSERT INTO student VALUES(904,'李四','男',1990,'英語系','遼寧省新市');
INSERT INTO student VALUES(905,'王五','女',1991,'英語系','福建省廈門市');
INSERT INTO student VALUES(906,'王六','男',1988,'計算機系','湖南省衡陽市');
INSERT INTO score VALUES(NULL,901,'計算機',98);
INSERT INTO score VALUES(NULL,901,'英語',80);
INSERT INTO score VALUES(NULL,902,'計算機',65);
INSERT INTO score VALUES(NULL,902,'中文',88);
INSERT INTO score VALUES(NULL,903,'中文',95);
INSERT INTO score VALUES(NULL,904,'計算機',70);
INSERT INTO score VALUES(NULL,904,'英語',92);
INSERT INTO score VALUES(NULL,905,'英語',94);
INSERT INTO score VALUES(NULL,906,'計算機',90);
INSERT INTO score VALUES(NULL,906,'英語',85);
(3)查詢student表的所有記錄
SELECT * FROM student;
SELECT id,NAME,sex,birth,department,address FROM student;
(4)查詢student表的第2~4條記錄 通過 LIMIT 關鍵字查詢
1表示從第二條記錄開始查詢,3表示查詢三條資料
SELECT * FROM student LIMIT 1,3;
(5)要從student表查詢所有的學生的學號、姓名和院系的資訊,就必須在select語句中指定欄位
SELECT id,NAME,department FROM student;
(6)查詢計算機系和英語系的學生的資訊有兩種方法
SELECT * FROM student
WHERE department IN ('計算機系','英語系');
SELECT * FROM student
WHERE department='計算機系' OR department='英語系';
其中 = 可以用 LIKE 代替
(7)從student表中查詢年齡為18~22歲學生的資訊 可以通過 AS 關鍵字將2009-birth取名為age
SELECT NAME,2009-birth AS age FROM student;
SELECT id,NAME,sex,2009-birth AS age,department,address FROM student WHERE 2009-birth BETWEEN 18 AND 22;
SELECT id,NAME,sex,2009-birth AS age,department,address FROM student WHERE 2009-birth>=18 AND 2009-birth<=22;
(8)student表中查詢每個院系有多少人。先必須按院系進行分組,然後再計算人數
SELECT department,COUNT(id) FROM student GROUP BY department;
(9)從score表中查詢每個科目的最高分。首先按照c_anme欄位對score表中的記錄進行分組。然後使用MAX()函式計算每組的最大值。
SELECT c_name,MAX(grade) FROM score GROUP BY c_name;
(10)查詢李四的考試科目(c_anme)和考試成績(grade)。科目和成績都儲存在score表中。但是score表中只有學生的學號,沒有學生的姓名。
所以必須根據學生學生姓名從student表中取出學生的學號。然後再從score表中查詢該學生的考試科目和成績
SELECT c_name,grade FROM score WHERE stu_id=
(SELECT id FROM student WHERE NAME='李四');
(11)用連線查詢的方式查詢所有學生的資訊號考試資訊。因為student表的id欄位和score表的stu_id欄位都是表示學號。
SELECT student.id,NAME,sex,birth,department,address,c_name,grade
FROM student,score
WHERE student.id=score.stu_id;
取名
SELECT s1.id,NAME,sex,birth,department,address,c_name,grade
FROM student s1,score s2
WHERE s1.id=s2.stu_id;
(12)計算每個學生的總成績。所有學生的成績都儲存在score表中。要計算每個同學的總成績,必須按學號進行分組,然後用SUM()函式計算總成績
SELECT stu_id ,SUM(grade)
FROM score GROUP BY stu_id;
如果還需要顯示學生的姓名,就需要將兩個表連線,將連線好的結果進行分組。
SELECT student.id,NAME,SUM(grade)
FROM student,score
WHERE student.id=score.stu_id
GROUP BY student.id;
(13)計算每個考試科目的平均成績。先必須將score表按照科目(c_name)進行分組
然後再使用 AVG()函式計算每組平均值
SELECT c_name,AVG(grade)
FROM score GROUP BY c_name
(14)查詢計算機成績低於95的學生的資訊
SELECT * FROM student
WHERE id IN
(SELECT stu_id FROM score
WHERE c_name="計算機" AND grade<95);
(15)查詢同時參加計算機和英語考試的學生的資訊。先從score表中查詢誰同時參加了計算機和英語這兩門考試,
取出該同學的學號,再去student表中查詢
SELECT * FROM student
WHERE id=ANY
(SELECT stu_id FROM score
WHERE stu_id IN(
SELECT stu_id FROM
score WHERE c_name='計算機')
AND c_name='英語');
//巢狀子查詢
(16)將計算機成績按照從高到低排序
SELECT stu_id,grade
FROM score WHERE c_name='計算機'
ORDER BY grade DESC;
(17)從student表和score表中查詢出學生的學號,然後合併查詢結果 使用 UNION 關鍵字 自動取出相同記錄
SELECT id FROM student
UNION
SELECT stu_id FROM score;
(18)查詢姓張或者姓王的同學的姓名、院系、考試科目和成績
SELECT student.id,NAME,sex,birth,department,address,c_name,grade
FROM student,score
WHERE
(NAME LIKE '張%' OR NAME LIKE '王%')
AND
student.id=score.stu_id;
(19)查詢都是湖南的同學的姓名、年齡、院系、考試科目和成績。
SELECT student.id,NAME,sex,birth,department,address,c_name,grade
FROM student,score
WHERE
address LIKE '湖南%' AND
student.id=score.stu_id;
CREATE TABLE student(id INT(10) NOT NULL UNIQUE PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
sex VARCHAR(4),
birth YEAR,
department VARCHAR(20),
address VARCHAR(50)
);
CREATE TABLE score(id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
stu_id INT(10) NOT NULL,
c_name VARCHAR(20),
grade INT(10)
);
(2)插入資料
INSERT INTO student VALUES(901,'張老大','男',1985,'計算機系','北京市海定區');
INSERT INTO student VALUES(902,'張老二','男',1986,'中文系','北京市昌平區');
INSERT INTO student VALUES(903,'張三','女',1990,'中文系','湖南省永州市');
INSERT INTO student VALUES(904,'李四','男',1990,'英語系','遼寧省新市');
INSERT INTO student VALUES(905,'王五','女',1991,'英語系','福建省廈門市');
INSERT INTO student VALUES(906,'王六','男',1988,'計算機系','湖南省衡陽市');
INSERT INTO score VALUES(NULL,901,'計算機',98);
INSERT INTO score VALUES(NULL,901,'英語',80);
INSERT INTO score VALUES(NULL,902,'計算機',65);
INSERT INTO score VALUES(NULL,902,'中文',88);
INSERT INTO score VALUES(NULL,903,'中文',95);
INSERT INTO score VALUES(NULL,904,'計算機',70);
INSERT INTO score VALUES(NULL,904,'英語',92);
INSERT INTO score VALUES(NULL,905,'英語',94);
INSERT INTO score VALUES(NULL,906,'計算機',90);
INSERT INTO score VALUES(NULL,906,'英語',85);
(3)查詢student表的所有記錄
SELECT * FROM student;
SELECT id,NAME,sex,birth,department,address FROM student;
(4)查詢student表的第2~4條記錄 通過 LIMIT 關鍵字查詢
1表示從第二條記錄開始查詢,3表示查詢三條資料
SELECT * FROM student LIMIT 1,3;
(5)要從student表查詢所有的學生的學號、姓名和院系的資訊,就必須在select語句中指定欄位
SELECT id,NAME,department FROM student;
(6)查詢計算機系和英語系的學生的資訊有兩種方法
SELECT * FROM student
WHERE department IN ('計算機系','英語系');
SELECT * FROM student
WHERE department='計算機系' OR department='英語系';
其中 = 可以用 LIKE 代替
(7)從student表中查詢年齡為18~22歲學生的資訊 可以通過 AS 關鍵字將2009-birth取名為age
SELECT NAME,2009-birth AS age FROM student;
SELECT id,NAME,sex,2009-birth AS age,department,address FROM student WHERE 2009-birth BETWEEN 18 AND 22;
SELECT id,NAME,sex,2009-birth AS age,department,address FROM student WHERE 2009-birth>=18 AND 2009-birth<=22;
(8)student表中查詢每個院系有多少人。先必須按院系進行分組,然後再計算人數
SELECT department,COUNT(id) FROM student GROUP BY department;
(9)從score表中查詢每個科目的最高分。首先按照c_anme欄位對score表中的記錄進行分組。然後使用MAX()函式計算每組的最大值。
SELECT c_name,MAX(grade) FROM score GROUP BY c_name;
(10)查詢李四的考試科目(c_anme)和考試成績(grade)。科目和成績都儲存在score表中。但是score表中只有學生的學號,沒有學生的姓名。
所以必須根據學生學生姓名從student表中取出學生的學號。然後再從score表中查詢該學生的考試科目和成績
SELECT c_name,grade FROM score WHERE stu_id=
(SELECT id FROM student WHERE NAME='李四');
(11)用連線查詢的方式查詢所有學生的資訊號考試資訊。因為student表的id欄位和score表的stu_id欄位都是表示學號。
SELECT student.id,NAME,sex,birth,department,address,c_name,grade
FROM student,score
WHERE student.id=score.stu_id;
取名
SELECT s1.id,NAME,sex,birth,department,address,c_name,grade
FROM student s1,score s2
WHERE s1.id=s2.stu_id;
(12)計算每個學生的總成績。所有學生的成績都儲存在score表中。要計算每個同學的總成績,必須按學號進行分組,然後用SUM()函式計算總成績
SELECT stu_id ,SUM(grade)
FROM score GROUP BY stu_id;
如果還需要顯示學生的姓名,就需要將兩個表連線,將連線好的結果進行分組。
SELECT student.id,NAME,SUM(grade)
FROM student,score
WHERE student.id=score.stu_id
GROUP BY student.id;
(13)計算每個考試科目的平均成績。先必須將score表按照科目(c_name)進行分組
然後再使用 AVG()函式計算每組平均值
SELECT c_name,AVG(grade)
FROM score GROUP BY c_name
(14)查詢計算機成績低於95的學生的資訊
SELECT * FROM student
WHERE id IN
(SELECT stu_id FROM score
WHERE c_name="計算機" AND grade<95);
(15)查詢同時參加計算機和英語考試的學生的資訊。先從score表中查詢誰同時參加了計算機和英語這兩門考試,
取出該同學的學號,再去student表中查詢
SELECT * FROM student
WHERE id=ANY
(SELECT stu_id FROM score
WHERE stu_id IN(
SELECT stu_id FROM
score WHERE c_name='計算機')
AND c_name='英語');
//巢狀子查詢
(16)將計算機成績按照從高到低排序
SELECT stu_id,grade
FROM score WHERE c_name='計算機'
ORDER BY grade DESC;
(17)從student表和score表中查詢出學生的學號,然後合併查詢結果 使用 UNION 關鍵字 自動取出相同記錄
SELECT id FROM student
UNION
SELECT stu_id FROM score;
(18)查詢姓張或者姓王的同學的姓名、院系、考試科目和成績
SELECT student.id,NAME,sex,birth,department,address,c_name,grade
FROM student,score
WHERE
(NAME LIKE '張%' OR NAME LIKE '王%')
AND
student.id=score.stu_id;
(19)查詢都是湖南的同學的姓名、年齡、院系、考試科目和成績。
SELECT student.id,NAME,sex,birth,department,address,c_name,grade
FROM student,score
WHERE
address LIKE '湖南%' AND
student.id=score.stu_id;