2021-8-2 Mysql个人练习题

 

创建学生表

CREATE TABLE student(
    id int,
    uname VARCHAR(20),
    chinese FLOAT,
    english FLOAT,
    math FLOAT
 );
 
 INSERT INTO student(id,uname,chinese,english,math) VALUES(1,'张小明',89,78,90);
 INSERT INTO student(id,uname,chinese,english,math) VALUES(2,'李进',67,53,95);
 INSERT INTO student(id,uname,chinese,english,math) VALUES(3,'王五',87,78,77);
 INSERT INTO student(id,uname,chinese,english,math) VALUES(4,'李一',88,98,92);
 INSERT INTO student(id,uname,chinese,english,math) VALUES(5,'李来财',82,84,67);
 INSERT INTO student(id,uname,chinese,english,math) VALUES(6,'张进宝',55,85,45);
 INSERT INTO student(id,uname,chinese,english,math) VALUES(7,'黄蓉',75,65,30);
View Code

答案与题目

SELECT * from student;#查询所有学生

SELECT uname,english from student;#查询学生以及对应的英语成绩

SELECT (chinese+english+math) as 总分 from student;#查询学生总分

SELECT (chinese+english+math+10) as 总分加附加分 from student;#查询学生总分加101分

SELECT chinese 中文,english 英语,math 数学 from student;#给列增加名字

SELECT * from student where uname='李一';#姓名为李一的学生成绩

SELECT uname from student where english>=90;#查询英语成绩大于等于90的学生姓名

SELECT uname as 用户名,(chinese+english+math) as 总分 from student HAVING 总分>240;#总分大于240的学生

SELECT uname 用户名,chinese 中文 from student having 中文 BETWEEN 80 and 90;#分数在80到90之间的学生

 

 

创建员工表,部门表,员工等级表

-- 部门表
CREATE TABLE DEPT(
    DEPTNO INT PRIMARY KEY,
    DNAME VARCHAR(14), -- 部门名称
    LOC VARCHAR(13)-- 部门地址
) ;
INSERT INTO DEPT VALUES    (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES    (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES    (40,'OPERATIONS','BOSTON');


-- 员工表
CREATE TABLE EMP(
    EMPNO INT  PRIMARY KEY, -- 员工编号
    ENAME VARCHAR(10), -- 员工姓名
    JOB VARCHAR(9), -- 员工工作
    MGR INT, -- 员工直属领导编号
    HIREDATE DATE, -- 入职时间
    SAL DOUBLE, -- 工资
    COMM DOUBLE, -- 奖金
    DEPTNO INT,  -- 所在部门
    FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO));  -- 关联dept表

-- ALTER TABLE EMP ADD FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO);
INSERT INTO EMP VALUES(7369,'SMITH','职员',7566,"1980-12-17",800,NULL,20);
INSERT INTO EMP VALUES(7499,'ALLEN','销售员',7698,'1981-02-20',1600,300,30);
INSERT INTO EMP VALUES(7521,'WARD','销售员',7698,'1981-02-22',1250,500,30);
INSERT INTO EMP VALUES(7566,'JONES','经理',7839,'1981-04-02',2975,NULL,20);
INSERT INTO EMP VALUES(7654,'MARTIN','销售员',7698,'1981-09-28',1250,1400,30);
INSERT INTO EMP VALUES(7698,'BLAKE','经理',7839,'1981-05-01',2850,NULL,30);
INSERT INTO EMP VALUES(7782,'CLARK','经理',7839,'1981-06-09',2450,NULL,10);
INSERT INTO EMP VALUES(7788,'SCOTT','职员',7566,'1987-07-03',3000,2000,20);
INSERT INTO EMP VALUES(7839,'KING','董事长',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO EMP VALUES(7844,'TURNERS','销售员',7698,'1981-09-08',1500,50,30);
INSERT INTO EMP VALUES(7876,'ADAMS','职员',7566,'1987-07-13',1100,NULL,20);
INSERT INTO EMP VALUES(7900,'JAMES','职员',7698,'1981-12-03',1250,NULL,30);
INSERT INTO EMP VALUES(7902,'FORD','销售员',7566,'1981-12-03',3000,NULL,20);
INSERT INTO EMP VALUES(7934,'MILLER','职员',7782,'1981-01-23',1300,NULL,10);

-- 工资等级表
CREATE TABLE SALGRADE(
    GRADE INT,-- 等级
    LOSAL DOUBLE, -- 最低工资
    HISAL DOUBLE ); -- 最高工资

INSERT INTO SALGRADE VALUES (1,500,1000);
INSERT INTO SALGRADE VALUES (2,1001,1500);
INSERT INTO SALGRADE VALUES (3,1501,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
View Code

 

SELECT * from emp where DEPTNO=30;#查询部门30的员工

SELECT EMPNO,ENAME,DEPTNO FROM EMP WHERE JOB='职员';#查询是职员的编号,姓名,部门编号

SELECT * from emp where COMM>SAL;#查询奖金大于工资的员工信息

SELECT * from emp where COMM>0.6*SAL;#查询奖金大于60%的工资的员工信息

SELECT * from emp where ENAME like '%A%';#查询员工姓名包含A的员工信息

SELECT * from emp where ENAME LIKE 'A%' OR ENAME LIKE 'B%' OR ENAME LIKE 'S%' ORDER BY ENAME;#查询姓名以A、B、S开头的员工信息

SELECT * from emp where ENAME LIKE '_______';#查询名字为7个字符的员工信息(7个下划线)

SELECT * from emp where ENAME not in(SELECT ENAME from emp where ENAME LIKE '%E%');#查询名字不包含E字符的员工信息
SELECT * from emp where ENAME not LIKE '%E%';#查询名字不包含E字符的员工信息
SELECT * from emp where !(ENAME LIKE '%E%');#查询名字不包含E字符的员工信息
SELECT * from emp ORDER BY ENAME asc;#查询员工信息并根据姓名升序

SELECT * from emp ORDER BY ENAME DESC,SAL asc;#查询员工信息并根据姓名降序,工资升序

select ENAME,ROUND(SAL/30,2) FROM emp;#查询员工的日薪资,并保留两位小数

SELECT JOB from emp where COMM>0;#找出有奖金的工作

SELECT * from emp where COMM<100 || ISNULL(COMM);#查询奖金少于100或者没有奖金的员工信息

SELECT * from emp where (JOB='职员' AND DEPTNO=10)||(JOB='经理' AND DEPTNO=20);#查询10部门职员和20部门经理

SELECT * from emp where (JOB='职员' AND DEPTNO=10)||(JOB='经理' AND DEPTNO=20)||(JOB!='职员' and JOB!='经理' and SAL>=2000);#查询10部门职员和20部门经理和不是经理、职员,但工资高于2000

 

 

创建职员表

CREATE TABLE employee(
    id INT,
    NAME VARCHAR(20),
    sex VARCHAR(10),
    birthday DATE,
    salary FLOAT,
    RESUME TEXT
);
INSERT INTO employee VALUES(1,"zhangsan","male","1980-11-25",2000,"good body");
INSERT INTO employee VALUES(2,"lisi","male","1980-04-25",1000,"good body");
INSERT INTO employee VALUES(3,"xiaohong","female","1978-11-25",4000,"good girl");
View Code
UPDATE employee set salary=5000;#把所有员工信息修改为5000

UPDATE employee set salary=3000 where NAME='zhangsan';#把zhangsan的工资改为3000

UPDATE employee set salary=4000,sex='female' where NAME='lisi';#把lisi的工资改为4000,性别改为female

UPDATE employee set salary=salary+1000 where NAME='xiaohong';#把xiaohong的工资加1000

 

 

创建职员表

create table emp(
id   int(11) ,
name   varchar(20),
sex   varchar(10),
birthday   date ,
salary   float(10,2) ,  -- 薪水
bonus   float(10,2) ,   -- 奖金
department varchar(20), -- 部门
resume   varchar(200) -- 简介
);


-- 插入员工数据
insert  into  emp values
(1,'zhangsan','male','1980-11-25',2000,100,'总裁办','good body'),
(2,'lisi','male','1980-04-25',1000,200,'研发部','good body'),
(3,'xiaohong','female','1978-11-25',4000,100,'财务部','good girl'),
(4,'wangwu','male','1981-01-25',4000,400,'人事部','good body'),
(5,'zhaoliu','male','1978-12-25',2000,NULL,'人事部','good body'),
(6,'tianqi','female','1998-05-25',2000,100,'人事部','good girl'),
(7,'renba','male','1968-10-25',3000,500,'财务部','good body');

 
View Code

 

SELECT * from emp;#查询所有员工信息

SELECT  name,salary from emp;#查询员工姓名和薪水

SELECT id 编号,name 姓名,sex 性别,birthday 生日,salary 薪水,bonus 奖金,department 部门,resume 备注 from emp;#使用中文列名

SELECT * from emp where (salary+bonus)>3000;#查询总收入大于3000的员工信息

SELECT name,department,salary,bonus from emp where(salary+bonus)>4000;#查询总收入大于4000的员工姓名、部门、薪水和奖金

select * from emp where birthday>='1980-1-1';#查询80后员工

SELECT * from emp where salary>=4000 and sex='female';#查询工资大于等于4000且为女性的员工信息

SELECT department,count(*) from emp GROUP BY department;#查询各个部门的员工数量

SELECT department,count(*),sum(salary) from emp GROUP BY department;#查询各个部门的员工数量和薪水支出

SELECT department,count(*),sum(salary)+sum(bonus) from emp GROUP BY department;#查询各个部门的员工数量和总支出
SELECT department,sum(salary+IFNULL(bonus,0) ) as 总支出 from emp GROUP BY department HAVING 总支出>=7000; #查询总支出大于7000的同事
SELECT avg(salary) from emp where name REGEXP('i');#查询名字包含i的员工平均工资
SELECT sum(salary) from emp where name regexp('i');#查询名字包含i的员工工资总和

 创建部门表和员工表

-- 创建部门表
CREATE TABLE dept(
 id INT PRIMARY KEY AUTO_INCREMENT,
 NAME VARCHAR(20)
);

INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');


-- 创建员工表
CREATE TABLE emp (
 id INT PRIMARY KEY AUTO_INCREMENT,
 NAME VARCHAR(10),
 gender CHAR(1), -- 性别
 salary DOUBLE, -- 工资
 join_date DATE, -- 入职日期
 dept_id INT,
 FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键,关联部门表(部门表的主键)
);


INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','',7200,'2013-02-24',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','',3600,'2010-12-02',2);

INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','',9000,'2008-08-08',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','',5000,'2015-10-07',3);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','',4500,'2011-03-14',1);
View Code
SELECT * from emp as t1,dept as t2 where t1.dept_id=t2.id;#查询员工表和对应的部门
SELECT t1.NAME,t1.gender,t2.NAME as 部门名称 from emp as t1,dept as t2 where t1.dept_id=t2.id;#查询姓名,性别,部门名称
SELECT * from emp as e inner join dept as d on e.dept_id=d.id;#内连接
DELETE  from emp where NAME like '沙悟净';
INSERT into emp VALUES(0,'沙悟净','',8000,NOW(),null);#插入一行新语句

SELECT * from emp as e left join dept as d on d.id=e.dept_id;#左连接,左边必须要有
SELECT * from emp as e right join dept as d on d.id=e.dept_id;#右连接,右边必须要有

#INSERT into dept VALUES(0,'公关部');
SELECT * from emp as e where e.salary>=(SELECT MAX(salary) from emp);# 查询工资最高的同事信息
SELECT * from emp as e where e.salary<=(SELECT min(salary) from emp);#查询工资最低的同事信息
SELECT * from emp as e where e.salary<=(SELECT avg(salary) from emp);#查询低于平均工资的同事信息
SELECT * from emp as e where e.dept_id in (SELECT id from dept where NAME LIKE "财务部");#查询财务部同事的信息
SELECT * from emp as e where e.dept_id in (SELECT id from dept where NAME LIKE "财务部" or NAME LIKE "市场部");#查询财务部和市场部同事的信息
SELECT * from emp e left join dept d on e.dept_id=d.id where e.join_date>='2011-11-11';#查询在2011-11-11之后入职的员工

 创建借书表

CREATE TABLE  book (
  BID CHAR(10) NOT NULL,
  title CHAR(50) DEFAULT NULL,
  author CHAR(20) DEFAULT NULL,
  PRIMARY KEY (BID)
);
INSERT INTO book VALUES ('B001', '人生若只如初见', '安意如');
INSERT INTO book VALUES ('B002', '入学那天遇见你', '晴空');
INSERT INTO book VALUES ('B003', '感谢折磨你的人', '如娜');
INSERT INTO book VALUES ('B004', '我不是教你诈', '刘庸');
INSERT INTO book VALUES ('B005', '英语四级', '白雪');
CREATE TABLE  borrow (
  borrowID CHAR(10) NOT NULL,
  stuID CHAR(10) DEFAULT NULL,
  BID CHAR(10) DEFAULT NULL,
  T_time VARCHAR(50) DEFAULT NULL,
  B_time VARCHAR(50) DEFAULT NULL,
  PRIMARY KEY (borrowID)
) ;
INSERT INTO borrow VALUES ('T001', '1001', 'B001', '2007-12-26 00:00:00', NULL);
INSERT INTO borrow VALUES ('T002', '1004', 'B003', '2008-01-05 00:00:00', NULL);
INSERT INTO borrow VALUES ('T003', '1005', 'B001', '2007-10-08 00:00:00', '2007-12-25 00:00:00');
INSERT INTO borrow VALUES ('T004', '1005', 'B002', '2007-12-16 00:00:00', '2008-01-07 00:00:00');
INSERT INTO borrow VALUES ('T005', '1002', 'B004', '2007-12-22 00:00:00', NULL);
INSERT INTO borrow VALUES ('T006', '1005', 'B005', '2008-01-06 00:00:00', NULL);
INSERT INTO borrow VALUES ('T007', '1002', 'B001', '2007-09-11 00:00:00', NULL);
INSERT INTO borrow VALUES ('T008', '1005', 'B004', '2007-12-10 00:00:00', NULL);
INSERT INTO borrow VALUES ('T009', '1004', 'B005', '2007-10-16 00:00:00', '2007-12-18 00:00:00');
INSERT INTO borrow VALUES ('T010', '1002', 'B002', '2007-09-15 00:00:00', '2008-01-05 00:00:00');
INSERT INTO borrow VALUES ('T011', '1004', 'B003', '2007-12-28 00:00:00', NULL);
INSERT INTO borrow VALUES ('T012', '1002', 'B003', '2007-12-30 00:00:00', NULL);

CREATE TABLE  student (
  stuID CHAR(10) NOT NULL,
  stuName VARCHAR(10) DEFAULT NULL,
  major VARCHAR(50) DEFAULT NULL,
  PRIMARY KEY (stuID)
);

INSERT INTO student VALUES ('1001', '林林', '计算机');
INSERT INTO student VALUES ('1002', '白杨', '计算机');
INSERT INTO student VALUES ('1003', '虎子', '英语');
INSERT INTO student VALUES ('1004', '北漂的雪', '工商管理');
INSERT INTO student VALUES ('1005', '五月', '数学');
View Code

 

SELECT b2.stuID 学生编号,s1.stuName 学生姓名,b1.BID 图书编号,b1.title 图书名称,b2.T_time 借出日期 from borrow b2 
left join student s1 on b2.stuID=s1.stuID
left join book b1 on b1.BID=b2.BID where b2.T_time BETWEEN '2007-12-15' and '2008-1-8' ORDER BY s1.stuName;#查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、学生名称、图书编号、图书名称、借出日期;


SELECT  s1.stuName as 学生名称,s1.stuID 学生编号,s1.major 专业 from student s1 where s1.stuID in (SELECT stuId from borrow);#查询所有借过图书的学生编号、学生名称、专业;


SELECT  s1.stuName as 学生名称,s1.stuID 学生编号,s1.major 专业 from student s1 where s1.stuID not in (SELECT stuId from borrow);#查询没有借过图书的学生编号、学生名称、专业;


SELECT s1.stuName,b1.title,b2.T_time,b2.B_time from borrow b2 inner join student s1 on b2.stuID=s1.stuID
inner join book b1 on b1.BID=b2.BID where b1.author like '安意如';#查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期;


SELECT b2.stuID 学生编号,s1.stuName 学生姓名,b1.BID 图书编号,b1.title 图书名称,b2.T_time 借出日期 from borrow b2
left join student s1 on b2.stuID=s1.stuID
left join book b1 on b1.BID=b2.BID where !ISNULL(b2.T_time) and ISNULL(b2.B_time);#查询借过书但有书未归还的学生编号、学生名称、图书编号、图书名称、借出日期


SELECT s1.stuName 学生姓名,count(*) from borrow b2 
inner join student s1 on b2.stuID=s1.stuID
inner join book b1 on b1.BID=b2.BID where ISNULL(b2.B_time) GROUP BY s1.stuName;#查询目前借书但未归还图书的学生名称及未还图书数量;

 

 

转载:https://www.cnblogs.com/battlecry/p/9573858.html

posted @ 2021-08-04 23:20  月长生  阅读(82)  评论(0)    收藏  举报