養成好習慣,點個贊再走
有問題,歡迎私信、評論,我看到都會回覆的
下面是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表格:
- 假設person表中所有人每個月還有100元的獎金,查詢出所有人的姓名、地址、年薪
- 假設person表中所有人每年還有1000元的獎金,查詢出所有人的姓名、地址、年薪
- 請以下面的方式查詢出所有信息:
姓名 居住地 月薪 年薪
張三 武當 6000 72000
- 請查詢出所有部門爲事業部的所有人信息
- 請查詢出所有地址爲魔教的所有人信息
- 請查詢出所有工資爲6000元的人的所有信息
- 請查詢出所有工資在6000-8000之間的所有人的信息
- 請查詢出所有工資是6000,7000,8000的所有人的信息
- 請查詢出所有工資在6000-8000之間,或者姓張的所有人的基本信息
- 請查詢出所有工資爲6000,7000,8000,或者姓張,並且不叫張三丰的所有人的基本信息
- 請查詢出所有工資爲5000,或者叫張三的人的所有信息
- 請查詢出所有魔教的人的信息,按照人名升序排列
- 請查詢出所有工資高於5000的人員信息,按照address降序排列
- 請查詢出所有人的信息,先按照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表:
- 請建立users表保存員工的相關信息(生日,信息更新時間 用date類型)
看上面
- 查詢每個部門的最高工資,最低工資,平均工資
- 給所有項目經理工資漲10000
- 給工資低於30000的員工工資漲到30000
- 查詢各部門的工資總額,平均工資,最高工資,最低工資
- c部門的項目經理離職,刪除其信息
- c部門的程序員全部轉入Java部門,更改信息
- 查詢11月份過生日的員工
- 查詢本月過生日的員工。設計一個通用的語句
(補充:我進行查詢的時候是6月份)
- 查詢整合部門後表中記錄的所有記錄,按照薪資從高到低排布
小練習三
先創建兩個表格
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表)
- 查詢部門30中的僱員
- 查詢所有辦事員(clerk)的姓名、編號和部門
- 查詢佣金(comm)高於薪金(sal)的僱員
- 查詢哪些人沒有佣金(comm)
- 查詢佣金(comm)高於薪金(sal)60%的僱員
- 顯示所有人的姓名,月薪,年薪(取別名)
- 找出部門10中的所有經理和部門20中的所有辦事員的詳細資料
- 找出部門10中所有經理、部門20中所有辦事員,既不是經理又不是辦事員,但其薪金大於等於2000的所有僱員的資料
- 找出不收取佣金或收取佣金低於500的僱員
排序練習(emp表)
- 查詢所有人員信息,按照工資升序排列
- 查詢所有人員姓名,工資,佣金,按照工資降序排列,若工資相同則按照佣金升序排列
- 查詢工資大於2000的所有員工,按照工資薪金降序排列
- 查詢所有人的信息,按照姓名排序
- 查詢工資在2000-3000之間的員工信息,按照僱傭日期升序排列
函數練習(emp表)
- 顯示正好爲6個字符的僱員姓名
- 顯示所有僱員的姓名的前三個字符
- 顯示所有僱員的姓名,用A代替‘a’
- 顯示不帶有‘r’的僱員姓名
- 找出早於35年之前受僱的僱員
(補充:查詢時是2019年)
- 顯示所有僱員的姓名以及滿10年服務年限的日期
分組函數練習(emp表)
- 顯示每種工作的人數
- 顯示工作人數大於3的工作的平均工資
- 顯示出經理有幾種不同的工資
- 顯示出30號部門有幾種不同的工作
- 顯示出emp表數據中不同月份僱傭的人數
- 顯示出每個管理者手下帶了多少個員工
- 顯示收取佣金的僱員的不同工作
嵌套查詢練習(emp表)
- 查詢平均工資大於2900的部門中的所有員工
- 查詢工資比allen多的所有員工
- 查詢薪金高於公司平均薪金的所有員工姓名,部門編號,具體薪資
- 列出與scott從事相同工作的所有員工信息
- 查詢薪金大於部門30中的員工最高薪金的所有員工的姓名、薪金和部門編號
- 查詢在部門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);
- 查詢人口數在1000到2000之間的城市所屬在哪個地區
涉及到兩張表city和area
select *
from city inner join area
on city.aid = area.aid
where city.citysize between 1000 and 2000;
- 查詢每個國家的城市個數,按照城市個數升序排列
涉及到三張表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(*);
- 查詢各地區城市人口平均數,按照人口平均數降序排列
涉及到兩張表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;
- 查詢各地區總人數,按照人口總數降序排列
涉及到兩張表area和city
select aname,sum(citysize)
from area inner join city on area.aid = city.aid
group by aname
order by sum(citysize) desc;
- 查詢人口總數超過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綜合練習
文章目錄
題目描述
- 設有一個數據庫,包括四個表:
- 學生表(student),
- 課程表(course),
- 成績表(score),
- 教師信息表(teacher).
- 表結構如表1-1的表(一)~表(四)所示.
- 表內數據如表1-2的表(一)~表(四)所示.
- 用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語句)
最終智慧: