SQL 笔试题
https://blog.csdn.net/codema/article/details/80915311
常見的SQL筆試題和面試題(上):經典50題
https://www.cnblogs.com/guxia/p/7878657.html
必會SQL筆試題
(1)表名:購物信息
購物人 商品名稱 數量
A 甲 2
B 乙 4
C 丙 1
A 丁 2
B 丙 5
……
給出所有購入商品為兩種或兩種以上的購物人記錄
答:select * from 購物信息 where 購物人 in (select 購物人 from 購物信息 group by 購物人 having count(*) >= 2);
(2)表名:成績表
姓名 課程 分數
張三 語文 81
張三 數學 75
李四 語文 56
李四 數學 90
王五 語文 81
王五 數學 100
王五 英語 49
給出成績全部合格的學生信息(包含姓名、課程、分數),注:分數在60以上評為合格
答:select * from 成績表 where 姓名 not in (select distinct 姓名 from 成績表 where 分數 < 60)
或者:
select * from 成績表 where 姓名 in (select 姓名 from 成績表 group by 姓名 having min(分數) >=60)
(3)表名:商品表
名稱 產地 進價
蘋果 煙臺 2.5
蘋果 云南 1.9
蘋果 四川 3
西瓜 江西 1.5
西瓜 北京 2.4
……
給出平均進價在2元以下的商品名稱
答:select 名稱 from 商品表 group by 名稱 having avg(進價) < 2
(4)表名:高考信息表
準考證號 科目 成績
語文 119
數學 108
物理 142
化學 136
物理 127
數學 149
英語 110
語文 105
英語 98
化學 129
……
給出高考總分在600以上的學生準考證號
答:select 準考證號 from 高考信息表 group by 準考證號 having sum(成績) > 600
(5)表名:高考信息表
準考證號 數學 語文 英語 物理 化學
108 119 98 127 136
149 105 110 142 129
……
給出高考總分在600以上的學生準考證號
答:select 準考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600
(四部分)
(一)表名:club
id gender age
M 19
F 30
F 27
F 16
M 32
……
查詢出該俱樂部里男性會員和女性會員的總數
答:select gender,count(id) from club group by gender
(二)表名:team
ID(number型) Name(varchar2型)
a
b
b
a
c
c
要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的
例如:刪除后的結果應如下:
ID(number型) Name(varchar2型)
a
b
c
請寫出SQL語句。
delete from team where id not in (select min(id) from team group by name)
(三)表名:student
name course score
張青 語文 72
王華 數學 72
張華 英語 81
張青 物理 67
李立 化學 98
張燕 物理 70
張青 化學 76
查詢出“張”姓學生中平均成績大于75分的學生信息
答:select * from student where name in (select name from student
where name like ‘張%’ group by name having avg(score) > 75)
1.一道SQL語句面試題,關于group by表內容:
info 表
date result
2005-05-09 win
2005-05-09 lose
2005-05-09 lose
2005-05-09 lose
2005-05-10 win
2005-05-10 lose
2005-05-10 lose
如果要生成下列結果, 該如何寫sql語句?
win lose
2005-05-09 2 2
2005-05-10 1 2
答案:
(1) select date, sum(case when result = “win” then 1 else 0 end) as “win”, sum(case when result = “lose” then 1 else 0 end) as “lose” from info group by date;
(2) select a.date, a.result as win, b.result as lose
from
(select date, count(result) as result from info where result = “win” group by date) as a
join
(select date, count(result) as result from info where result = “lose” group by date) as b
on a.date = b.date;
2.表中有A B C三列,用SQL語句實現:當A列大于B列時選擇A列否則選擇B列,當B列大于C列時選擇B列否則選擇C列
select (case when a > b then a else b end), (case when b > c then b else c end) from table;
3.請取出tb_send表中日期(SendTime字段)為當天的所有記錄? (SendTime字段為datetime型,包含日期與時間)
select * from tb where datediff(dd,SendTime,getdate())=0
4.有一張表,里面有3個字段:chinese,math,english。其中有一條記錄chinese 70分,math 80分,english 58分,請用一條sql語句查詢出所有記錄并按以下條件顯示出來(并寫出您的思路):
大于或等于80表示excellent,大于或等于60表示pass,小于60分表示fail。
顯示格式: 以上面的chinese 70分,math 80分,english 58分 chinese math english pass excellent failselect (case when chinese >= 80 then “excellent” when chinese >= 60 then “pass” else “fail” end) as chinese,
(case when math >= 80 then “excellent” when math >= 60 then “pass” else “fail” end) as math,
(case when english >= 80 then “excellent” when english >= 60 then “pass” else “fail” end) as english
from grade;
5.請用一個sql語句得出結果
從table1,table2中取出如table3所列格式數據,注意提供的數據及結果不準確,只是作為一個格式向大家請教。
如使用存儲過程也可以。
table1
月份mon 部門dep 業績yj
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8
table2
部門dep 部門名稱dname
國內業務一部 國內業務二部 國內業務三部 國際業務部
table3 (result)
部門dep 一月份 二月份 三月份
10 null null 10 8 null null 5 8 null null 9
select t1.dep,
sum(case when mon = 1 then yj else 0 end) as jun,
sum(case when mon = 2 then yj else 0 end) as feb,
sum(case when mon = 3 then yj else 0 end) as mar
from
t1 right join t2 on t1.dep = t2.dep
group by t1.dep;
題目一、
有兩個表:
TableX有三個字段Code、 Name、 Age、 其中Code為主鍵;
TableY有三個字段Code、 Class、Score, 其中Code + Class 為主鍵。兩表記錄如下:
Code Name Age Code Class Score
張三 22 97001 數學 80
趙四 21 97002 計算機 59
張飛 20 97003 計算機 60
李五 22 97004 數學 55
1、請寫出SQL,找出所有姓張的學生,并按年齡從小到大排列;
2、請寫出SQL,取出計算機科考成績不及格的學生;
3、通過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果
4、通過外聯接,取出每個學生的Name、Class、Score、請寫SQL輸出結果
5、請寫SQL,在TableX 表中增加一條學生記錄(學號:97005 姓名:趙六 年齡:20);
6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;
7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件;
題目二、
有兩個表定義如下:
create tableindividual (
firstname varchar2(20) not null
lastname vatchar2(20) not null
birthdate date
gender varchar2(1)
initial number(2)
farorite varchar2(6)
type varchar2(8)
);
在此表中建唯一索引 firstname + lastname
create table chile_detail(
firstname varchar2(20)
lastname varchar2(20)
cname varchar2(8)
coment varchar2(2)
type varchar2(8)
);
1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)為 1990年10月2日 出生的人的記錄
2、寫一修改語句實現: 將表child_detail 中的type 為 “kkd” 的記錄的Cname 值為“declear”,coment的值為“02”
TableX有三個字段Code、 Name、 Age、 其中Code為主鍵;
TableY有三個字段Code、 Class、Score, 其中Code + Class 為主鍵。兩表記錄如下:
Code Name Age Code Class Score
張三 22 97001 數學 80
趙四 21 97002 計算機 59
張飛 20 97003 計算機 60
李五 22 97004 數學 55
1、請寫出SQL,找出所有姓張的學生,并按年齡從小到大排列;
select * from TableX where name like ‘張%’ order by age
2、請寫出SQL,取出計算機科考成績不及格的學生;
select * from tableX where code in (select code from tableY WEHRE class=‘計算機’ and score <60)
3、通過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果
select a.name,b.class,b.score from tableX a,tableY b where a.code=b.code
4、通過外聯接,取出每個學生的Name、Class、Score、請寫SQL輸出結果
select a.name,b.class,b.score from tableX full join tableY on a.code=b.code
5、請寫SQL,在TableX 表中增加一條學生記錄(學號:97005 姓名:趙六 年齡:20);
insert into tablex values(‘97005’,‘趙六’,20)
6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;
update tablex set age=21 where code=‘97004’
7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件;
delete tablex where code not in (select code from tabley)
DELETE TABLEX WHERE CODE IN (
SELECT CODE FROM TABLEX WHERE CODE NOT IN(SELECT Y.CODE FROM TABLEY))
但看了其它人的寫法,感覺自己寫的不簡潔,學習一下.
1、請寫出SQL,找出所有姓張的學生,并按年齡從小到大排列;
SELECT * FROM TableX WHERE Name LIKE ‘張%’ ORDER BY Age;
2、請寫出SQL,取出計算機科考成績不及格的學生;
SELECT * FROM TableX x, TableY y WHERE x.Code = y.Code AND Class = ‘計算機’ AND Score < 60;
3、通過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果
SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code
4、通過外聯接,取出每個學生的Name、Class、Score、請寫SQL輸出結果
Left Out:SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code(+)
Right Out: SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code(+) = y.Code
Full Out:Left join union all right join
5、請寫SQL,在TableX 表中增加一條學生記錄(學號:97005 姓名:趙六 年齡:20);
INSERT INTO TableX(Code, Name, Age) VALUES(‘97005’,‘趙六’,20);
COMMIT;
6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;
UPDATE TableX SET Age = 21 WHERE Code in (SELECT Code FROM TableX WHERE Name = ‘李五’)
7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件;
DELETE FROM TableX WHERE Code Not in (SELECT Code FROM TableY WHERE NVL(Score,0) = 0)
在此表中建唯一索引 firstname + lastname
CREATE UNIQUE INDEX NAME_UNINDEX ON individual(firstname,lastname)
1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)為 1990年10月2日 出生的人的記錄
DELETE FROM individual WHERE TO_CHAR(birthdate,‘YYYY-MM-DD’) = ‘1990-10-02’;
COMMIT;
2、寫一修改語句實現: 將表child_detail 中的type 為 “kkd” 的記錄的Cname 值為“declear”,coment的值為“02”
UPDATE chile_detail SET Cname = ‘declear’, coment = ‘02’
WHERE type = ‘kkd’;
COMMIT;
http://www.51testing.com/?uid-165528-action-viewspace-itemid-99563
http://www.cnblogs.com/zemliu/archive/2012/10/09/2717629.html
http://bbs.csdn.NET/topics/270058476
[sql] view plain copy
一 單詞解釋(2分/個) 34
Data 數據Database 數據庫RDBMS 關系數據庫管理系統GRANT 授權
REVOKE取消權限DENY 拒絕權限DECLARE 定義變量PROCEDURE存儲過程
Transaction事務TRIGGER觸發器繼續 continue唯一 unqiue
主鍵 primary key標識列 identity外鍵 foreign kdy 檢查 check
約束 constraint
二 編寫SQL語句(5分/題)50
Create table stu (學號 int ,
姓名 varchar(8),
年齡 int,
性別 varchar(4),
家庭地址 varchar(50),
聯系電話 int
);
Alter table stu add 學歷 varchar(6);
Alter table stu drop column 家庭地址
學號 姓名年齡性別聯系電話學歷
1A22男123456小學
2B21男119中學
3C23男110高中
4D18女114大學
Insert into stu values(1,’A’,22,’男’,123456,’小學’)
Insert into stu values(2,’B’,21,’男’,119,’中學’)
Insert into stu values(3,’C’,23,’男’,110,’高中’)
Insert into stu values(4,’D’,18,’女’,114,’大學’)
修改學生表的數據,將電話號碼以11開頭的學員的學歷改為“大專”
Update stu set 學歷=’大專’ where 聯系電話 like ‘11%’
Delect from stu where 性別=’男’ and 姓名 like ‘c%’
Select 姓名,學號 from stu where 年齡<22 and 學歷=’大專’
Select top 25 percent * from stu
Select 姓名,性別 from stu order by 年齡 desc
Select avg(年齡) from stu group by 性別
三 填空(3分/題) 36
提交事務:commit Transction
回滾事務:rollback Transction
四 問答題(5分/題)60
主要數據文件(.mdf) 包含數據用戶收集的信息,還有數據庫其他相關的信息,
日志數據文件(.ndf) 存放用戶對數據庫的增刪改查的信息,用于備份恢復使用
TRUNCATE TABLE: 提供了一種刪除表中所有記錄的快速方法
Delete from 表名:可以刪除表的一個或多條記錄
AVG:求平均值
SUM:求和
MAX:求最大值
MIN:求最小值
COUNT():返回所有行數
COUNT返回滿足指定條件的記錄值
inner join 是什么意思?作用是什么?寫出基本語法結構
INNER JOIN 內聯接,用于返回兩個表中要查詢的列數據通信
Select * from 表名1 inner join 表名2 on 條件表達式
Left outer join 左向外聯接
Right outer join 右向外聯接
Full outer join 全聯接
了查詢分三種基本子查詢: 1.使用in 查詢返回一列或更多值
2.比較運算符,返回單個值勤做為外查詢的參數
3.用exists 查詢時相當于進行一次數據測試
實現實體完整性: 主鍵約束 唯一約束 標識列
實現域完整性: 默認值約束 檢查約束 非空屬性
引和完整性: 外鍵引用
視圖是可以更新的,視圖只是基于基本表上的虛擬表,對視圖的更新會直接影響到實際表
Dbo : 是數據庫的擁有者,對數據庫擁有所有操作的權限
Sysadmin : 可以對SQL SERVER執行任何活動
Public : 自動創建的,能捕獲數據庫中用戶的所有默認權限
動態游標與靜態游標相對,反映結果集中所做的所有更改,
靜態游標的結果集在游標打開時,建立在tempdb中,總按照游標打開時的原樣顯示
存儲過程:是一組預先編譯好的T-SQL代碼
在創建存儲過程時經過了語法和性能優化,執行不必重復的步驟,使用存儲過程可提高運行效率
12)什么是Inserted 表 ?什么是Deleted 表?
Inserted表用于存儲inserted和update語句影響的副本
Deleted 表用于存儲delect 和 update語句影響的行的副本
總結
- 上一篇: IP头、TCP头、UDP头详解以及定义
- 下一篇: CSS单位和颜色