MySQL55--SQL語句練習01


MySQL查詢綜合練習01

查看所有庫

SHOW DATABASES;

創建一個倉庫,倉庫名稱為test_2106,字符集為utf8

CREATE DATABASE test_2106 character set utf8;

進入test_2106

USE test_2106;

創建表student(學生表)

字段類型

Sno varchar(20) NOT NULL 學生編號

Sname varchar(20) NOT NULL 學生姓名

sex varchar(20) NOT NULL 性別

age INT NOT NULL 年齡

dept varchar(20) NOT NULL 系別

CREATE TABLE student
(Sno  varchar(20) NOT NULL,
 Sname  varchar(20) NOT NULL,
 sex  varchar(20) NOT NULL,
 age  INT  NOT NULL,
 dept  varchar(20) NOT NULL
);

創建表course(學生修課表)

字段類型

Cno varchar(20) NOT NULL 課程編號

Cname varchar(20) NOT NULL 課程姓名

hours varchar(20) NOT NULL 學課時長

CREATE TABLE course
(Cno  varchar(20) NOT NULL,
 Cname  varchar(20) NOT NULL,
 hours VARCHAR(20) NOT NULL
);

創建表sc

字段類型

Sno varchar(20) NOT NULL 學生編號

Cno varchar(20) NOT NULL 課程編號

grade INT 成績

CREATE TABLE SC
(Sno  varchar(20) NOT NULL,
 Cno  varchar(20) NOT NULL,
 grade  INT
);

向student表中插入數據

Sno Sname sex age dept

9512101 李勇男19 計算機系

9512102 劉晨男20 計算機系

9512103 王敏女20 計算機系

9521101 張立男22 信息系

9521102 吳賓女21 信息系

9521103 張海男20 信息系

9531101 錢小力女18 數學系

9531102 王大力男19 數學系

INSERT INTO student VALUES ('9512101','李勇','男',19,'計算機系');
INSERT INTO student VALUES ('9512102','劉晨','男',20,'計算機系');
INSERT INTO student VALUES ('9512103','王敏','女',20,'計算機系');
INSERT INTO student VALUES ('9521101','張立','男',22,'信息系');
INSERT INTO student VALUES ('9521102','吳賓','女',21,'信息系');
INSERT INTO student VALUES ('9521103','張海','男',20,'信息系');
INSERT INTO student VALUES ('9531101','錢小力','女',18,'數學系');
INSERT INTO student VALUES ('9531102','王大力','男',19,'數學系');

向course表中插入數據

Cno Cname hours

C01 計算機文化學70

C02 VB 90

C03 計算機網絡80

C04 數據庫基礎108

C05 高等數學180

C06 數據結構72

INSERT INTO course VALUES ('C01','計算機文化學','70');
INSERT INTO course VALUES ('C02','VB','90');
INSERT INTO course VALUES ('C03','計算機網絡','80');
INSERT INTO course VALUES ('C04','數據庫基礎','108');
INSERT INTO course VALUES ('C05','高等數學','180');
INSERT INTO course VALUES ('C06','數據結構','72');

向sc表中插入數據

Sno Cno grade

9512101 C01 90

9512101 C02 86

9512101 C06 NULL

9512102 C02 78

9512102 C04 66

9521102 C01 82

9521102 C02 75

9521102 C04 92

9521102 C05 50

9521103 C02 68

9521103 C06 NULL

9531101 C01 80

9531101 C05 95

9531102 C05 85

INSERT INTO SC VALUES ('9512101','C01',90);
INSERT INTO SC VALUES ('9512101','C02',86);
INSERT INTO SC VALUES ('9512101','C06',NULL);
INSERT INTO SC VALUES ('9512102','C02',78);
INSERT INTO SC VALUES ('9512102','C04',66);
INSERT INTO SC VALUES ('9521102','C01',82);
INSERT INTO SC VALUES ('9521102','C02',75);
INSERT INTO SC VALUES ('9521102','C04',92);
INSERT INTO SC VALUES ('9521102','C05',50);
INSERT INTO SC VALUES ('9521103','C02',68);
INSERT INTO SC VALUES ('9521103','C06',NULL);
INSERT INTO SC VALUES ('9531101','C01',80);
INSERT INTO SC VALUES ('9531101','C05',95);
INSERT INTO SC VALUES ('9531102','C05',85);

分別查詢學生表和學生修課表中的全部數據

SELECT * FROM student;

SELECT * FROM course;

查詢成績在70-80分之間的學生的學號、課程號和成績

SELECT *
FROM SC 
WHERE grade between 70 and 80;

查詢C01號課程成績最高的分數

SELECT max(grade)
FROM SC 
WHERE Cno = 'C01'
GROUP BY Cno;

查詢學生都選修了哪些課程,要求列出課程號

SELECT CnoFROM SC GROUP BY Cno;

查詢C02號課程的所有學生的平均成績、最高成績和最低成績。

SELECT AVG(grade),MAX(grade),MIN(grade)
FROM SC 
WHERE Cno = 'C02'
group BY Cno;

統計每個系的學生人數

SELECT dept,count(*)
FROM student
GROUP BY dept;

統計每門課程的修課人數和考試最高分

SELECT Cno, count(*),max(grade)
FROM SC 
group BY Cno;

統計每個學生的選課門數,並按選課門數的遞增順序顯示結果

SELECT Sno, count(*)
FROM SC 
GROUP BY Sno
ORDER BY count(*);

統計選修課的學生總數和考試的平均成績

SELECT Cno, count(*), avg(grade)
FROM SC 
GROUP BY Cno;

查詢選課門數超過2門的學生的平均成績和選課門數

SELECT Sno, count(*),avg(grade)
FROM SC 
GROUP BY Sno
HAVING count(*)> 2;

列出總成績超過200分的學生,要求列出學號、總成績

SELECT Sno,sum(grade)
FROM SC 
GROUP BY Sno
HAVING sum(grade)> 200;

查詢選修了C02號課程的學生的姓名和所在系。

SELECT Sname,dept
FROM student
WHERE Sno in (SELECT Sno FROM sc WHERE Cno = 'C02');

查詢成績80分以上的學生的姓名、課程號和成績,並按成績的降序排列結果。

SELECT s.sname,o.cno,o.grade
FROM student s,sc o
WHERE s.sno=o.sno and o.grade>80
ORDER BY o.grade desc;

查詢計算機系男生修了‘數據庫基礎’的學生姓名、性別、成績

SELECT s.sname,s.sex,o.grade
FROM student s,sc o,course c
WHERE s.sno=o.sno and o.cno=c.cno and s.dept='計算機系' and s.sex='男' and c.cname='數據庫基礎';

查詢哪些學生的年齡相同,要求列出年齡相同的學生的姓名和年齡。

SELECT DISTINCT s1.sname,s2.age
FROM student s1,student s2
WHERE s1.sname!=s2.sname and s1.age=s2.age;

查詢哪些課程沒有人選,要求列出課程號和課程名。

SELECT Cno,Cname
FROM course
WHERE Cno NOT in (SELECT Cno FROM sc GROUP BY Cno);

查詢有考試成績的所有學生的姓名、修課名稱及考試成績。

--要求將查詢結果放在一張新的永久表(假設新表名為new-sc)中。

CREAFTE TABLE new_sc
SELECT s.sname,c.cname,o.grade
FROM student s,course c,sc o
WHERE s.sno=o.sno and o.cno=c.cno;
SHOW TABLES;
SELECT * FROM new_sc;

分別查詢信息系和計算機系的學生姓名、性別、修課名稱、修課成績

SELECT s.sname,s.sex,c.cname,o.grade
FROM student s,course c,sc o
WHERE s.sno=o.sno and o.cno=c.cno and s.dept in ('信息系','計算機系');

用子查詢實現如下查詢:

查詢選修了C01號課程的學生的姓名和所在系

SELECT sname,dept
FROM student
WHERE sno in(select sno from course where cno='c01');

查詢數學系成績80分以上的學生的學號和姓名。

SELECT sno,sname
FROM student
WHERE sno in(select sno from sc where grade>80) and dept='數學系';

查詢計算機系學生所選的課程名

SELECT cname
FROM course
WHERE cno in(select cno from sc where sno in(select sno from student where dept='計算機系'));

將計算機系成績高於80分的學生的修課情況插入到另一張表中,分兩種情況實現:

在插入的過程中建表

SELECT sname 學生姓名,cname 課程名稱,cno 課程編號
FROM (
SELECT s.sname,c.cname,o.cno
FROM student s,course c,sc o
WHERE s.sno=o.sno and o.cno=c.cno and o.grade>80)
as new01;

先建一個新表,然后再插入數據

CREATE TABLE new02
SELECT s.sname,c.cname,o.cno
FROM student s,course c,sc o
WHERE s.sno=o.sno and o.cno=c.cno and o.grade>80;
SELECT * FROM new02;

刪除修課成績小於50分的學生的修課記錄

DELETE from sc
WHERE grade<=50;

將所有選修了C01課程的學生的成績加10分。

UPDATE sc set grade=grade+10
WHERE cno='c01';
SELECT * FROM sc;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM