2018/11/7資料庫測試
目錄
- 一、簡答題
- 1.MySQL預設的儲存引擎?
- 2.常見的資料庫產品有哪些?
- 3.寫出MySQL常用命令:進入某個庫,查詢某個庫中的所有表,建立資料庫。
- 4.請寫出MySQL常見的資料型別。
- 5.寫出MySQL建立表的語法
- 6. MySQL中完整性約束有什麼作用?
- 7.MySQL中LIMIT關鍵字是做什麼的,其引數代表什麼意思?
- 8.如何避免重複資料查詢,請舉例說明?
- 9.如何使用字串拼接函式,請舉例說明?
- 10.多表連線操作有哪些,區別是什麼?
- 二、程式設計題
- 1.建立student和score表語句
- 2、查詢student表的所有記錄
- 3、查詢student表的第2條到4條記錄
- 4、從student表查詢所有學生的學號(id)、姓名(name)和院系(department)的資訊
- 5、從student表中查詢計算機系和英語系的學生的資訊(用 IN 關鍵字)
- 6、從student表中查詢年齡18~22歲的學生資訊(用 BETWEEN AND)
- 7、從student表中查詢每個院系有多少人
- 8、從score表中查詢每個科目的最高分
- 9、查詢李四的考試科目(c_name)和考試成績(grade)
- 10、用連線的方式查詢所有學生的資訊和考試資訊
- 11、計算每個學生的總成績
- 12、計算每個考試科目的平均成績
- 13、查詢計算機成績低於95的學生資訊
- 14、查詢同時參加計算機和英語考試的學生的資訊
- 15、將計算機考試成績按從高到低進行排序
- 16、從student表和score表中查詢出學生的學號,然後合併查詢結果
- 17、查詢姓張或者姓王的同學的姓名、院系和考試科目及成績
- 18、查詢都是湖南的學生的姓名、年齡、院系和考試科目及成績
- 三、表名student_score,如圖
一、簡答題
1.MySQL預設的儲存引擎?
InnoDB和MylSAM
2.常見的資料庫產品有哪些?
Oracle MySQL(Oracle)SQLServer(微軟)DB2(IBM)
3.寫出MySQL常用命令:進入某個庫,查詢某個庫中的所有表,建立資料庫。
- 進入某個庫 use d_name
- 查詢某個庫中的所有表 show tables
- 建立資料庫 create database d_name
4.請寫出MySQL常見的資料型別。
-
整型 int
-
浮點型 decimal
-
字
符型 varchar
7. 文字型 text -
日期 data
-
時間 datetime
5.寫出MySQL建立表的語法
create table t_name(
欄位1名 資料型別[約束型別]
欄位1名 資料型別[約束型別]
);
6. MySQL中完整性約束有什麼作用?
保證資料合法性及相對完整性
7.MySQL中LIMIT關鍵字是做什麼的,其引數代表什麼意思?
限制查詢條件
第一個引數表示從第幾條開始
第二個引數表示一共幾條
8.如何避免重複資料查詢,請舉例說明?
使用關鍵字 distinct
SELECT DISTINCT clazz FROM stu_info
9.如何使用字串拼接函式,請舉例說明?
select name,concat(price,’$’) from menu
10.多表連線操作有哪些,區別是什麼?
- 並:具有相同欄位數目和欄位型別的表合併
- 笛卡爾積:無關係的組合
- 內連線:有關係的笛卡爾積,保留匹配資料記錄,捨棄不匹配的資料記錄
- 外連線:有關係的笛卡爾積,保留匹配資料記錄,保留主表不匹配的資料記錄
二、程式設計題
向student表插入記錄的INSERT語句如下:
INSERT INTO student VALUES( 901,‘張老大’, ‘男’,1985,‘計算機系’, ‘北京市海淀區’);
INSERT INTO student VALUES( 902,‘張老二’, ‘男’,1986,‘中文系’, ‘北京市昌平區’);
INSERT INTO student VALUES( 903,‘張三’, ‘女’,1990,‘中文系’, ‘湖南省永州市’);
INSERT INTO student VALUES( 904,‘李四’, ‘男’,1990,‘英語系’, ‘遼寧省阜新市’);
INSERT INTO student VALUES( 905,‘王五’, ‘女’,1991,‘英語系’, ‘福建省廈門市’);
INSERT INTO student VALUES( 906,‘王六’, ‘男’,1988,‘計算機系’, ‘湖南省衡陽市’);
向score表插入記錄的INSERT語句如下:
INSERT INTO score VALUES(NULL,901, ‘計算機’,98);
INSERT INTO score VALUES(NULL,901, ‘英語’, 80);
INSERT INTO score VALUES(NULL,902, ‘計算機’,65);
INSERT INTO score VALUES(NULL,902, ‘中文’,88);
INSERT INTO score VALUES(NULL,903, ‘中文’,95);
INSERT INTO score VALUES(NULL,904, ‘計算機’,70);
INSERT INTO score VALUES(NULL,904, ‘英語’,92);
INSERT INTO score VALUES(NULL,905, ‘英語’,94);
INSERT INTO score VALUES(NULL,906, ‘計算機’,90);
INSERT INTO score VALUES(NULL,906, ‘英語’,85);
問題
1.建立student和score表語句
-- 建立student表
create table student(
id int(10) primary key auto_increment comment '學號',
name varchar(20) not null comment '姓名',
sex varchar(4) comment '性別',
birth year comment '出生年月',
department varchar(20) not null comment '院系',
address varchar(50) comment '家庭住址'
)
-- 建立score表
create table score(
id int(10) primary key auto_increment comment '編號',
stu_id int(10) not null comment '學號',
c_name varchar(20) comment '課程名',
grade int(10) comment '分數'
)
2、查詢student表的所有記錄
select * from student
3、查詢student表的第2條到4條記錄
select * from student where limit 1,3
4、從student表查詢所有學生的學號(id)、姓名(name)和院系(department)的資訊
select id as 學號 ,name as 姓名 ,department as 院系 from student
5、從student表中查詢計算機系和英語系的學生的資訊(用 IN 關鍵字)
select * from student where department in("計算機系","英語系")
6、從student表中查詢年齡18~22歲的學生資訊(用 BETWEEN AND)
select * from student where (year(now())-birth) between 18 and 22
7、從student表中查詢每個院系有多少人
select deparment as 院系,count(*) from student group by department
8、從score表中查詢每個科目的最高分
select c_name as 科目,max(grade) as 最高分 from score group by c_name
9、查詢李四的考試科目(c_name)和考試成績(grade)
select * from
(select s.name,c.c_name,c.grade from student as s left join score as c on c.stu_id = s.id) as t_new
where name = "李四"
10、用連線的方式查詢所有學生的資訊和考試資訊
select * from score as c left join student as s on c.stu_id = s.id
11、計算每個學生的總成績
select s.name as 姓名,SUM(grade) as 總成績 from student as s left join score as c on s.id = c.stu_id group by s.name
12、計算每個考試科目的平均成績
select c_name as 科目,avg(grade) as 平均成績 from score groub by c_name
13、查詢計算機成績低於95的學生資訊
select * from join score as c left join student as s c.stu_id = s.id where c.c_name = "計算機" and c.grade < 95
14、查詢同時參加計算機和英語考試的學生的資訊
select * from student where id in (
select stu_id from score where c_name = "計算機系" or c_name = "英語系" group by stu_id having count(*) = 2)
15、將計算機考試成績按從高到低進行排序
select grade as "計算機考試成績" from score where c_name ="計算機" order by grade desc
16、從student表和score表中查詢出學生的學號,然後合併查詢結果
select s.id from student as s untion
selecr distinct c.stu_id from score as c
17、查詢姓張或者姓王的同學的姓名、院系和考試科目及成績
select s.name as "姓名" ,department as "院系",c.c_name as "科目",c.grade as "成績"from score left join student on s.id = c.stu_id where name like 張% or name like 王%
18、查詢都是湖南的學生的姓名、年齡、院系和考試科目及成績
select s.name as "姓名" ,s.age as "年齡",s.department as "院系",c.c_name as "科目",c.grade as "成績"from score left join student on s.id = c.stu_id where address = "湖南%"
三、表名student_score,如圖
1、用一條 SQL 語句,查詢出每門課都大於 80 分的學生姓名。
select name from student_score group by name having min(score) > 80 ;
2、查詢出「張」姓學生中平均成績大於 75 分的學生資訊。
select * from student_score
where name in(
select name from student_score where name like '張%'
group by name having avg(score) > 75);