1. 程式人生 > >MySQL基礎練習題

MySQL基礎練習題

思路:

1、根據提問或者需求分析想要的結果是什麼
Select XXXXX
2、確定想要得到XXXXX的話需要涉及到哪些表
Select XXX from YYYY
3、分析是否需要條件 where > ,< ,= ,<> , >=, <=,in,between,and,or
Select XXX from YYY where ZZZZ
4、是否需要函式
時間函式,數學函式
5、分組
看到(“每個??”)一般情況下都需要group by.
6、如果想要的結果不能一步到位
需要多個步驟的,那麼此時我們使用的就是子查詢,子查詢我們可以按照單個步驟進行查詢,然後把多個步驟組裝起來
7、表連線,關聯查詢,聯合查詢。


明顯特徵:結果集中的列涉及到多張表。表連線去除笛卡爾積中的錯誤資料
1.需求2.表格3.條件4.函式5.分組6.步驟7.關聯

問題:

1.建立student和score表
2.為student表和score表增加記錄
3.查詢student表的所有記錄
4.查詢student表的第2條到4條記錄
5.從student表查詢所有學生的學號(id)、姓名(name)和院系(department)的資訊
6.從student表中查詢計算機系和英語系的學生的資訊
7.從student表中查詢年齡18~35歲的學生資訊
8.查詢每個院系有多少人
9.查詢每個科目的最高分
10.查詢李四的考試科目(c_name)和考試成績(grade)
11.所有學生的資訊和考試資訊
12.計算每個學生的總成績
13.計算每個考試科目的平均成績
14.查詢計算機成績低於95的學生資訊
15.查詢同時參加計算機和英語考試的學生的資訊
16.將計算機考試成績按從高到低進行排序
17.查詢姓張或者姓王的同學的姓名、院系和考試科目及成績
18.查詢都是湖南的學生的姓名、年齡、院系和考試科目及成績

Mysql練習 (select)
------學生資料與成績查詢
1.建立student和score表

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  `sex` char(20) DEFAULT NULL,
  `birth` year(4) DEFAULT NULL,
  `department` char(10) DEFAULT NULL,
  `address` char(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

建立score表。SQL程式碼如下:

DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `stu_id` int(10) NOT NULL,
  `c_name` char(20) DEFAULT NULL,
  `grade` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `score_ibfk_1` (`stu_id`),
  CONSTRAINT `score_ibfk_1` FOREIGN KEY (`stu_id`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

2.為student表和score表增加記錄
向student表插入記錄的INSERT語句如下:

insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (1,'張老大','男',1985,'計算機系','北京市海淀區');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (2,'張老二','男',1986,'中文系','北京市昌平區');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (3,'張三','女',1990,'中文系','湖南省永州市');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (4,'李四','男',1990,'英語系','遼寧省阜新市');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (5,'王五','女',1991,'英語系','福建省廈門市');
insert  into `student`(`id`,`name`,`sex`,`birth`,`department`,`address`) values (6,'王六','男',1988,'計算機系','湖南省衡陽市');

向score表插入記錄的INSERT語句如下:

insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (1,1,'計算機',98);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (2,1,'英語',80);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (3,2,'計算機',65);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (4,2,'中文',88);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (5,3,'中文',95);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (6,3,'計算機',70);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (7,4,'計算機',70);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (8,4,'英語',92);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (9,5,'英語',94);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (10,5,'計算機',90);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (11,6,'計算機',90);
insert  into `score`(`id`,`stu_id`,`c_name`,`grade`) values (12,6,'英語',85); 

3.查詢student表的所有記錄

 SELECT * FROM student;

4.查詢student表的第2條到4條記錄

SELECT * FROM student LIMIT 1,3; 

5.從student表查詢所有學生的學號(id)、姓名(name)和院系(department)的資訊

SELECT id,NAME,department FROM student;

6.從student表中查詢計算機系和英語系的學生的資訊

SELECT * FROM student WHERE department IN('計算機系','英語系');

7.從student表中查詢年齡在18~35歲的學生資訊

SELECT * FROM student WHERE YEAR(NOW())-birth BETWEEN 18 AND 35; 

8.查詢每個院系有多少人

SELECT department,COUNT(department) counts FROM student GROUP BY department;

9.查詢每個科目的最高分

SELECT c_name,MAX(grade) maxgrade FROM score GROUP BY c_name;

10.查詢李四的考試科目(c_name)和考試成績(grade)

SELECT c_name,grade FROM score WHERE stu_id =(SELECT id FROM student WHERE NAME='李四');

11.所有學生的資訊和考試資訊

SELECT * FROM student s,score sc WHERE s.`id`=sc.`stu_id`;
SELECT s.`id`,NAME,sex,birth,department,address,grade FROM student s,score sc WHERE s.`id`=sc.`stu_id`; 

12.計算每個學生的總成績

SELECT NAME,SUM(grade) FROM student s,score sc WHERE s.`id`=sc.`stu_id` GROUP BY NAME;

13.計算每個考試科目的平均成績
計算每個學生的平均成績???

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.查詢同時參加計算機和英語考試的學生的資訊

SELECT * FROM student WHERE department='計算機系' OR department='英語系';

16.將計算機考試成績降序排列

SELECT c_name,grade FROM score WHERE c_name='計算機' ORDER BY grade DESC;

17.查詢姓張或者姓王的同學的姓名、院系和考試科目及成績

SELECT NAME,department,c_name,grade FROM student s,score sc WHERE s.`id`=sc.stu_id AND NAME LIKE '張%' OR NAME LIKE '王%'

18.查詢都是湖南的學生的姓名、年齡、院系和考試科目及成績

SELECT NAME,address,YEAR(NOW())-birth,department,c_name,grade FROM student INNER JOIN score ON student.`id`=score.`stu_id` WHERE address LIKE '%湖南%'