跳转至

MySQL 经典笔试题

数据重排

中国移动SQL面试题:使用SQL语句创建的数据完成要求。

创建数据

create table CMCC(
   id number(10) primary key,
   type number(10) ,
   t_id number(10),
   value varchar2(5)
);

insert into CMCC values(100,1,1,'张三');
insert into CMCC values(200,2,1,'男');
insert into CMCC values(300,3,1,'50');

insert into CMCC values(101,1,2,'刘二');
insert into CMCC values(201,2,2,'男');
insert into CMCC values(301,3,2,'30');

insert into CMCC values(102,1,3,'刘三');
insert into CMCC values(202,2,3,'女');
insert into CMCC values(302,3,3,'10');

题目

请写出一条查询语句结果如下:

姓名 性别 年龄
张三 50

解答

-- 表单查询
select * from CMCC;

select decode(type, 1, value) 姓名,
       decode(type, 2, value) 性别,
       decode(type, 3, value) 年龄,
  from CMCC;

-- 首先分组,再过滤 null
select max(decode(type, 1, value)) 姓名,
       max(decode(type, 2, value)) 性别,
       max(decode(type, 3, value)) 年龄,
  from CMCC group by t_id;

关于 group by 的SQL面试题

表内容

2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负

题目

如果要生成下列结果, 该如何写sql语句?

日期
2005-05-09 2 2
2005-05-10 1 2

1. 创建数据

create table group(
    rq varchar2(10),
    shengfu varchar2(5)
);

insert into group values('2005-05-09','胜');
insert into group values('2005-05-09','胜');
insert into group values('2005-05-09','负');
insert into group values('2005-05-09','负');
insert into group values('2005-05-10','胜');
insert into group values('2005-05-10','负');
insert into group values('2005-05-10','负');

## 编写SQL语句完成要求

创建数据

create table STUDENT_SCORE
(
  name    VARCHAR2(20),
  subject VARCHAR2(20),
  score   NUMBER(4,1)
);

insert into student_score (NAME, SUBJECT, SCORE) values ('张三', '语文', 78.0);
insert into student_score (NAME, SUBJECT, SCORE) values ('张三', '数学', 88.0);
insert into student_score (NAME, SUBJECT, SCORE) values ('张三', '英语', 98.0);
insert into student_score (NAME, SUBJECT, SCORE) values ('李四', '语文', 89.0);
insert into student_score (NAME, SUBJECT, SCORE) values ('李四', '数学', 76.0);
insert into student_score (NAME, SUBJECT, SCORE) values ('李四', '英语', 90.0);
insert into student_score (NAME, SUBJECT, SCORE) values ('王五', '语文', 99.0);
insert into student_score (NAME, SUBJECT, SCORE) values ('王五', '数学', 66.0);
insert into student_score (NAME, SUBJECT, SCORE) values ('王五', '英语', 91.0);

题目

1, 得到类似下面的结果

姓名 语文 数学 英语
王五 89 56 89

2, 有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):

按照分数分级 - 大于或等于80表示优秀 - 大于或等于60表示及格 - 小于60分表示不及格

显示格式:

语文 数学 英语
及格 优秀 不及格

请用一句SQL得出结果

题目

table1, table2 中取出如 table3 所列格式数据。注意提供的数据及结果不准确,这里只是作为一个格式向大家请教。

Table1

月份Mon 部门Dep 业绩yj
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8

Table2

部门Dep 部门名称dname
01 国内业务一部
02 国内业务二部
03 国内业务三部
04 国际业务部

Ttable3 (result)

部门Dep 一月份 二月份 三月份
01 10
02 10 8
03 5 8
04 9

1. 创建数据

create table yj01(
       month varchar2(10),
       deptno number(10),
       yj number(10)
);

insert into yj01(month,deptno,yj) values('一月份',01,10);
insert into yj01(month,deptno,yj) values('二月份',02,10);
insert into yj01(month,deptno,yj) values('二月份',03,5);
insert into yj01(month,deptno,yj) values('三月份',02,8);
insert into yj01(month,deptno,yj) values('三月份',04,9);
insert into yj01(month,deptno,yj) values('三月份',03,8);

create table yjdept(
       deptno number(10),
       dname varchar2(20)
);

insert into yjdept(deptno,dname) values(01,'国内业务一部');
insert into yjdept(deptno,dname) values(02,'国内业务二部');
insert into yjdept(deptno,dname) values(03,'国内业务三部');
insert into yjdept(deptno,dname) values(04,'国际业务部');