简答题
一.题目1
题干
请说一说数据库语言有哪几个分类,并阐述下该分类下常用的SQL关键字。
考察知识点
- 4个分类语言
- SQL关键字
参考答案:
数据库语言可分为四类:
DDL:数据定义语言,主要用于定义数据库、数据表等,关键字:create、alter、drop等;
DML:数据操作语言,主要用于操作数据表字段的命令,关键字:insert、update、delete等;
DQL:数据查询语言,主要用于查询数据操作,关键字:select、from、where等;
DCL:数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户,咱们不常用.
二.题目2
题干
请简单介绍下约束的作用以及常见的约束
考察知识点
- 约束作用
- 约束分类
参考答案:
约束作用:约束实际上就是表中数据的限制条件
常见的约束有:
主键约束:(primary key) 特点: 修饰的字段值非空唯一dd
非空约束:(not null) 特点: 修饰的字段值不能为空
唯一约束:(unique) 特点: 修饰的字段值不能重复
默认约束:(default) 特点: 修饰的字段值可以设置默认值
外键约束:(foreign key) 后面多表讲解
三.题目3
题干
数据表中<null>是什么意思?请说说你的理解。
考察知识点
- <null>l的含义
- is null
- is not null
参考答案:
1:<null>是在数据库中表示空值,一般用于SQL的非空约束,即not null;
2:<null>(空)这个值表示unknown(未知):它不表示""(空字符串)。不能把任何值与一个 unknown值进行比较,因为他们都会生产一个null值,而必须使用IS null操作符来进行比较。
3: is null是判断是否为空 is not null: 判断是否不为空
实操题
实操题DDL
一.题目1
题干
使用命令行来完成相关的数据库操作,如下:
(1)创建数据库名称为db_student1
(2)创建数据库名称为db_hw1
(3)切换数据库为db_student1
(4)查看当前使用的是哪个数据库;
(5)查看所有数据库
(6)删除数据库db_student1;
(7)查看当前使用的是哪个数据库;
(8)切换数据库到db_hw1。
考察知识点
- 数据库操作命令
作答
1.create database db_student1;
2.create database if not exists db_hw1;
3.use db_student1;
4.select database();
5.show databases;
6.drop database db_student1;
7.select database();
8.use db_hw1;
参考答案:
(1)创建数据库名称为db_student1
create database if not exists db_student1;
(2)创建数据库名称为db_hw1
create database if not exists db_hw1;
(3)选择数据库为db_student1
use db_student1;
(4)查看当前使用的是哪个数据库;
select database();
(5)查看所有数据库
show databases;
(6)删除数据库db_student1;
drop database db_student1;
(7)再次查看当前使用的是哪个数据库;
select database();
(8)切换数据库到db_hw1。
use db_hw1;
二.题目2
题干
使用命令行来完成相关的数据表操作,如下:
(1)在数据库db_hw1中创建一个数据student表,有用户sid、姓名name、性别sex、生日birthday;
(2)查看数据表中的字段信息
(3)查看创建数据表语句;
(4)再次创建一个数据little_student表
(5)查看所有表
(6)删除little_student表
(7)修改student数据表名为tb_student。
(8)再次查看所有表
考察知识点
- 数据表操作命令
作答
1.use db_hw1;
create table student( sid int , name varchar(100), sex varchar(5), birthday date );
2.desc student;
3.show create table student;
4.create table little_student( name varchar(100) );
5.show tables;
6.drop table little_student;
7.rename table student to tb_student;
8.show tables;
参考答案:
# 使用数据库
use db_hw1;
# 创建数据表
create table student(
sid int ,
name varchar(20),
sex varchar(5),
birthday date
);
# 查看表中字段
desc student;
# 查看创建表语句
show create table student;
# 创建表
create table little_student(
name varchar(20)
);
# 查看所有表
show tables;
# 删除新表
drop table little_student;
# 修改表名
rename table student to tb_student;
# 查看所有表
show tables;
三.题目3
使用命令行来完成相关的数据表操作,如下:
(1)创建数据库db_hw1 并使用
(2)在数据库db_hw1中创建一个数据tb_student表,有用户sid、姓名name、性别sex、生日birthday;注意如果表存在就使用已存在的哦!
(3)添加一个字段名称为age ,类型为int添加一个字段
(4)添加一个字段名称为desc
(5)查看所有字段信息
(6)修改birthday字段,名称为birth 类型为datetime,修改完后再次查看字段信息查看是否变化
(7)删除desc字段,删除完后再次查看字段信息查看是否变化
考察知识点
- 数据表操作命令
作答:
1.create database if not exists db_hw1;
use db_hw1;
2.create table if not exists tb_student( sid int , name varchar(100), sex varchar(100), birthday date );
3.alter table tb_student add age int;
4.alter table tb_student add `desc` varchar(100);
5.desc tb_student;
6.alter table tb_student change birthday birth datetime;
desc tb_student;
7.alter table tb_student drop `desc`;
desc tb_student;
参考答案:
# 创建数据库
create database if not exists db_hw1;
use db_hw1;
# 创建数据表
create table if not exists tb_student(
sid int ,
name varchar(20),
sex varchar(5),
birthday date
);
# 添加一个字段名称为age 类型为int
alter table tb_student add age int;
# 添加一个字段名称为desc 类型为varchar(200)
alter table tb_student add `desc` varchar(200);
# 查看所有字段信息
desc tb_student;
# 修改birthday字段,名称为birth 类型为datetime
alter table tb_student change birthday birth datetime;
# 再次查看所有字段信息
desc tb_student;
# 删除desc字段
alter table tb_student drop `desc`;
# 再次查看所有字段信息
desc tb_student;
四.题目4
可以去任意购物网站上找对应商品参数创建一张表练习.
实操题DML DQL
一.题目1
题干
按照下列要求完成DML操作:
(1)使用数据库db_hw2
(2)在该库中创建一个student表,字段有编号、学号、姓名、语文成绩、英语成绩、数学成绩等;
(3)对于这些字段,要求:编号是整型且是主键并且是自动增长的,学号是字符串;
(4)给student表添加如下10条数据;
(1, '20210908001','张王明', 89, 78, 90), (2, '20210908002', '李进', 67, 53, 95), (3, '20210908003', '王俊', 87, 78, 77), (4, '20210908004', '李云云', 80, 98, 92), (5, '20210908005', '谢来财', 82, 84, 67), (6, '20210908006', '张进宝', 55, 85, 89), (7, '20210908007', '黄蓉儿', 79, 86, 90), (8, '20210908008', '刘小雪', 71, 90, 91), (9, '20210908009', '夏金章', 89, 91, 96), (10, '20210908010', '杨洋', 83, 65, 90)
(5)修改id为4的这条数据的语文成绩为88,删除id为10的这条数据内容;
(6)查询表内的所有数据信息。
考察知识点
- 创建数据库
- 创建数据表
- SQL约束
- 插入数据
- 修改数据
- 删除数据
- 快速查询数据
作答:
CREATE DATABASE db_hw2;
USE db_hw2;
CREATE TABLE student
(
id int PRIMARY KEY AUTO_INCREMENT,
class varchar(100),
name varchar(100),
chinese INT,
english int,
math int
);
INSERT INTO student(id, class, name, chinese, english, math)
VALUES
(1, '20210908001', '张王明', 89, 78, 90),
(2, '20210908002', '李进', 67, 53, 95),
(3, '20210908003', '王俊', 87, 78, 77),
(4, '20210908004', '李云云', 80, 98, 92),
(5, '20210908005', '谢来财', 82, 84, 67),
(6, '20210908006', '张进宝', 55, 85, 89),
(7, '20210908007', '黄蓉儿', 79, 86, 90),
(8, '20210908008', '刘小雪', 71, 90, 91),
(9, '20210908009', '夏金章', 89, 91, 96),
(10, '20210908010', '杨洋', 83, 65, 90);
UPDATE student SET chinese=88 WHERE id = 4;
DELETE FROM student WHERE id = 10;
SELECT * FROM student;
参考答案:
# 创建数据库
create database db_hw2 default character set utf8;
use db_hw2;
# 创建数据表+字段+约束
create table student(
id int primary key auto_increment not null,
stuno varchar(20),
name varchar(20),
chinese double,
english double,
math double
);
# 添加数据
INSERT INTO student(id, stuno,name, chinese, english, math)
VALUES (1, '20210908001','张王明', 89, 78, 90),
(2, '20210908002', '李进', 67, 53, 95),
(3, '20210908003', '王俊', 87, 78, 77),
(4, '20210908004', '李云云', 80, 98, 92),
(5, '20210908005', '谢来财', 82, 84, 67),
(6, '20210908006', '张进宝', 55, 85, 89),
(7, '20210908007', '黄蓉儿', 79, 86, 90),
(8, '20210908008', '刘小雪', 71, 90, 91),
(9, '20210908009', '夏金章', 89, 91, 96),
(10, '20210908010', '杨洋', 83, 65, 90);
# 修改数据
update student set chinese = 88 where id = 4;
# 删除数据
delete from student where id = 10;
# 查询数据
select * from student;
二.题目2
题干
按照下列要求编写sql语句:
(1)查询表中所有学生的信息;
(2)查询表中所有学生的姓名和对应的英语成绩;
(3)过滤数据表中,语文成绩值的重复数据;
(4)统计每个学生的总分;
(5)在所有学生总分数上加10分特长分;
(6)查询英语成绩大于90分的同学;
(7)查询总分大于200分的所有同学;
(8)查询英语分数在 80-90之间的同学;
(9)查询英语分数不在 80-90之间的同学;
(10)查询数学分数为89,90,91的同学;
(11)查询所有姓李的学生英语成绩;
(12)查询数学分80并且语文分80的同学;
(13)查询英语80或者总分200的同学。
考察知识点
- 简单查询
- where条件查询
作答:
SELECT * FROM student;
SELECT name, english FROM student;
SELECT DISTINCT chinese
FROM db_hw2.student;
SELECT name, (chinese + english + math) FROM student;
SELECT name, (chinese + english + math) + 10 FROM student;
SELECT name FROM student WHERE english > 90;
SELECT name FROM student WHERE (chinese + english + math) > 200;
SELECT name FROM student WHERE english BETWEEN 80 AND 90;
SELECT name FROM student WHERE english NOT BETWEEN 80 AND 90;
SELECT name FROM student WHERE math IN (89, 90, 91);
SELECT name, english FROM student WHERE name LIKE '李%';
SELECT * FROM student WHERE math = 80 AND chinese = 80;
SELECT * FROM student;
WHERE english = 80 OR (chinese + english + math) = 200;
参考答案:
# 切换使用数据库
use db_hw2;
# 查询表中所有学生的信息;
select * from student;
# 查询表中所有学生的姓名和对应的英语成绩;
select name,english from student;
# 过滤数据表中,语文成绩值的重复数据;
select distinct chinese from student;
# 统计每个学生的总分;
select name,(chinese+english+math) from student;
# 在所有学生总分数上加10分特长分;
select name,(chinese+english+math)+10 from student;
# 查询英语成绩大于90分的同学;
select name from student where english > 90;
# 查询总分大于200分的所有同学;
select name from student where (chinese+english+math)>200;
# 查询英语分数在 80-90之间的同学;
select name from student where english between 80 and 90;
# 查询英语分数不在 80-90之间的同学;
select name from student where english not between 80 and 90;
# 查询数学分数为89,90,91的同学;
select * from student where math in (89,90,91);
# 查询所有姓李的学生英语成绩;
select name,english from student where name like '李%';
# 查询数学分80并且语文分80的同学;
select * from student where math = 80 and chinese = 80;
# 查询英语80或者总分200的同学。
select * from student where english = 80 or (chinese+english+math)=200;
三.题目3
题干一
- 创建数据库test
- 创建职工表worker ,
字段id,类型整数,设置主键自增
姓名字段name,类型字符串,添加非空约束
等级字段level,类型整数,添加默认值0
1部门编号字段dep_id,类型整数 - 把以下3条数据一次性插入worker表中:
(1,'黄蓉',80,100),(2,'东邪',95,100),(3,'梅超风',90,100) - 使用id自增,把以下3条数据一次性插入到worker表中:
('尹志平',67,200),('丘处机',85,200),('周伯通',93,200)
考察知识点
- 主键约束
- 其他约束
作答:
CREATE DATABASE text;
USE text;
CREATE TABLE worker
(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(100),
level int,
dep_id int
);
ALTER table worker CHANGE name name varchar(100) NOT NULL;
alter table worker CHANGE level level int DEFAULT "0";
INSERT INTO worker VALUES (1,'黄蓉',80,100),(2,'东邪',95,100),(3,'梅超风',90,100);
INSERT INTO worker(name, level, dep_id) VALUES ('尹志平',67,200),('丘处机',85,200),('周伯通',93,200);
参考答案:
1 创建数据库
create database test;
use test
2 建职工表
create table worker(
id int primary key auto_increment,
name varchar(32) not null,
level tinyint default 0,
dep_id int
);
3 全列插入数据 可以省略 字段名
insert into worker values (1,'黄蓉',80,100),(2,'东邪',95,100),(3,'梅超风',90,100);
4 部分列插入数据
insert into worker(name,level,dep_id) values ('尹志平',67,200),('丘处机',85,200),('周伯通',93,200);
题干二
- 创建数据库test
- 创建部门表department
字段id,类型整数,设置主键自增
部门名称字段name,类型字符串,添加非空约束
部门主管编号mid,类型int - 把以下2条数据一次性插入到department表中;
(100,'桃花岛'),(200, '全真教')
- 使用 SQL 语句将 东邪 设置为桃花岛组的主管
- 使用 SQL 语句将 丘处机 设置为全真教组的主管
考察知识点
- 非空约束
- 其他约束
作答:
CREATE TABLE department
(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(100) NOT NULL,
mid int
);
insert into department (id, name) VALUES (100,'桃花岛'),(200,'全真教');
update department set mid = 2 where name = '桃花岛';
UPDATE department SET mid = 5 WHERE name = '全真教';
参考答案:
-- 1 创建数据库
create database if not exists test;
use test
-- 3 建部门表
create table department(
id int primary key auto_increment,
name varchar(32) not null,
mid int
);
-- 1 部分列插入数据
insert into department(id,name) values (100,'桃花岛'),(200, '全真教');
-- 2 东邪的用户 id 为 2 ,只需要将部门中主管 mid设置为 2 即可
update department set mid = 2 where name = '桃花岛';
-- 3 丘处机的用户 id 为 5, 只需要将部门中主管 mid设置为 5 即可
update department set mid = 5 where name = '全真教';
四.题目4
数据准备
已知以下建表语句
create table students (
studentNo int primary key auto_increment ,
name varchar(100),
sex varchar(100),
hometown varchar(100),
age int, class_id int ,
card varchar(100) );
要求建表后,编写一条sql语句插入一次性插入以下所有数据
('王昭君', '女', '北京', 20, 1, '340322199001247654')
('诸葛亮', '男', '上海', 18, 2, '340322199002242354')
('张飞', '男', '南京', 24, 3, '340322199003247654')
('白起', '男', '安徽', 22, 4, '340322199005247654')
('大乔', '女', '天津', 19, 3, '340322199004247654')
('孙尚香', '女', '河北', 18, 1, '340322199006247654')
('百里玄策', '男', '山西', 20, 2, '340322199007247654')
('小乔', '女', '河南', 15, 3, null)
('百里守约', '男', '湖南', 21, 1, '')
('妲己', '女', '广东', 26, 2, '340322199607247654')
('李白', '男', '北京', 30, 4, '340322199005267754')
('孙膑', '男', '新疆', 26, 3, '340322199000297655')
题干
- 查询学生"百里守约"的基本信息 基础查询
- 查询学生"百里守约"或”百里玄策”的基本信息 逻辑查询or
- 查询姓"张"学生的姓名,年龄,班级 模糊查询
- 查询姓名中含有"约"字的学生的基本信息 模糊查询
- 查询姓名长度为三个字,姓“孙”的学生的学号,姓名,年龄,班级,身份证号 模糊查询
- 查询姓"百"或者姓”孙”的学生的基本信息 逻辑查询or
- 查询姓"百"并且家乡是"山西"的学生信息 逻辑查询and
- 查询家乡是"北京"、"新疆"、"山东"、"上海"的学生的信息
- 查询姓"孙",但是家乡不是"河北"的学生信息
- 查询家乡不是"北京"、"新疆"、"山东"、"上海"的学生的信息
考察知识点
- 基础查询
- 条件查询
作答:
CREATE TABLE students
(
studentno int PRIMARY KEY AUTO_INCREMENT,
name varchar(100),
sex varchar(100),
hometown varchar(100),
age int,
class_id int,
card varchar(100)
);
INSERT INTO
students (name, sex, hometown, age, class_id, card )
VALUES
('王昭君', '女', '北京', 20, 1, '340322199001247654') ,
( '诸葛亮', '男', '上海', 18, 2, '340322199002242354'),
('张飞', '男', '南京', 24, 3, '340322199003247654'),
('白起', '男', '安徽', 22, 4, '340322199005247654'),
('大乔', '女', '天津', 19, 3, '340322199004247654'),
('孙尚香', '女', '河北', 18, 1, '340322199006247654'),
('百里玄策', '男', '山西', 20, 2, '340322199007247654'),
('小乔', '女', '河南', 15, 3, NULL),
('百里守约', '男', '湖南', 21, 1, ''),
('妲己', '女', '广东', 26, 2, '340322199607247654'),
('李白', '男', '北京', 30, 4, '340322199005267754'),
('孙膑', '男', '新疆', 26, 3, '340322199000297655');
select * from students WHERE name='百里守约';
Select * FROM students WHERE name='百里守约' or name='百里玄策';
select name, age ,class_id FROM students WHERE name like '张%';
select * FROM students WHERE name like '%约%';
select studentno, name, age ,class_id,card FROM students WHERE name LIKE "孙__";
select * FROM students WHERE name like '百%' or name like '孙%';
select * FROM students WHERE name like '百%' and hometown= '山西';
select * FROM students WHERE hometown in ('北京','新疆','山东','上海');
select * FROM students WHERE name LIKE '孙%' and hometown != '河北';
select * FROM students WHERE hometown NOT IN ('北京','新疆','山东','上海');
参考答案:
# 创建表
create table students (
studentNo int primary key auto_increment ,
name varchar(100),
sex varchar(100),
hometown varchar(100),
age int(4),
class_id int ,
card varchar(100)
);
# 插入数据
insert into students (name,sex,hometown,age,class_id,card) values
('王昭君', '女', '北京', 20, 1, '340322199001247654'),
('诸葛亮', '男', '上海', 18, 2, '340322199002242354'),
('张飞', '男', '南京', 24, 3, '340322199003247654'),
('白起', '男', '安徽', 22, 4, '340322199005247654'),
('大乔', '女', '天津', 19, 3, '340322199004247654'),
('孙尚香', '女', '河北', 18, 1, '340322199006247654'),
('百里玄策', '男', '山西', 20, 2, '340322199007247654'),
('小乔', '女', '河南', 15, 3, null),
('百里守约', '男', '湖南', 21, 1, ''),
('妲己', '女', '广东', 26, 2, '340322199607247654'),
('李白', '男', '北京', 30, 4, '340322199005267754'),
('孙膑', '男', '新疆', 26, 3, '340322199000297655');
1.select * from students where name='百里守约';
2.select * from students where name='百里守约' or name='百里玄策';
3.select name,age,class_id from students where name like '张%';
4.select * from students where name like '%约%';
5.select studentNo,name,age,class_id,card from students where name like '孙__';
6.select * from students where name like '百%' or name like '孙%';
7.select * from students where name like '百%' and hometown='山西';
8.select * from students where hometown in('北京','新疆','山东','上海');
9.select * from students where name like '孙%' and hometown !='河北';
10.select * from students where hometown not in('北京','新疆','山东','上海');