扩展:数据库笔试题集合-2
第1章 數據庫章節
1.1 選擇
1.1.1 Having 子句的作用是?。
A.查詢結果的分組條件
B.組的篩選條件
C.限定返回的行的判斷條件
D.對結果集進行排序
1.1.2 最常用的一種基本數據模型是關系數據模型,它的表示采用(D)
A.樹 B.網絡
C.圖 D.二維表
1.1.3 數據庫系統的核心是(B)
A.數據模型 B.數據庫管理系統
C.數據庫 D.數據庫管理員
1.1.4 關系表中每一橫行稱為(A)
A.元組 B.字段
C.屬性 D.碼
1.1.5 數據庫管理系統維護中,最重要的是(數據維護)
程序維護 數據維護
編碼維護 硬件維護
1.1.6 以下那些不是 NoSQL?
mssql memcached mongodb
postgresql cassandra
couchdb redis
1.1.7 PHP 和 MYSQL 的聯合使用解決了(C)
A 在 proxy 上處理數據庫訪問問題
B 在 www 服務器上處理黑客的非法訪問問題
C 在 www 服務器上處理數據庫的訪問問題
D 在 sendmail 郵件系統是上處理數據庫的訪問問題
1.1.8 以下哪個端口為遠程登陸默認端口(3306)
1433 3389 33062
1.2 填空
1.2.1 如何通過 shell 登錄 mysql?(mysql -u -p -h -P)
1.2.2 數據庫觸發器能監控的觸發事件有 監視地點(table) 監視事件(insert/update/delete) 觸發時間(after/before) 觸發事件(insert/update/delete)
1.2.3 數據庫系統的組成部分有:硬件、軟件、數據庫、用戶、(數據庫管理員)
1.2.4 實現多臺交換機或集線器連接在一起只能通過級聯的方式(級聯復制)
1.2.5 遠程連接 mysql 數據庫的命令是什么__mysql -u -p -h -P__
1.2.6 當刪除一個數據庫后,僅能用__binlog , 物理備份__數據重建以前的數據庫中的數據。
1.2.7 SQL 中定義別名的三種方法是___列 AS 別名___列 別名___別名= 列___
1.2.8 mysql 服務器默認的監聽端口是:3306_ ,mysql 的配置文件是:_/etc/my.cnf__
1.3 簡答
1.3.1 簡述 mysql 單機安裝過程
1.在官網下載二進制包
3.初始化數據
4.啟動
1.3.2 mysql 登錄命令
mysql -u -p -h -P
1.3.3 說明數據庫內存結構中 SGA 和 PGA 的組成,以及這兩個內存區存放信息的區別?
SGA 區由數據緩沖區、共享池、重做日志緩沖區、大型池、JAVA 池構成;PGA 區由排序區、私有 SQL 區以及堆棧構成。
SGA 區是由 Oracle 分配的共享內存結構,包含一個數據庫實例共享的數據和控制信息。
當多個用戶 同時連接同一個實例時,SGA 區數據供多個用戶共享,所以 SGA 區又稱為共享全局區。用戶對數 據庫的各種操作主要在 SGA 區中進行。
該內存區隨數據庫實例的創建而分配,隨實例的終止而釋 放。PGA 區是在用戶進程連接數據庫,創建一個會話時,由 Oracle 為用戶分配的內存區域,
保存當 前用戶私有的數據和控制信息,因此該區又稱為私有全局區。每個服務器進程只能訪問自己的 PGA 區,所有服務器進程 PGA 區總和即為實例的 PGA 區的大小。
1.3.4 說明數據庫表空間的種類,以及不同類型表空間的作用
共享表空間,獨立表空間。
共享表空間是一個庫的數據都存放一個文件內,獨立表空間是一個表一個 ibd 與 frm 文件
1.3.5 mysql 表中的中文字體亂碼,原因可能是什么?如何修改 ?
字符集編碼問題
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
1.3.6 mysql 忘記密碼如何操作?
–skip-grant-tables ----> 跳過授權表(mysql.user)
–skip-networking ----> 跳過網絡用戶連接
1.3.7 請寫出目前市場上最常見的 2-5 種關系型數據庫廠家,并注明他們產品的最新版和你熟悉的或 者解除過的版本:
廠家:最新版本:熟悉的版本:接觸過的版本
mysql 5.6 5.7
Oracle、MsSQL(SQL Server)、PG
1.3.8 如何修改 mysql 的 root 密碼
set password for 用戶名@localhost = password(‘新密碼’);
1.3.9 請舉出幾個你熟悉的關系型數據庫管理系統和非關系型數據庫管理系統,非關系型數據庫相比 之下有什么不同之處(好處和不足)?
關系型:mysql,Oracle;
非關系型:redis,mongodb;
非關系快,操作簡單,有幾率丟數據
1.3.10 存儲過程與函數的區別?
存儲過程是用戶定義的一系列 sql 語句的集合,涉及特定表或其它對象的任務,用戶可以調用存儲 過程,
而函數通常是數據庫已定義的方法,它接收參數并返回某種類型的值并且不涉及特定用戶 表。
1.3.11 什么是視圖,游標是什么?
視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,視圖通常是 有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數據更容易, 相比多表查詢。
游標:是對查詢出來的結果集作為一個單元來有效的處理。游標可以定在該單元中的特定行,從結 果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用游標,但是需要逐條處理 數據的時候,游標顯得十分重要。
1.3.12 你對數據庫了解嗎?你們公司的數據庫是什么樣的?
高可用 MySQL 及主從架構與讀寫分離,使用的 MySQL
1.3.13 你們公司數據庫最大連接數是多少?
目前了解并發不到 2000
1.3.14 MySQL 數據庫 storage engine 中的 myisam、innodb 有什么差別?
myisam 是表級鎖,不支持事務,支持溫備
innodb 是行級鎖,支持事務,自動故障恢復,外鍵,熱備
1.3.15 請列舉幾個常見的 nosql db 你最熟悉那個?
redis memcached mongodb
1.3.16 簡述 where 和 having 的區別?
Where 子句是用來指定 “行” 的條件的,而 Having 子句是指定“組”的條件的
所以 Where 子句 = 指定行所對應的條件
所以 Having 子句 = 指定組所對應的條件
當在 Where 子句和 Having 子句中都可以使用的條件,從語句的執行效率來看,最好寫在 Where 子句中。
在使用 Count 函數等對表中的數據進行聚合操作時,DBMS 內部會進行排序處理,而排序操作會增加機器的負擔,減少排序的行數,可以增加處理速度。
使用 Where 子句指定條件時,由于排序之前就對數據進行了過濾,所以能夠減少排序的數據量。但是 Having 子句是在排序之后才對數據進行分組的,因此與前者相比,需要排序的數據量就要多得多。
第三,使用 Where 子句更具速度優勢的另一個理由是,可以對 Where 子句指定條件所對應的列創建 索引,這樣可以大幅提高處理速度。
第四,Where 子句中不能使用聚合函數,而 Having 子句中可以
第2章 SQL 語句
2.1 選擇
2.1.1 DELETE FROM S WHERE 年齡>60 語句的功能是( A )
A.從 S 表中徹底刪除年齡大于 60 歲的記錄
B.S 表中年齡大于 60 歲的記錄被加上刪除標記
C.刪除 S 表
D.刪除 S 表的年齡列
2.1.2 使用什么命令可以清除表中所有的內容? ( CD )
A.INSERT B.UPDATE
C.DELETE D.TRUNCATE
2.1.3 以下哪個表不用于 mysql 的權限管理( D )
A.HOST B.DB
C.COLUMNS_PRIV D.MANAGER
2.1.4 在 SOL 語法中,用于更新的命令是:( B )
A.INSERT B.UPDATE
C.DELETE D.CREATE
2.1.5 下面命令中不是數據庫用來 DML 操作是( D )
A.SELECT B.UPDATE
C.INSERT D.DROUP
2.1.6 SQL 語言中,刪除一個表的命令是(B )
A.DELETE B. DROP
C.CLEAR D.RI MORE
2.1.7 MySQL 語句中刪除一個表(假如表名稱是 t1)的命令是 C
A.rm table t1 B.delete table t1
C.drop table t1 D.truncate t1
2.1.8 下面哪個語句將 user 表的名稱變更為 userinfo?( A )
A.alter table user rename as userinfo
B.rename to userinfo from user
C.rename user to userinfo
D.rename user as userinfo
2.1.9 sql 語句中修改表結構的命令是 ( C )
A.modify table B.modify structure
C.alter table D.alter structure
2.1.10 帶有( B )子句的 select 語句可以在表的一行或多行上防止排他鎖
A.FOR INSERT B.FOR UPDATE
C.FOR DELETE D.FOR REFRESH
2.1.11 在 SQL 中,建立表用的命令是( B )
A.CREATE SCHEMA B.CREATE TABLE
C.CREATE VIEW D.CREATE INDEX
2.1.12 SQL 語言是( C )語言
A.層次數據庫 B.網絡數據庫
C.關系數據庫 D.非數據庫
2.1.13 SQL 語言中,條件年齡 BETWEEN 15 AND 35 表示年齡在 15 至 35 之間,且(A)
A.包括 15 歲和 35 歲
B.不包括 15 歲和 35 歲
C.包括 15 歲但不包括 35 歲
D.包括 35 歲但不包括 15 歲
2.1.14 在數據庫管理系統能實現對數據庫中的數據查詢、插入、修改和刪除,這類功能稱為( C )
A.數據定義功能 B.數據管理功能
C.數據操縱功能 D.數據控制功能
2.1.15 下列執行數據的刪除語法在運行時不會產生錯誤信息的選項是( B )
A.Delete * from pat_visit Where inp_no = ‘6’
B.Delete From pat_visit Where inp_no =‘6’
C.Delete pat_visit Where inp_no = ‘6’
D.Delete pat_visit Set inp_no = '6’7
2.2 填空
2.2.1 查詢病人表中的所有內容,并以住院號倒序排序 SQL 代碼為:Select * from pat_visit ___order by haoma ;desc
2.2.2 查詢一根病人的信息。但忘記了該病人的名字,只記得該病人姓“張”,而且名字中有一個 “美”字,SQL 代碼為:Select * from Pat_visit where name__like “張”____
2.2.3 在 SQL 中,用子句 DISTINCT 消除重復出現的元組。
2.2.4 標準的 SQL 語言語句類型可以分為 DML 、 DQL 、 DDL 、 DCL
2.2.5 SQL 語句中的查詢語句是 select(DQL)
2.2.6 字符轉換日期函數__select date_format(now(), ‘%Y-%m-%d’); ___
2.2.7 DML 包括_update_ _ delete _ _instert
2.2.8 在 SQL 中,建立數據庫的命令是______,建立視圖的命令是_______,建立索引的是________
create database 名字
create view v as (select * from table1) union all (select * from table2);
alter table student add index idx_name(name);
2.2.9 在 SQL 中,用___insert___命令向表中輸入數據,用__select___命令檢查和查詢表中的內容
select
select * from table_name;
2.2.10 在 SQL 中,用_update__命令可以修改表中的數據,用_alter____命令可以修改表的結構
2.2.11 在 SQL 中,Alter 命令可以有兩個選擇項,______子命令用于修改表的性質,____子命令用 于增加列
alter table change/modify
alter table add
2.2.12 在 SQL 中,用___delete__命令可以從表中刪除行,用_drop____命令可以從數據庫中刪除表
2.2.13 在 SQL 中,控制用保留字__NULL____,非空值用保留字___NOTNULL__
2.2.14 SELECT 命令中,表示條件表達式用____字句,分組用_____字句,排序用____字句
where
group by
order by
2.2.15 在 ORDER BY 字句的選項中,DESC 代表___大到小__序輸出,若省略時,代表__從小到大 __序輸出
2.2.16 合并多個查詢結果集,應使用 _union__關鍵字
2.3 簡答
2.3.1 在 mysql 客戶端查詢工具中,如何獲取當前的所有連接信息。
show full processlist
2.3.2 如何利用 crontab 定期執行 mysql 語句。
mysql -uroot -p -e ‘show databases;’
2.3.3 查看缺省引擎
select @@default_storage_engine;
2.3.4 列舉 SQL 常用命令:
use database
show processlist;
show tables;
show variables like ‘xx’;
select * from database.table_name where;
explian select * from table;
2.3.5 Mysql 查看 order 表的第 3 條到第 7 條的數據。
select * from order limit 2,5;
2.3.6 Mysql 授予用戶 admin 通過 IP 為 192.168.0.10/24 對數據庫的全部授權。
grant all on . to admin@‘192.168.0.%’ identified by ‘123’;
2.3.7 對 order 這個表的 name 字段數據進行 base64 編碼
select to_base64(name) from order
2.3.8 為什么說 group by 和 order by 操作的是代價高昂的?
在沒有合理索引情況下,需要大量 CPU 時間來做排序和分組。
2.3.9 寫分組瀏覽,分組求和,分組求最大值的 sql 語句,每個只能用 1 句話
瀏覽:select group_concat(字段名 1) from db group by 字段 2;
求和:select sum(字段名 1) from db group by 字段名 2;
最大值:select max(字段名 1) from db group by 字段名 2;
2.3.10 如何列出所有數據庫?(show databases;)
2.3.11 如何查看表內所有數據?(select * from table;)
2.3.12 如何知道表內行數?(select count(*) from table;)
2.3.13 用 SQL 實現以下統計結果
CSBH CSBH_COUNT
20 2
10 8
CSBH SUM_GJQJ
20 211.039900
10 871.317850
Select csbh,count(csbh) as CSBH_COUNT from table group by chbh;
Select csbh,sum(csbh) as CSBH_SUM from table group by chbh;
2.3.14 用 SQL 命令實現給主鍵添加索引
alter table a add primary key pri(id);
2.3.15 刪除如下表中年齡大于 30,且住址為 nj 的員工
表A user_table
Name age city
Tom 20 bj
Jimmy 50 nj
Zhou 33 sh
Jing 30 nj
Nanan 28 sh
create table user_table(
id int(11) auto_increment primary key
name varchar(200),
age int(11),
city varchar(200))
engine=innodb;
insert into user_table(name,age,city) values(‘Tom’,20,‘bj’),
(‘Jimmy’,50,‘nj’),
(‘Zhou’,33,‘sh’),
(‘Jing’,30,‘nj’),
(‘Nanan’,28,‘sh’);
delete from user_table where age>30 and city=‘nj’;
2.3.16 根據上題的表,計算出每個城市的人數和平均年齡
select city,count(name),AVG(age) from user_table group by city;
2.3.17 查詢下表平均成績大于 60 分的同學的學號 s_d)和平均成績(score)
表 Student 學生表
S_id Sname Ssex
1 Xiaoli 男
2 xiaowang 女
3 zhanglong 男
4 zhaohu 女 表 Course 課 程 表
C_id Cname T_id
1 語文 1
2 歷史 3
3 數學 2
4 政治 4 表 SC 成績表
sid C_id score
1 2 99
3 4 88
1 3 55
2 1 77
表 Teacher 教師表
T_id Tname
1 zhangsan
2 lisi
3 wangwu
4 zhaoliu
create table Student(
S_id int primary key auto_increment,
Sname char(100),
Ssex char(100))
engine=innodb;
insert into Student(S_id,Sname,Ssex) values(1,‘Xiaoli’,‘男’),
(2,‘xiaowang’,‘女’),
(3,‘zhanglong’,‘男’),
(4,‘zhaohu’,‘女’);
create table Course(
C_id int primary key auto_increment,
Cname char(100),
T_id int)
engine=innodb;
insert into Course(C_id,Cname,T_id) values
(1,‘語文’,1),
(2,‘歷史’,3),
(3,‘數學’,2),
(4,‘政治’,4);
create table SC(
sid int,
C_id int,
score int)
engine=innodb;
insert into SC(sid,C_id,score) values
(1,2,99),
(3,4,88),
(1,3,55),
(2,1,77);
create table Teacher(
T_id int auto_increment primary key,
Tname char(100))
engine=innodb;
insert into Teacher(T_id, Tname) values
(1,‘zhangsan’),
(2,‘lisi’),
(3,‘wangwu’),
(4,‘zhaoliu’);
mysql> select sid,c from (select sid,avg(score) c from SC group by sid) a where c>60;
±-----±--------+
| sid | c |
±-----±--------+
| 1 | 77.0000 |
| 2 | 77.0000 |
| 3 | 88.0000 |
±-----±--------+
查詢上所有同學的學號姓名、選課數、總成績
mysql> select s.sname,s.S_id,count(s.S_id),sum(c.score) from Student s join SC c on s.S_id=c.sid group by
s.S_id;
±----------±-----±--------------±-------------+
| sname | S_id | count(s.S_id) | sum(c.score) |
±----------±-----±--------------±-------------+
| Xiaoli | 1 | 2 | 154 |
| xiaowang | 2 | 1 | 77 |
| zhanglong | 3 | 1 | 88 |
±----------±-----±--------------±-------------+
2.3.18 有兩個表 A 和 B,表結構和字段分別為:
A:B
ID Name ID hobby
1 tim 1 football
2 Jimmy 2 tennis
3 John 3 soccer
請寫出 Select A.Name, B.Hobbt from A,B where A.id = B.id 的結果
Select A.Name,B.Hobbt from A join B on A.ID = B.ID;
Tim football
Jimmy tennis
John soccer
2.3.19 寫出 MySQL5.6 新建用戶 dev,授權 op 庫 test 表所有權限,任何地址的訪問權限 SQL
grant all on op.* to dev@’%’ identfied by ‘123’;
2.3.20 寫出一條 sql 語句:取出表 A 中滿足時間 2006 年 1 月 1 日至 2006 年 1 月 31 日的記錄(時間 字段為 time)
select * from A where time between ‘2006-01-01’ and ‘2006-01-31’;
2.3.21 寫出一條 SQL 語句:清除 A 表中的數據,但不刪除表
truncate table A;
2.3.22 查找在機關單位任職的人員姓名、性別、出生日期、單位名稱、并且查詢結果按照單位排 序;
select 姓名,性別,出生日期,單位名稱 from table order by 單位名稱;
2.3.23 查找性別為女的少數民族的非中共人員姓名、民族、出生日期;
select 姓名,民族,出生日期 from table where 性別=女 and 面貌!=中共人員
2.3.24 在事業單位查找具有研究生學歷博士學位的在任人員,要求顯示姓名、性別、出生日期、政 治面貌、單位名稱、職務名稱、批準任職日期,同時結果按照批準任職日期升序;
select 姓名,性別,出生日期,政治面貌,單位名稱,職務名稱,批準任職日期 from db1 order by 批準任職日期;
2.3.25 查詢在不同單位性質類別的單位任職的人數;
select count(*) from db group by 單位;
2.3.26 請寫出下列語句的執行結果:select replace (ltrim(rtrim(‘abc3453436’)),‘34’,‘abc’)
abcabc5abc3
2.3.27 寫一個查詢語句,從數據庫表中取出年齡 age 最大的十個人
select * from table order by age desc limit 10;
2.3.28 編寫 SQL 語句。統計計算機系 58 班每個月過生日的男生人數,井按月進行排序
表 dept (系):
dept_id(系編號),dept_name(系名稱)
表 class(班級):
class_id(班編號),dept_i(系編號),class_name(班名)
表 setdent(學生):
setdent_id(學生編號),class_id(班編號), sex(性別),birthday(生日)
select dept.dept_name,class.class_name,count(student_id) date_format(student.birthday,%m)
from dept
join calss
on dept.dept_id=class.dept_i
join student
on class.calss_id=student.class_id
where student.sex=’m’
group by date_format(student.birthday,%m)
order by date_format(student.birthday,%m)
desc ;
2.3.29 現有 T 表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE)
查詢 T 表中地址中包含“北京”的 SQL 語句
select * from T where ADDRESS like ‘%北京%’;
插入一條數據到 T 表中
insert into T(ID,NAME,ADDRESS,PHONE,LOGDATE) value(1,2,3,4,5);
請寫出將 T 表中第 3~5 行數據列出來的 SQL 語句
select * from T limit 3,5;
2.3.30 Mysql 創建數據庫的命令,創建表的命令,插入語句的命令?
create database
create table
insert into
2.3.31 數據庫中的兩個數據庫表,定義如下:
表名 1:cardApply
字段(字段名/類型/長度):
applyNo varchar 8; //申請單號(關鍵字)
applyDate date 8; //申請日期
state varchar 2; //申請狀態
表 2:cardApplyDetail
字段(字段名/類型/長度):
applyNo varchar 8; //申請單號(關鍵字)
name varchar 30; //申請人姓名
idCard varchar 5; //ID 卡號
applyNo varchar 8; //申請單號(關鍵字)
其中,兩個表的關聯字段為申請單號,依據上述信息完成 1-5 題目:
查詢 ID 卡號為 11111 的申請日期
Select applyNo , applyDate from cardApply where applyNo=’1111’
查詢同一個 ID 卡號有兩條以上記錄的 ID 卡號及記錄個數
Select applyNo,count(applyNo) from cardApply group by applyNo having count(applyNo)>2;
將 ID 卡號為 11111 的記錄在兩個表中的申請狀態均改為 02
Update cardApply set state=‘02’ where applyNo=‘1111’;
刪除 cardApplyDetall 表中所有姓李的記錄
Delete from cardApplyDetall where name like ‘李%’;
假如某一天有 10 個人申請,另外一天有 20 個人申請,還有一天有 30 個人申請,查詢出申請卡最多的那一天日期
Select applyDate,count(applyNo) from cardApply group by applyDate order by count(applyNo) desc limit1;
2.3.32 第一題
Student S# Sname Sage Ssex 學生表
Course C# t# Cname () 課程表
SC S# C# score 成績表
Teacher T# tname 教師表
寫出學生表建表語句
Create table student(S# int not null primary key auto_increment comment ‘學號’,
Sname varchar(64) not null comment ‘姓名’,
Sage tinyint unsigned not null default 0 comment ‘年齡’,
Ssex enum(‘m’,’f’) not null default ‘m’ comment ‘性別’
)engine=innodb charset=utf8 comment ‘學生表’;
查詢姓張的學生名單
Select * from student where sname like ‘張%’;
查詢所有同學的學號、姓名、選課數、總成績
Select s.s# ,s.sname,count(C#),sum(sc.score) from student as s
Join sc
On s.s#=sc.s#
Group by s.s#,s.sname
查詢選修“葉平”老師所授課程的學生中,成績最高的學生姓名及其成績
Select s.sname,sum(sc.socre) from student as s
Join sc
On s.s#=sc.s#
Join course as co
On sc.c#=co.c#
Join teacher as te
On co.t#=te.t#
Where te.tname=’葉平’
2.3.33 第二題
第一題中的教師表中哪個字段可以建立唯一索引?寫出建立唯一索引的語句
Alter table teacher add unique key idx(t#);
2.3.34 第三題
如何檢查第一題中學生表在數據庫中所占的空間大小
Select table_name,(index_length+avg_row_length*table_rows)/1024/1024 from information_schema.tables
Where table_name=’student’;
如何將第一題中的 4 個表進行備份,數據庫用戶、密碼為:admin/admin 數據庫名為:dbschool
SELECT CONCAT(“mysqldump -uroot -p123 “,table_schema,”
“,table_name,” >/tmp/”,table_schema,"_",table_name,".sql" )
FROM information_schema.tables
WHERE table_schema NOT IN(‘information_schema’,‘performance_schema’,‘sys’)
INTO OUTFILE ‘/tmp/bak.sh’ ;
2.3.35 部門表:t_dept(deptid ,deptname)工資表:t_salary(id,employeeid,deptid,salary)要求:查出員工的平均工資大于 3000 的部門名稱
Select td.deptname,avg(ts.salary) from t_dept as td join t_salary as ts
On td.deptid=ts.deptid
Group by td.deptname
Having avg(ts.salary)>3000;
2.3.36 student 表(Sno,Sname,Sage,Ssex)Course 表(Cno,Cname,Ccredit)SC 表(Sno, Cno,grade)
建表 student、course、SC(略)
查詢年齡小于 20 的學生學號、年齡,并顯示
Select s.sno,s.sage from student as s where s.sgae<20
查詢年齡不在 20-23(包括 20,23)的學生的成績
Select s.sname,s.sage,sc.score from student as s
Join sc
On s.sno=sc.sno
Where s.sage<20
Union all
Select s.sname,s.sage,sc.score from student as s
Join sc
On s.sno=sc.sno
Where s.sage>23
2.3.37 給出查詢表 A(ID,Name)中存在 ID 重復三次以上的記錄的 SQL 語句
Select id ,count(id) from a group by id having count(id)>3;
2.3.38 mysql 用戶名:root,密碼:123456,socket:/opt/mysql3306/mysql3306.sock,跑默認端口, 請使用一條命令更新該數據源 neutron 庫中的 ipallocations 表中的 ip_address 字段等于 10.4.182.36 的記錄為 202.113.14.92
mysql –uroot –p123456 –S /opt/mysql3306/mysql3306.sock –e “update neutron. Ipallocations set
ip_address=’ 202.113.14.92’ where ip_address=’ 10.4.182.36’”;
2.3.39 寫出以下 SQL 語句(涉及到表名和字段自定義)
查詢某一個表前 20 條記錄
Delete from t where id<21;
某公司從下個月起,每個人工資在原有基礎上上漲 10%
Update t set salary=salary+salary*.01 where date=date_format(now(),%m)+1;
刪除某個表中日期為 2017-01-01 以前的數據
Delete from t where date<’ 2017-01-01’;
新增一條記錄
Insert into t values(xxx)
備份數據庫
Mysqldump –uroot –pxxx –A –master-data=2 –single-transaction –R –E –triggers >/bak.sql
2.3.40 有三張表分別為客戶表 customers,賬戶表 accounts,用戶表 users
客戶表 customers (cust_id,cust_name,cust_opendate())
賬戶表 accounts(acc_id,acc_name,cust_id,acc_opendate(賬戶開通時間))
用戶表 users(user_id,user_name,cust_id,lost_login_date(用戶最后登錄時間))
每個客戶可以開通多個帳號,每個客戶有多個用戶,cust_id,acc_id,user_id 分別為客戶、賬戶、用戶的唯一標志,cust_opendate,acc_opendate,lost_login_date 類型為 date 按照要求用一條 sql 語句完成
統計每個月開通的客戶數
Select date_format(a. acc_opendate,%m),count(c. cust_id)
From customers as c join accounts as a
On c. cust_id=a. cust_id
Group by date_format(a. acc_opendate,%m)
列出上個月開通客戶列表,并輸出這些客戶所具有的賬戶和用戶數量
Select a.acc_name,count(u. user_id) from accounts as a
Join users as u
On a. cust_id=u. cust_id
Where date_format(a. acc_opendate,%m) = date_format(now(),%m)-1;
統計三個月內登錄過的客戶數量
Select lost_login_date,count(user_id) from users
Where date_format (lost_login_date,%m) in (date_format(now(),%m),date_format(now(),%m)-1,
date_format(now(),%m)-2)
統計老客戶今年開通賬戶的數量,老客戶是指今年以前開通的賬戶
Select cust_opendate,count(cust_id) from customers
Where date_format (cust_opendate,%y)> date_format (now(),%y)
2.3.41 SQL
表名 user
Name Tel Content Date
張三 13333663366 大專畢業 2006-10-11
張三 13612312331 本科畢業 2006-10-15
張四 021-55665566 中專畢業 2006-10-15
(a) 有一新記錄(小王 13254748547 高中畢業 2007-05-06)請用 SQL 語句新增至表中
Insert into user values(‘小王’,’ 13254748547’,’ 高中畢業’,’ 2007-05-06’)
(b) 請用 sql 語句把張三的時間更新成為當前系統時間
Update user set date=now() where name=’張三’;
? 請寫出刪除名為張四的全部記錄
Delete from user where name=’張四’
2.3.42 創建一個用戶并賦予權限
Grant all on . to root@’10.0.0.%’ indentified by ‘123’;
2.3.43 創建表空間 neuspace,數據文件命名為 neudata.dbf,存放在 d:\data 目錄下,文件大小為 200MB,設為自動增長,增量 5MB,文件最大為 500MB
Create tablespace neuspace datafile ‘d:\data\neudata.dbf’size 200MB AUTOEXTEND ON NEXT 5M MAXSIZE 500M;
2.3.44 以系統管理員身份登錄,創建賬號 tom,設置 tom 的默認表空間為 neuspace.為 tom 分配 connect 和 resource 系統角色,獲取基本的系統權限。然后為 tom 分配對用戶 scott 的表 emp 的 select 權限和對 SALARY,MGR 屬性的 update 權限
Create user tom identified by tom default tablespace account;
grant connect, resource to tom;
grant select on scott.emp to tom
grant update on SALARY.MGR to tom
2.3.45 按如下要求創建 class
屬性 類型(長度) 默認值 約束 含義
CLASSNO 數值(2) 無 主鍵 班級編號
CNAME 變長字符(10)無 非空 班級名稱
Create table class(classno int(2) not null primary key auto_increment comment ‘班級編號’,
CNAME varchar(10) not null comment ‘班級名稱’)
2.3.46 學生表有四個字段:學號、姓名、年級、學分,統計出按年級降序同名同姓的數據情況(寫 出 sql 語句)
Select name ,count(name) from user group by name order by class desc ;
2.3.47 在表 class 的 CNAME 屬性上創建索引 class_sname_idx
Alter table class add index class_sname_idx(CNAME);
2.3.48 sql 類
學生信息表
姓名(Name) 學號(Code)
張三 001
李四 002
馬五 003
甲六 004
考試信息表
學號 學科 成績
001 數學 80
002 數學 75
001 語文 90
002 語文 80
001 英語 90
002 英語 85
003 英語 80
004 英語 70
查詢各科成績的平均分,顯示欄位為學科、平均分,sql 怎么寫
Select a.學科,avg(b.成績) from student as a join course b on a.id=b.code group by a.學科;
查詢所有學生各科成績,顯示欄位為姓名、學號、學科、成績,并以學號與學科排序,沒有成績的學生也需要列出,sql 怎么編寫
Select a.name,a.code,b.學科,b.成績 from student as a join course as b on a.code=b.id order by a.學號,b.學科
查詢出單科成績最高的,顯示欄位為:姓名、學號、學科、成績,sql 怎么編寫
Select a.name,a.code,b.id,b. 學科,max(b.成績) from from student as a join course as b on a.code=b.id Group by b. 學科
列出每位學生各科成績,要求輸出格式:姓名、學號、語文成績、數學成績、英語成績,sql 怎么寫
Select a.name,a.code,b.id,
Case when b.學科=’ 語文’ then b.成績 end as ‘語文成績’,
Case when b.學科=’ 數學’ then b.成績 end as ‘數學成績’,
Case when b.學科=’ 英語’ then b.成績 end as ‘英語成績’,
from student as a join course as b on a.code=b.id
Group by 姓名,學號;
2.3.49 不借助第三方工具,如何獲得 SQL 的執行計劃?
explain select xxx from TAB where xxx
總結
以上是生活随笔為你收集整理的扩展:数据库笔试题集合-2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity网络教程翻译(三)多人游戏大厅
- 下一篇: MySQL性能优化[实践篇]-复合索引实