正在學習MySQL的你,需要練習題嗎?

養成好習慣,點個贊再走

有問題,歡迎私信、評論,我看到都會回覆的


從零開始學MySQL:MySQL下載安裝到知識點的講解

下面是MySQL基礎知識的練習題,涵蓋DDL、DML、DCL、列的約束、關鍵字、函數、條件篩選、排序、分組、嵌套、聯合查詢、分頁查詢…


小練習一


創建一個person表,共有四個列(字段),並向表中插入數據,

create table person(
	username varchar(20),
	address varchar(20),
	salary int(10),
	department varchar(20)
)character set utf8;
insert into person values('張三','武當',6000,'保潔部');
insert into person values('張無忌','魔教',6000,'事業部');
insert into person values('張三丰','武當',4000,'產業部');
insert into person values('周芷若','峨眉',8000,'事業部');
insert into person values('謝遜','魔教',5000,'產業部');
insert into person values('楊逍','魔教',7000,'事業部');

person表格:
在這裏插入圖片描述

  1. 假設person表中所有人每個月還有100元的獎金,查詢出所有人的姓名、地址、年薪

在這裏插入圖片描述

  1. 假設person表中所有人每年還有1000元的獎金,查詢出所有人的姓名、地址、年薪

在這裏插入圖片描述

  1. 請以下面的方式查詢出所有信息:

姓名 居住地 月薪 年薪
張三 武當 6000 72000

在這裏插入圖片描述

  1. 請查詢出所有部門爲事業部的所有人信息

在這裏插入圖片描述

  1. 請查詢出所有地址爲魔教的所有人信息

在這裏插入圖片描述

  1. 請查詢出所有工資爲6000元的人的所有信息

在這裏插入圖片描述

  1. 請查詢出所有工資在6000-8000之間的所有人的信息

在這裏插入圖片描述

  1. 請查詢出所有工資是6000,7000,8000的所有人的信息

在這裏插入圖片描述

  1. 請查詢出所有工資在6000-8000之間,或者姓張的所有人的基本信息

在這裏插入圖片描述

  1. 請查詢出所有工資爲6000,7000,8000,或者姓張,並且不叫張三丰的所有人的基本信息

在這裏插入圖片描述

  1. 請查詢出所有工資爲5000,或者叫張三的人的所有信息

在這裏插入圖片描述

  1. 請查詢出所有魔教的人的信息,按照人名升序排列

在這裏插入圖片描述

  1. 請查詢出所有工資高於5000的人員信息,按照address降序排列

在這裏插入圖片描述

  1. 請查詢出所有人的信息,先按照salary降序排列,若一致,則按照人名升序排列

在這裏插入圖片描述

小練習二


先創建一個Users表格

create table users(
	員工編號 int(5),
	姓名 varchar(20),
	部門 varchar(20),
	生日 date,
	工資 int(10),
	職務 varchar(20),
	信息更新時間 date
)character set utf8;
insert into users values(1,'趙一一','C','1980-10-11',10000,'程序員',now());
insert into users values(2,'錢二二','C','1981-10-12',20000,'程序員',now());
insert into users values(3,'孫三三','C','1982-09-01',30000,'項目經理',now());
insert into users values(4,'李四四','java','1983-09-02',40000,'程序員',now());
insert into users values(5,'週五五','java','1984-11-01',50000,'程序員',now());
insert into users values(6,'吳六六','java','1985-01-01',60000,'程序員',now());
insert into users values(7,'鄭七七','java','1986-11-02',70000,'項目經理',now());

users表:
在這裏插入圖片描述


  1. 請建立users表保存員工的相關信息(生日,信息更新時間 用date類型)

看上面

  1. 查詢每個部門的最高工資,最低工資,平均工資

在這裏插入圖片描述

  1. 給所有項目經理工資漲10000

在這裏插入圖片描述

  1. 給工資低於30000的員工工資漲到30000

在這裏插入圖片描述

  1. 查詢各部門的工資總額,平均工資,最高工資,最低工資

在這裏插入圖片描述

  1. c部門的項目經理離職,刪除其信息

在這裏插入圖片描述

  1. c部門的程序員全部轉入Java部門,更改信息

在這裏插入圖片描述

  1. 查詢11月份過生日的員工

在這裏插入圖片描述

  1. 查詢本月過生日的員工。設計一個通用的語句

在這裏插入圖片描述
(補充:我進行查詢的時候是6月份)

  1. 查詢整合部門後表中記錄的所有記錄,按照薪資從高到低排布

在這裏插入圖片描述

小練習三

先創建兩個表格

emp員工表

create table emp(
empno int(10),	//編號
ename varchar(12),	//姓名
job varchar(20),	//職務
mgr int(10),	//上級
hiredare date,	//入職日期
sal int(10),	//月薪
comm int(10),	//佣金
depno int(5)	//部門
);

在emp表中添加數據:

insert into emp values(7369,'smith','clerk',7902,'1980-12-17',800,null,20);
insert into emp values(7499,'allen','salesman',7698,'1981-2-20',1600,300,30);
insert into emp values(7521,'ward','salesman',7698,'1981-2-22',1250,500,30);
insert into emp values(7566,'jones','manager',7839,'198-4-2',2975,null,20);
insert into emp values(7654,'martin','salesman',7698,'1981-9-28',1250,1400,30);
insert into emp values(7698,'blake','manager',7839,'1981-5-1',2850,null,30);
insert into emp values(7782,'clark','manager',7839,'1981-6-9',2450,null,10);
insert into emp values(7788,'scott','analyst',7566,'1987-4-19',3000,null,20);
insert into emp values(7839,'king','president',null,'1981-11-17',5000,null,10);
insert into emp values(7844,'turner','salesman',7698,'1981-9-8',1500,0,30);
insert into emp values(7876,'adams','clerk',7788,'1987-5-23',1100,null,20);
insert into emp values(7900,'james','clerk',7698,'1981-12-3',950,null,30);
insert into emp values(7902,'ford','analyst',7566,'1981-12-3',3000,null,20);
insert into emp values(7934,'miller','clerk',7782,'1982-1-23',1300,null,10);

emp表:
在這裏插入圖片描述

dept部門表

create table dept(
deptno int(5),	//部門編號
dname varchar(20),	//部門名稱
loc varchar(20)	//坐落城市
);

添加數據

insert into dept values(10,'accounting','new york');
insert into dept values(20,'research','dallas');
insert into dept values(30,'sales','new chicago');
insert into dept values(40,'operations','boston');

dept表:
在這裏插入圖片描述

條件篩選題(emp表)

  1. 查詢部門30中的僱員

在這裏插入圖片描述

  1. 查詢所有辦事員(clerk)的姓名、編號和部門

在這裏插入圖片描述

  1. 查詢佣金(comm)高於薪金(sal)的僱員

在這裏插入圖片描述

  1. 查詢哪些人沒有佣金(comm)

在這裏插入圖片描述
在這裏插入圖片描述

  1. 查詢佣金(comm)高於薪金(sal)60%的僱員

在這裏插入圖片描述

  1. 顯示所有人的姓名,月薪,年薪(取別名)

在這裏插入圖片描述

  1. 找出部門10中的所有經理和部門20中的所有辦事員的詳細資料

在這裏插入圖片描述

  1. 找出部門10中所有經理、部門20中所有辦事員,既不是經理又不是辦事員,但其薪金大於等於2000的所有僱員的資料

在這裏插入圖片描述
在這裏插入圖片描述

  1. 找出不收取佣金或收取佣金低於500的僱員

在這裏插入圖片描述

排序練習(emp表)

  1. 查詢所有人員信息,按照工資升序排列

在這裏插入圖片描述

  1. 查詢所有人員姓名,工資,佣金,按照工資降序排列,若工資相同則按照佣金升序排列

在這裏插入圖片描述

  1. 查詢工資大於2000的所有員工,按照工資薪金降序排列

在這裏插入圖片描述

  1. 查詢所有人的信息,按照姓名排序

在這裏插入圖片描述

  1. 查詢工資在2000-3000之間的員工信息,按照僱傭日期升序排列

在這裏插入圖片描述

函數練習(emp表)

  1. 顯示正好爲6個字符的僱員姓名

在這裏插入圖片描述

  1. 顯示所有僱員的姓名的前三個字符

在這裏插入圖片描述

  1. 顯示所有僱員的姓名,用A代替‘a’

在這裏插入圖片描述

  1. 顯示不帶有‘r’的僱員姓名

在這裏插入圖片描述

在這裏插入圖片描述

  1. 找出早於35年之前受僱的僱員

在這裏插入圖片描述
(補充:查詢時是2019年)

  1. 顯示所有僱員的姓名以及滿10年服務年限的日期

在這裏插入圖片描述

分組函數練習(emp表)

  1. 顯示每種工作的人數

在這裏插入圖片描述

  1. 顯示工作人數大於3的工作的平均工資

在這裏插入圖片描述

  1. 顯示出經理有幾種不同的工資

在這裏插入圖片描述

在這裏插入圖片描述

  1. 顯示出30號部門有幾種不同的工作

在這裏插入圖片描述

  1. 顯示出emp表數據中不同月份僱傭的人數

在這裏插入圖片描述

  1. 顯示出每個管理者手下帶了多少個員工

在這裏插入圖片描述

  1. 顯示收取佣金的僱員的不同工作

在這裏插入圖片描述

嵌套查詢練習(emp表)

  1. 查詢平均工資大於2900的部門中的所有員工

在這裏插入圖片描述

  1. 查詢工資比allen多的所有員工

在這裏插入圖片描述

  1. 查詢薪金高於公司平均薪金的所有員工姓名,部門編號,具體薪資

在這裏插入圖片描述

  1. 列出與scott從事相同工作的所有員工信息

在這裏插入圖片描述

  1. 查詢薪金大於部門30中的員工最高薪金的所有員工的姓名、薪金和部門編號

在這裏插入圖片描述

  1. 查詢在部門sales工作的員工的姓名

在這裏插入圖片描述

小練習四


先創建三張表格

country表(存儲國家信息):

create table country(
cid int(5),
cname varchar(20)
)character set utf8;

alter table country add primary key(cid);

insert into country values(1,'中國');
insert into country values(2,'美國');
insert into country values(3,'日本');

在這裏插入圖片描述

area表(存儲地區信息):

create table area(
aid int(5),
aname varchar(20),
cid int(5)
)character set utf8;

alter table area add primary key(aid);
alter table area add constraint fk_area_country foreign key(cid) references country(cid);

insert into area values(1,'北方',1);
insert into area values(2,'南方',1);
insert into area values(3,'西部',2);
insert into area values(4,'東部',2);
insert into area values(5,'北海道',3);
insert into area values(6,'四國',3);

在這裏插入圖片描述
city表(存儲城市信息):

create table city(
cityid int(5),
cityname varchar(20),
citysize int(10),
aid int(5)
)character set utf8;

alter table city add primary key(cityid);
alter table city add constraint fk_city_area foreign key(aid) references area(aid);

insert into city values(1,'哈爾濱',750,1);
insert into city values(2,'大連',50,1);
insert into city values(3,'北京',2000,1);
insert into city values(4,'上海',1500,2);
insert into city values(5,'杭州',800,2);
insert into city values(6,'洛杉磯',1200,3);
insert into city values(7,'休斯頓',750,3);
insert into city values(8,'紐約',1000,4);
insert into city values(9,'底特律',500,4);
insert into city values(10,'東京',1500,5);
insert into city values(11,'名古屋',50,5);
insert into city values(12,'大阪',20,6);

在這裏插入圖片描述


  1. 查詢人口數在1000到2000之間的城市所屬在哪個地區

涉及到兩張表city和area

select * 
from city inner join area 
on city.aid = area.aid  
where city.citysize between 1000 and 2000;

在這裏插入圖片描述

  1. 查詢每個國家的城市個數,按照城市個數升序排列

涉及到三張表country,area,city

select cname,count(*) 
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
group by cname 
order by count(*);

在這裏插入圖片描述

  1. 查詢各地區城市人口平均數,按照人口平均數降序排列

涉及到兩張表area和city

select aname,avg(citysize) 
from area inner join city on area.aid = city.aid 
group by aname 
order  by avg(citysize) desc;

在這裏插入圖片描述
4. 查詢哈爾濱所在的國家的名字

涉及到三張表

select cityname,cname  
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
where cityname = '哈爾濱';

在這裏插入圖片描述
5. 查詢各地區名字和人口總數

涉及到兩張表area和city

select aname,sum(citysize)
from area inner join city on area.aid = city.aid 
group by aname;

在這裏插入圖片描述
6. 查詢美國有哪些城市,列出城市名

涉及到三張表

select cityname 
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
where cname = '美國';

在這裏插入圖片描述
7. 查詢人口最多的城市在哪個國家

涉及到三張表

select cityname,cname  
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
where citysize = (select max(citysize) from city);

在這裏插入圖片描述
8. 查詢每個國家的人口總數

涉及到三張表

select cname,sum(citysize)   
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
group by cname;

在這裏插入圖片描述
9. 查詢城市人口總數爲1500萬的國家名字

涉及到三張表

select cname,cityname,citysize    
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
where citysize = 1500;

在這裏插入圖片描述

  1. 查詢各地區總人數,按照人口總數降序排列

涉及到兩張表area和city

select aname,sum(citysize) 
from area inner join city on area.aid = city.aid 
group by aname 
order by sum(citysize) desc;

在這裏插入圖片描述

  1. 查詢人口總數超過5000的國家名稱

設計三張表

select cname,sum(citysize)    
from country inner join area on country.cid = area.cid inner join city on area.aid = city.aid 
group by cname 
having sum(citysize) > 5000;

(注意:這一題,要先分組,再條件篩選,所以用having關鍵字)
在這裏插入圖片描述
13. 查詢人口數大於杭州的城市都有哪些

只涉及到city表

select cityname 
from city 
where citysize > (select citysize from city where cityname = '杭州');

在這裏插入圖片描述

MySQL綜合練習


題目描述

  1. 設有一個數據庫,包括四個表:
  • 學生表(student),
  • 課程表(course),
  • 成績表(score),
  • 教師信息表(teacher).
  1. 表結構如表1-1的表(一)~表(四)所示.
  2. 表內數據如表1-2的表(一)~表(四)所示.
  3. 用SQL語句創建四個表並完成相關題目.

表1-1數據庫的表結構
表(一)student

屬性名 數據類型 含 義
sno int 學號(主鍵)
sname varchar 學生姓名
ssex varchar 學生性別
sbirthday date 學生出生年月
classid varchar 學生所在班級

表(二)course

屬性名 數據類型 含 義
cno varchar 課程號(主鍵)
cname varchar 課程名稱
tno int 教師編號(外鍵)

表(三)score

屬性名 數據類型 含 義
sno int 學號(外鍵)
cno varchar 課程號(外鍵)
sdegree float 成績

表(四) teacher

屬性名 數據類型 含 義
tno int 編號(主鍵)
tname varchar 教師姓名
tsex varchar 教師性別
tbirthday date 教師出生年月
professional varchar 職稱
department varchar 教師所在部門

表1-2數據庫中的數據

表(一)student

sno sname ssex sbirthday classid
108 曾華 1996-09-01 95033
105 匡明 1995-10-02 95031
107 王麗 1996-01-23 95033
101 李軍 1996-02-20 95033
109 王芳 1995-02-10 95031
103 陸君 1994-06-03 95031

表(二)course

cno cname tno
3-105 計算機導論 825
3-245 操作系統 804
6-166 數字電路 856
9-888 高等數學 831

表(三)score

sno cno sdegree
103 3-245 86
105 3-245 75
109 3-245 68
103 3-105 92
105 3-105 88
109 3-105 76
101 3-105 64
107 3-105 91
108 3-105 78
101 6-166 85
107 6-166 79
108 6-166 81

表(四) teacher

tno tname tsex tbirthday prof depart
804 李誠 1978-12-02 副教授 計算機系
856 張旭 1979-03-12 講師 電子工程系
825 王萍 1982-05-05 助教 計算機系
831 劉冰 1984-08-14 助教 電子工程系


創建數據庫和四張表

先創建數據庫:julyone
並且設置這個數據庫的編碼字符集爲utf-8
在這裏插入圖片描述
在這裏插入圖片描述

student表:

create table student(
	sno  int(10),
	sname varchar(10),
	ssex varchar(10),
	sbirthday date,
	classid varchar(10)
);

alter table student add primary key(sno);

在這裏插入圖片描述
teacher表:

create table teacher(
	tno int(10),
	tname varchar(12),
	tsex varchar(10),
	tbirthday date,
	professional varchar(20),
	department varchar(20)
);

alter table teacher add primary key(tno);

在這裏插入圖片描述

course表:

create table course(
	cno varchar(10),
	cname varchar(20),
	tno int(10)
);

alter table course add primary key(cno);
alter table course add constraint fk_course_teacher foreign key(tno) references teacher(tno); 

在這裏插入圖片描述
score表:

create table score(
	sno int(10),
	cno varchar(10),
	sdegree float(5)
);

alter table score add constraint fk_score_student foreign key(sno) references student(sno);
alter table score add constraint fk_score_course foreign key(cno) references course(cno);

在這裏插入圖片描述



向表中插入數據

然後向表中插入數據

insert into student (sno,sname,ssex,sbirthday,classid) 
values(108,'曾華','男','1996-9-1','95033'),(105,'匡明','男','1995-10-2','95031'),
(107,'王麗','女','1996-1-23','95033'),(101,'李軍','男','1996-2-20','95033'),
(109,'王芳','女','1995-2-10','95031'),(103,'陸君','男','1994-6-3','95031');


insert into teacher(tno,tname,tsex,tbirthday,professional,department) 
values(804,'李誠','男','1978-12-2','副教授','計算機系'),
(856,'張旭','男','1979-3-12','講師','電子工程系'),
(825,'王萍','女','1982-5-5','助教','計算機系'),
(831,'劉冰','女','1984-8-14','助教','電子工程系');


insert into course(cno,cname,tno) 
values('3-105','計算機導論',825),('3-245','操作系統',804),
('6-166','數字電路',856),('9-888','高等數學',831);


insert into score(sno,cno,sdegree) values
(103,'3-245',86),
(105,'3-245',75),
(109,'3-245',68),
(103,'3-105',92),
(105,'3-105',88),
(109,'3-105',76),
(101,'3-105',64),
(107,'3-105',91),
(108,'3-105',78),
(101,'6-166',85),
(107,'6-166',79),
(108,'6-166',81);

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述



SQL題目

– 1.查詢所有學生的姓名,性別及班級編號
在這裏插入圖片描述

– 2.查詢教師所有的部門名稱,(即不重複的DEPART列)
在這裏插入圖片描述

– 3.查詢STUDENT表的所有記錄
在這裏插入圖片描述
– 4.查詢SCORE表中成績在60到80之間的所有記錄
在這裏插入圖片描述
– 5.查詢SCORE表中成績爲85,86或88的記錄
在這裏插入圖片描述
– 6.查詢STUDENT表中班級編號爲"95031"或性別爲"女"的同學記錄
在這裏插入圖片描述

– 7.查詢STUDENT表的所有記錄,以班級編號降序排列
在這裏插入圖片描述

– 8.查詢SCORE表的所有記錄,先按照CNO升序排列,若相同則按照SDEGREE降序排列

在這裏插入圖片描述
– 9.查詢班級編號爲"95031"班級的學生人數

在這裏插入圖片描述
– 10.查詢SCORE表中的最高分的學生學號和課程號
在這裏插入圖片描述
– 11.查詢編號爲"3-105"的課程平均分
在這裏插入圖片描述

– 12.查詢SCORE表中至少有5名學生選修的並以3開頭的課程的平均分數
在這裏插入圖片描述
– 13.查詢每科成績均在70到90之間的學生編號
在這裏插入圖片描述

– 14.查詢所有學生的姓名,所選課程編號和成績
在這裏插入圖片描述

– 15.查詢所有學生的學號,所選課程名和成績
在這裏插入圖片描述

– 16.查詢所有學生的姓名,所選課程名和成績
在這裏插入圖片描述

– 17.查詢"95033"班同學所選每個課程的平均分
在這裏插入圖片描述

– 18.假設使用如下命令建立了一個GRADE表:
CREATE TABLE GRADE(
LOW INT(3),
UPP INT(3),
RANK VARCHAR(1)
);
INSERT INTO GRADE VALUES(90,100,‘A’);
INSERT INTO GRADE VALUES(80,89,‘B’);
INSERT INTO GRADE VALUES(70,79,‘C’);
INSERT INTO GRADE VALUES(60,69,‘D’);
INSERT INTO GRADE VALUES(0,59,‘E’);
– 現查詢所有同學的學號,所選課程號和等級(RANK列)
在這裏插入圖片描述
– 19.查詢"3-105"課程的成績高於學號爲109同學這科成績的所有同學記錄
在這裏插入圖片描述
– 20.查詢1995年之後出生的所有學生所選學的課程名及成績
在這裏插入圖片描述
– 21.查詢與學號108同學同年出生的所有學生的學號,姓名和生日
在這裏插入圖片描述
– 22.查詢"張旭"教師任課的學生成績
在這裏插入圖片描述
– 23.查詢選修某課程的同學人數多於5人的教師姓名
在這裏插入圖片描述
– 24.查詢"95033"班和"95031"班全體學生的記錄
在這裏插入圖片描述
– 25.查詢存在有85分以上成績的課程編號
在這裏插入圖片描述
– 26.查詢出"計算機系"教師所教課程每一科成績的平均分
在這裏插入圖片描述
– 27.查詢"計算機系"與"電子工程系"不同職稱的教師的姓名和職稱

(這個題目的邏輯有點複雜啊)
在這裏插入圖片描述
– 28.查詢所有教師和同學的姓名,性別和生日
在這裏插入圖片描述
– 29.查詢所有"女"教師和"女"同學的姓名,性別和生日
在這裏插入圖片描述
– 30.查詢所有任課教師的姓名和部門
在這裏插入圖片描述
– 31.查詢所有未講課的教師的姓名和部門
在這裏插入圖片描述
– 32.查詢STUDENT表中不姓"王"的同學記錄
在這裏插入圖片描述
– 33.查詢STUDENT表中每個學生的姓名和年齡
在這裏插入圖片描述
– 34.查詢STUDENT表中最大和最小的生日值
在這裏插入圖片描述
– 35.查詢STUDENT表中的全部記錄,按照班級編號降序排列,班級編號若相同則按照生日降序排列
在這裏插入圖片描述
– 36.查詢所有"男"教師及其所上的課程名稱
在這裏插入圖片描述
– 37.查詢和"李軍"同性別並同班的同學信息
在這裏插入圖片描述
– 38.查詢所有選修"計算機導論"課程的"男"同學的成績表
在這裏插入圖片描述
– 39.查詢出同時選擇"3-245"和"3-105"的課程的學生信息
在這裏插入圖片描述
– 40.查詢既沒有選修"3-245"課程也沒有選修"3-105"課程的學生信息

注意:這個題目超級坑!!!答案是沒有查詢結果,empty

我很容易的就進坑了:
在這裏插入圖片描述
因爲每個數據都是單獨的!
score表中的這三條記錄滿足上述SQL語句的查詢條件:
在這裏插入圖片描述
但是101,107,108都選修了3-245或者-105的課程,於是問題就這麼產生了。

然後,我思考良久,未果,打遊戲。

不過硬要答案的話:
湊合着看吧(來一個巧合性的SQL語句)
在這裏插入圖片描述
最終智慧:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章