一、 單選題
1.查看employees表的表結構
哪個選項能夠統計出有李姓(LAST_NAME )員工的部門數量?
A:
SELECT COUNT(*) FROM employees WHERE last_name='李';
B:
SELECT COUNT(dept_id) FROM employees WHERE last_name='李';
C:
SELECT DISTINCT(COUNT(dept_id)) FROM employees WHERE last_name='李';
D:
SELECT COUNT(DISTINCT dept_id) FROM employees WHERE last_name='李';
E:
SELECT UNIQUE(dept_id) FROM employees WHERE last_name='李';
答案:D
解析:要查詢幾個部門裏有姓李的員工,首先要先查詢出姓李的員工所在的部門ID(dept_id),然後把用DISTINCT 去除重複的dept_id,再把結果計數(count)即可。
2.關於右外連接查詢的說法不正確的是:
A:兩表進行右外連接查詢和左外連接查詢查詢出的結果都是一樣的
B:右外連接查詢是以右側的表爲主表
C:右外連接查詢可以和左外連接查詢相互轉換
D: 右外連接查詢查詢時右表中的記錄會全部顯示
答案:A
解析:
左連接是已左邊表中的數據爲基準,若左表有數據右表沒有數據,則顯示左表中的數據右表中的數據顯示爲空。
左聯接的結果集包括 LEFT 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均爲空值。
右聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將爲左表返回空值。
3.子查詢會被在哪種情況下使用?()
A:創建數據組
B:按特定順序排序數據
C:將數據轉換爲不同的格式
D:基於未知條件檢索數據
參考答案:D
解析:
當where條件未知,但是知道與篩選條件相關的條件時,會用子查詢
4.在數據庫中,user爲用戶表,id爲用戶編號,name爲用戶名,age爲年齡字段。下面關於update user set name=‘tom’,age=21 where id=1語句說法正確的是:
A: 把用戶名爲tom的年齡改爲21
B: 把用戶編號爲1的記錄用戶名修改爲tom年齡修改爲21
C: 把所有用戶記錄的用戶名修改爲tom年齡修改爲21
D: 語法錯誤
參考答案:B
解析:
update user set name=‘tom’,age=21 where id=1語句語法沒有問題,意思爲: 把用戶編號爲1的記錄用戶名修改爲tom年齡修改爲21
5.emp的表結構如下:
用下面的SQL語句查詢數據庫,結果會以什麼順序排列?
SELECT empname,hire_date HIREDATE, salary
FROM EMP
ORDER BY hire_date;
A:隨機排列
B:以hire_date升序排列
C:以hire_date降序排列
D:以字母升序排列
E:以字母降序排列
參考答案:B
解析:
題目中的SQL語句是以hire_date排序的,默認不寫排序方式時結果以升序排列
6.關係模型的數據結構是()
A:數組結構
B:圖結構
C:二維結構
D:樹結構
E:鏈表結構
參考答案:C
解析:
關係模型的數據結構是二維結構
7.哪個SQL語句生成計算列SALARY * 12的別名—年薪?
A:
SELECT ename, salary*12 'Annual Salary' FROM employees;
B:
SELECT ename, salary*12 "Annual Salary" FROM employees;
C:
SELECT ename, salary*12 AS Annual Salary FROM employees;
D:
SELECT ename, salary*12 AS INITCAP("ANNUAL SALARY") FROM employees;
參考答案:B
解析:
作爲列別名的一些注意事項:
1、列別名最大長度爲30個字節(一個漢字2個字節)
2、列別名可以包含數字、小括號、特殊字符,有空格的多個單詞組成的別名必須用雙引號引起來
8.觀察下列表結構
經理要求你查詢出所有部門的信息,這些信息包括:員工的姓名,部門ID,部門名稱和部門所在城市,有可能部門沒有僱員,或者部門是尚未被分配到地點。下列選項能滿足要求的是:
A:
SELECT e.last_name, d.department_id,
d.department_name, l.city
FROM departments d
RIGHT OUTER JOIN employees e
ON d.department_id = e.department_id
RIGHT OUTER JOIN locations l
ON d.location_id = l.location_id;
B:
SELECT e.last_name, d.department_id,
d.department_name, l.city
FROM departments d
FULL OUTER JOIN employees e
ON d.department_id = e.department_id
FULL OUTER JOIN locations l
ON d.location_id = l.location_id;
C:
SELECT e.last_name, d.department_id,
d.department_name, l.city
FROM departments d
LEFT OUTER JOIN employees e
ON d.department_id = e.department_id
LEFT OUTER JOIN locations l
ON d.location_id = l.location_id;
D:
SELECT last_name, department_id,
department_name, city
FROM departments d
NATURAL JOIN employees e
NATURAL JOIN locations l;
參考答案:C
解析:
很明顯需要多表連接查詢,按要求需要將departments作爲基表
9.下面哪個是Oracle的普通管理員?
A:sys
B:system
C:scott
D:sh
參考答案:B
解析:
sys:超級管理員
system:普通管理員
scott:普通用戶
sh:海量數據用戶(大數據用戶)
10.觀察EMPLOYEES表的表結構
哪個SQL語句能夠查詢出最低工資低於5000,最高工資超過15000的部門的部門ID、部門員工的最低工資、最高工資?
A:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
WHERE MIN(salary) < 5000 AND MAX(salary) > 15000;
B:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
WHERE MIN(salary) < 5000 AND MAX(salary) > 15000
GROUP BY dept_id;
C:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
D:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
GROUP BY dept_id
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
E:
SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
GROUP BY dept_id, salary
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
參考答案:D
解析:
根據題意,首先要對部門分組,然後過濾出最低工資低於5000、最高工資高於15000的部門
11.having , where , group by 的正確執行順序是( )
A:having,where,group by
B:group by,having,where
C:where,having,group by
D:where ,group by,having
參考答案:D
解析:
查詢中用到的關鍵詞主要包含六個,並且他們的順序依次爲 select–from–where–group by–having–order by
12.有A表(5條記錄)和B表(7條記錄),執行"select * from A,B"以後,產生的記錄爲( )條
A:5
B:7
C:12
D:35
參考答案:D
13.您應該使用哪個子句排除組結果?
A:WHERE
B:HAVING
C:RESTRICT
D:GROUP BY
E:ORDER BY
參考答案:B
解析:
分組後再篩選用having
14.在下列哪種情況下你會選擇使用全連接查詢()
A:兩個表都具有NULL值。
B:您想要一個表中的所有不匹配的數據。
C:您想要兩個表中的所有匹配數據。
D:您需要兩個表中的所有不匹配的數據。
E:其中一個表具有比另一個更多的數據。
F:您想要一個表中匹配或不匹配的數據。
參考答案:D
解析:
全連接可以查詢出連接的表中匹配和不匹配的數據
15.以下SQL語句,能正確執行的是( )
A:
select e.department_id,sum(e.salary),round(avg(e.salary),2) "AvgSalary"
from employees e
order by e.department_id
group by e.department_id
B:
select e.department_id, e.salary
from employees e
group by e.department_id
order by e.department_id
C:
select sum(e.salary),round(avg(e.salary),2) "AvgSalary"
from employees e
group by e.department_id
order by e.department_id
D:
select e.department_id,sum(e.salary),round(avg(e.salary),2) "AvgSalary"
from employees e
group by e.department_id
order by e.department_id
參考答案:D
16.下面屬於DDL的是:
A:commit
B:create
C:select
D:update
參考答案:B
解析:
SQL語言共分爲四大類:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據控制語言DCL。
1、數據查詢語言DQL
數據查詢語言DQL基本結構是由SELECT子句,FROM子句,WHERE
子句組成的查詢塊:
SELECT <字段名錶>
FROM <表或視圖名>
WHERE <查詢條件>
2、數據操縱語言DML
數據操縱語言DML主要有三種形式:
1)插入:INSERT
2)更新:UPDATE
3)刪除:DELETE
3、數據定義語言(DDL Data Definition):create創建、alter更改、truncate截斷、drop刪除
4、DCL(Data Control Language,數據控制語言):用來授予或回收訪問數據庫的某種特權,並控制數據庫操縱事務發生的時間及效果。如:
grant:授權;
revoke:取消權限;
TCL(Transaction Control Language,事物控制語言):
用來對事務進行管理。 如:
COMMIT : 保存已完成事務動作結果
SAVEPOINT : 保存事務相關數據和狀態用以可能的回滾操作
ROLLBACK : 恢復事務相關數據至上一次COMMIT操作之後
17.基於下列兩張表
查詢出所有員工的所有信息,無論該員工是否被分配了部門
A:
SELECT last_name, department_nameFROM employees NATURAL JOIN departments;
B:
SELECT last_name, department_name FROM employees JOIN departments ;
C:
SELECT last_name, department_name
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);
D:
SELECT last_name, department_name
FROM employees e
RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id);
E:
SELECT last_name, department_name
FROM employees FULL JOIN departments
ON (e.department_id = d.department_id);
F:
SELECT last_name, department_name
FROM employees e LEFT OUTER
JOIN departments d ON (e.department_id = d.department_id);
參考答案:F
解析:
觀察employees表可以發現,有些員工並沒有被分配部門,所以想要查詢出所有員工的所有信息,只能用外連接,將employees作爲一個基表,departments沒有與之匹配的可以用null代替。
18.關於等值連接說法正確的是()
A:通過等值連接最多隻能關聯兩張表
B:通過等值連接最多隻能關聯兩列
C:在查詢語句中把等值連接的條件寫在select或from子句裏
D:通過等值連接可以關聯2張表,作爲關聯條件的列必須是主鍵和外鍵
E:通過等值連接可以關聯n張表(這些表都具有單列主鍵),但是最少要有n-1個關聯條件
參考答案:E
解析:
等值連接對關聯表的數量沒有限制,只要滿足關聯條件大於等於表的數量-1即可
19.SQL中,允許使用通配符進行字符串的匹配操作,其中%可以表示()
A:零個字符
B:一個字符
C:多個字符
D:以上答案都對
參考答案:D
20.對SQL語句的描述中,下列說法不正確的有
A: 使用關鍵字distinct消除冗餘
B: where用於指定篩選條件
C: sql關鍵字區分大小寫
D: 字符串比較按照字典排序
參考答案:C
解析:
sql不區分大小寫
二、 多選題
1.關於子查詢說法正確的有?(請選出兩項)
A:子查詢只應檢索一行。
B:子查詢可以檢索零個或多個行。
C:子查詢只能在SQL-select語句中使用。
D:子查詢不能被多於兩個級別嵌套。
E:子查詢不能在使用組函數的SQL查詢語句中使用。
F:當子查詢與外部SQL語句中的不等式比較運算符一起使用時,子查詢的SELECT子句中的列只能包含一列。
參考答案:BF
解析:
A.子查詢與普通的查詢一樣,可以查詢多行數據;
C.子查詢可以用在select、update、insert中;
D.子查詢的嵌套不受層數的限制;
E.子查詢的使用條件不受組函數的影響。
2.關於where和having子句說法正確的有?(請選出兩項)
A:WHERE子句可用於限制行和組。
B:WHERE子句只能用於限制行。
C:HAVING子句可用於限制行和組。
D:HAVING子句只能用於限制組。
E:如果查詢使用HAVING子句,則不能在查詢中使用WHERE子句。
F:HAVING子句不能在子查詢中使用。
參考答案:BD
解析:
where只能用於行數據的篩選;having只能用於組數據的篩選。
3.在哪種情況下,會用到外連接查詢?(請選出兩項)
A:要連接的表具有NOT NULL列。
B:要連接的表只有匹配的數據
C:要連接的列具有NULL值。
D:要連接的表只有不匹配的數據。
E:要連接的表具有匹配和不匹配的數據。
F:僅當表具有主鍵 - 外鍵關係時
參考答案:CE
解析:
外連接是在一個表的基礎上,匹配另一個表,當另一張表沒有與之匹配的數據時以空值代替。
4.關於子查詢下列敘述正確的有?(請選出三項)
A:單行子查詢只能檢索一個列和一行
B:單行子查詢只能檢索一行,但能檢索許多列
C:多行子查詢可以檢索多行、多列
D:多行子查詢結果可以被用來作爲>”運算符的比較項
E:單行子查詢可以使用IN運算符
F:多行子查詢結果可以使用“=”來和別的值比較
參考答案:BCE
解析:
E選項看似不正確,但是細想一下,IN的子句即使是一個值也沒問題,在這裏IN的效果無非和“=”是一樣的。
5.下列sql語句正確的有?(選出正確的兩項)
A:update user name=‘張三’,age=22 where id=1
B: update user set age=22,name=‘張三’ where id=1
C: update user set name=‘張三’,age=18 where id=1
D: update from user set name=‘張三’,age=20 where id=1
參考答案:BC
解析:
Update語句用於修改表中的數據。 語法: UPDATE 表名稱 SET 列名稱 = 新值,列名稱2 = 新值2… WHERE 列名稱 = 某值
6.根據下表
子查詢有效的是?(請選出三項)
A:
SELECT *
FROM employees
where salary > (SELECT MIN(salary)
FROM employees
GROUP BY department_id);
B:
SELECT *
FROM employees
WHERE salary = (SELECT AVG(salary)
FROM employees
GROUP BY department_id);
C:
SELECT distinct department_id
FROM employees
WHERE salary > ANY (SELECT AVG(salary)
FROM employees
GROUP BY department_id);
D:
SELECT department_id
FROM employees
WHERE salary > ALL (SELECT AVG(salary)
FROM employees
GROUP BY department_id);
E:
SELECT last_name
FROM employees
WHERE salary > ANY (SELECT MAX(salary)
FROM employees
GROUP BY department_id);
F:
SELECT department_id
FROM employees
WHERE salary > ALL (SELECT AVG(salary)
FROM employees
GROUP BY AVG(SALARY));
參考答案:CDE
解析:
A.選項子查詢的結果有三個,用>運算符會報錯;
B.選項子查詢的結果有三個,用=運算符會報錯;
C.>ANY(子查詢),>子查詢的某一個結果
D.同上
E.>All(子查詢),>子查詢的所有結果,即大於子查詢結果的最大值
F.錯在分組函數GROUP BY的值不能是組函數