1. 程式人生 > >(5)查詢資料

(5)查詢資料

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