SQL笔试题
- 格式:doc
- 大小:27.50 KB
- 文档页数:5
面试sql笔试题目
好的,以下是一份可能的SQL笔试题目:
1. 写出查询所有学生成绩的SQL语句。
2. 写出查询学生表中年龄大于等于18岁的学生记录的SQL语句。
3. 写出查询学生表中年龄小于18岁且姓“张”的学生记录的SQL语句。
4. 写出查询学生表中年龄等于18岁且姓“李”的学生记录的SQL语句。
5. 写出查询学生表中年龄等于18岁或姓“李”的学生记录的SQL语句。
6. 写出查询学生表中年龄等于18岁或姓“李”且成绩大于等于90分的学生记录的SQL语句。
7. 写出查询学生表中年龄等于18岁或姓“李”且成绩大于等于90分,并按成绩从高到低排序的学生记录的SQL语句。
8. 写出查询学生表中年龄等于18岁或姓“李”且成绩大于等于90分,并取出前5条记录的SQL语句。
9. 写出查询学生表中年龄等于18岁或姓“李”且成绩大于等于90分,并取出最后一条记录的SQL语句。
10. 写出查询学生表中年龄等于18岁或姓“李”且成绩大于等于90分,并取出第3条至第5条记录的SQL语句。
实施工程师sql笔试题一、选择题1. 下列哪个SQL命令用于查询表中的数据?A. CREATEB. INSERTC. SELECTD. UPDATE答案:C2. 在SQL中,如何表示“非”逻辑?A. NOTB. ANDC. ORD. XOR答案:A3. 用于删除表中满足特定条件的数据的SQL命令是什么?A. DELETEB. DROPC. TRUNCATED. REMOVE答案:A4. 在SQL中,如何为列设置默认值?A. DEFAULTB. SETC. VALUESD. ASSIGN答案:A5. 下列哪个函数用于计算字段中非空值的平均数?A. AVG()B. MEAN()C. SUM()D. COUNT()答案:A二、填空题1. 在SQL中,使用________关键字可以创建一个新的数据库表。
答案:CREATE TABLE2. 若要将数据插入到指定的列中,应使用________关键字。
答案:INSERT INTO ... (column_names)3. 当需要从多个表中查询数据时,应使用________关键字来指定表之间的关系。
答案:JOIN4. 若要对查询结果进行排序,可以使用________函数。
答案:ORDER BY5. 使用________关键字可以创建一个数据库视图。
答案:CREATE VIEW三、简答题1. 请简述SQL中的主键和外键的区别。
答:主键是表中用于唯一标识每条记录的列或列组合,它不能包含NULL值,并且表中的每一行必须有唯一的主键值。
外键则是一个表中的列或列组合,它是另一个表的主键的引用,用于建立表之间的关联关系。
外键可以包含NULL值,它用于确保引用的数据的完整性。
2. 解释SQL中的事务是什么,以及它的ACID属性。
答:事务是一系列SQL命令的集合,它们作为一个整体被执行,要么全部成功,要么全部失败。
事务的ACID属性指的是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
SQL笔试I经典44题及答案解析~今天这篇文章,是关于44道经典SQL测试题:01建表语句createtableStudent(sidvarchar(10),snamevarchar(10),s agedatetime,ssexnvarchar(10));insertintoStudentvalues('01','赵雷','1990-01-01','男');insertintoStudentvalues('02','钱电','1990-12-21','男');insertintoStudentvalues('03','孙风','1990-05-20','男');insertintoStudentvalues('04','李云','1990-08-06','男');insertintoStudentvalues('05','周梅','1991-12-01','女');insertintoStudentvalues('06','吴兰','1992-03-01','女');insertintoStudentvalues('07','郑竹','1989-07-01','女');insertintoStudentvalues('08','王菊','1990-01-20','女');createtableCourse(cidvarchar(10),cnamevarchar(10),ti dvarchar(10));insertintoCoursevalues('01','语文','02');insertintoCoursevalues('02','数学','01');insertintoCoursevalues('03','英语','03');createtableTeacher(tidvarchar(10),tnamevarchar(10));insertintoTeachervalues('01','张三'); insertintoTeachervalues('02','李四'); insertintoTeachervalues('03','王五');createtableSC(sidvarchar(10),cidvarchar(10),scoredeci mal(18,1));insertintoSCvalues('01','01',80); insertintoSCvalues('01','02',90); insertintoSCvalues('01','03',99); insertintoSCvalues('02','01',70); insertintoSCvalues('02','02',60); insertintoSCvalues('02','03',80); insertintoSCvalues('03','01',80); insertintoSCvalues('03','02',80); insertintoSCvalues('03','03',80); insertintoSCvalues('04','01',50); insertintoSCvalues('04','02',30); insertintoSCvalues('04','03',20);insertintoSCvalues('05','01',76);insertintoSCvalues('05','02',87);insertintoSCvalues('06','01',31);insertintoSCvalues('06','03',34);insertintoSCvalues('07','02',89);insertintoSCvalues('07','03',98);02表结构预览--学生表Student(SId,Sname,Sage,Ssex)--SId学生编号,Sname学生姓名,Sage出生年月,Ssex学生性别--课程表Course(CId,Cname,TId)--CId课程编号,Cname课程名称,TId教师编号--教师表Teacher(TId,Tname)--TId教师编号,Tname教师姓名--成绩表SC(SId,CId,score)--SId学生编号,CId课程编号,score分数1.查询“01”课程比“02”课程成绩高的所有学生的学号;selectdistinctt1.sidassidfrom(select*fromscwherecid='01')t1leftjoin(select*fromscwherecid='02')t2ont1.sid=t2.sidwheret1.score>t2.score2.查询平均成绩大于60分的同学的学号和平均成绩;selectsid,avg(score)fromscgroupbysidhavingavg(score)>603.查询所有同学的学号、姓名、选课数、总成绩selectstudent.sidassid,sname,count(distinctcid)course_cnt,sum(score)astotal_scorefromstudentleftjoinsconstudent.sid=sc.sidgroupbysid,sname4.查询姓“李”的老师的个数;selectcount(distincttid)asteacher_cnt fromteacherwheretnamelike'李%'5.查询没学过“张三”老师课的同学的学号、姓名;selectsid,snamefromstudentwheresidnotin(selectsc.sidfromteacherleftjoincourseonteacher.tid=course.tidleftjoinsconcourse.cid=sc.cidwhereteacher.tname='张三')6.查询学过“01”并且也学过编号“02”课程的同学的学号、姓名;selectt.sidassid,snamefrom(selectsid,count(if(cid='01',score,null))ascount1,count(if(cid='02',score,null))ascount2fromscgroupbysidhavingcount(if(cid='01',score,null))>0andcount(if(cid ='02',score,null))>0)tleftjoinstudentont.sid=student.sid7.查询学过“张三”老师所教的课的同学的学号、姓名;selectstudent.sid,snamefrom(selectdistinctcidfromcourseleftjointeacheroncourse.tid=teacher.tidwhereteacher.tname='张三')courseleftjoinsconcourse.cid=sc.cidleftjoinstudentonsc.sid=student.sidgroupbystudent.sid,sname8.查询课程编号“01”的成绩比课程编号“02”课程低的所有同学的学号、姓名;selectt1.sid,snamefrom(selectdistinctt1.sidassidfrom(select*fromscwherecid='01')t1leftjoin(select*fromscwherecid='02')t2ont1.sid=t2.sidwheret1.score>t2.score)t1leftjoinstudentont1.sid=student.sid9.查询所有课程成绩小于60分的同学的学号、姓名;selectt1.sid,snamefrom(selectsid,max(score)fromscgroupbysidhavingmax(score<60))t1leftjoinstudentont1.sid=student.sid10.查询没有学全所有课的同学的学号、姓名;selectt1.sid,snamefrom(selectcount(cid),sidfromscgroupbysidhavingcount(cid)<(selectcount(distinctcid)fromcourse) )t1leftjoinstudentont1.sid=student.sid11.查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名;distinctsc.sidfrom(selectcidfromscwheresid='01')t1leftjoinscont1.cid=sc.cid12.查询和"01"号的同学学习的课程完全相同的其他同学的学号和姓名#注意是和'01'号同学课程完全相同但非学习课程数相同的,这里我用左连接解决这个问题selectt1.sid,snamefrom(sc.sid,count(distinctsc.cid)from(selectcidfromscwheresid='01')t1#选出01的同学所学的课程leftjoinscont1.cid=sc.cidgroupbysc.sidhavingcount(distinctsc.cid)=(selectcount(distinctcid)fr omscwheresid='01'))t1leftjoinstudentont1.sid=student.sidwheret1.sid!='01'13.把“SC”表中“张三”老师教的课的成绩都更改为此课程的平均成绩;#暂跳过update题目14.查询没学过"张三"老师讲授的任一门课程的学生姓名selectsnamefromstudentwheresidnotin(selectdistinctsidfromscleftjoincourseonsc.cid=course.cidleftjointeacheroncourse.tid=teacher.tidwheretname='张三')15.查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩selectt1.sid,sname,avg_scorefrom(selectsid,count(if(score<60,cid,null)),avg(score)asavg_scorefromscgroupbysidhavingcount(if(score<60,cid,null))>=2)t1leftjoinstudentont1.sid=student.sid16.检索"01"课程分数小于60,按分数降序排列的学生信息selectsid,if(cid='01',score,100)fromscwhereif(cid='01',score,100)<60orderbyif(cid='01',score,100)desc17.按平均成绩从高到低显示所有学生的平均成绩selectsid,avg(score)fromscgroupbysidorderbyavg(score)desc18.查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率selectsc.cid,cname,max(score)asmax_score,min(score)asmin_score,avg(score)asavg_score,count(if(score>=60,sid,null))/count(sid)aspass_ratefromscleftjoincourseonsc.cid=course.cidgroupbysc.cid19.按各科平均成绩从低到高和及格率的百分数从高到低顺序#这里先按照平均成绩排序,再按照及格百分数排序,selectcid,avg(score)asavg_score,count(if(score>=60,sid,null))/count(sid)aspass_rate fromscgroupbycidorderbyavg_score,pass_ratedesc20.查询学生的总成绩并进行排名selectsid,sum(score)assum_scorefromscgroupbysidorderbysum_scoredesc21.查询不同老师所教不同课程平均分从高到低显示selecttid,avg(score)asavg_scorefromcourseleftjoinsconcourse.cid=sc.cidgroupbytidorderbyavg_scoredesc22.查询所有课程的成绩第2名到第3名的学生信息及该课程成绩selectsid,rank_num,score,cidfrom(selectrank()over(partitionbycidorderbyscoredesc)asrank_nu m,sid,score,cidfromsc)twhererank_numin(2,3)23.统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比selectsc.cid,cname,count(if(scorebetween85and100,sid,null))/count(sid),count(if(scorebetween70and85,sid,null))/count(sid),count(if(scorebetween60and70,sid,null))/count(sid),count(if(scorebetween0and60,sid,null))/count(sid)fromscleftjoincourseonsc.cid=course.cid groupbysc.cid,cname24.查询学生平均成绩及其名次selectsid,avg_score,rank()over(orderbyavg_scoredesc) from(selectsid,avg(score)asavg_scorefromscgroupbysid)t25.查询各科成绩前三名的记录selectsid,cid,rank1from(selectcid,sid,rank()over(partitionbycidorderbyscoredesc)asrank1 fromsc)twhererank1<=326.查询每门课程被选修的学生数selectcount(sid),cidfromscgroupbycid27.查询出只选修了一门课程的全部学生的学号和姓名selectsidfromscgroupbysidhavingcount(cid)=128.查询男生、女生人数selectssex,count(distinctsid)fromstudentgroupbyssex 29.查询名字中含有"风"字的学生信息selectsid,snamefromstudentwheresnamelike'%风%'30.查询同名同性学生名单,并统计同名人数selectssex,sname,count(sid)fromstudentgroupbyssex,snamehavingcount(sid)>=231.查询1990年出生的学生名单(注:Student表中Sage列的类型是datetime)selectsid,sname,sagefromstudentwhereyear(sage)=199032.查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列selectcid,avg(score)asavg_scorefromscgroupbycidorderbyavg_score,ciddesc33.查询不及格的课程,并按课程号从大到小排列selectcid,sid,scorefromscwherescore<60orderbyciddesc,sid34.查询课程编号为"01"且课程成绩在60分以上的学生的学号和姓名;selectsid,cid,scorefromscwherecid='01'andscore>6035.查询选修“张三”老师所授课程的学生中,成绩最高的学生姓名及其成绩selectsc.sid,sname,cname,scorefromscleftjoincoursestyle="font-weight:600;">=course.cidleftjointeacherstyle="font-weight:600;">=teacher.tidleftjoinstudentstyle="font-weight:600;">=student.sidwheretname='张三'orderbyscoredesclimit1;36.查询每门功课成绩最好的前两名selectcid,sid,rank1from(selectcid,sid,rank()over(partitionbycidorderbyscoredesc)asrank1fromsc)twhererank1<=237.统计每门课程的学生选修人数(超过5人的课程才统计)。
sql笔试题及答案1. 题目1:查询员工表中工资大于5000的员工信息,并按照工资降序排列。
答案:SELECT * FROM 员工表 WHERE 工资 > 5000 ORDER BY 工资DESC;解析:使用SELECT语句查询员工表中满足工资大于5000的记录,并使用ORDER BY子句按照工资字段降序排列。
2. 题目2:统计订单表中每个客户的订单总数,并按照订单总数升序排列。
答案:SELECT 客户, COUNT(订单编号) AS 订单总数 FROM 订单表GROUP BY 客户 ORDER BY 订单总数 ASC;解析:使用SELECT语句查询订单表中每个客户的订单总数,并使用GROUP BY子句按照客户字段进行分组,COUNT函数用于统计订单编号,AS关键字用于为统计结果起别名,ORDER BY子句按照订单总数字段升序排列。
3. 题目3:查询学生表中不重复的学生姓名和对应的年龄。
答案:SELECT DISTINCT 学生姓名, 年龄 FROM 学生表;解析:使用SELECT DISTINCT语句查询学生表中不重复的学生姓名和对应的年龄。
4. 题目4:查询订单表中订单金额最大的订单信息。
答案:SELECT * FROM 订单表 WHERE 订单金额 = (SELECT MAX(订单金额) FROM 订单表);解析:使用SELECT语句查询订单表中订单金额等于最大订单金额的订单信息,使用子查询和MAX函数找出最大订单金额。
5. 题目5:查询销售表中每个月份的总销售金额。
答案:SELECT DATE_FORMAT(销售日期, '%Y-%m') AS 月份, SUM(销售金额) AS 总销售金额 FROM 销售表 GROUP BY DATE_FORMAT(销售日期, '%Y-%m');解析:使用SELECT语句查询销售表中每个月份的总销售金额,使用DATE_FORMAT函数将销售日期格式化成年月的形式,并使用SUM函数统计销售金额,使用GROUP BY子句按照月份进行分组。
sql基础笔试题及答案一、选择题:1. 在计算机应用中,“计算机辅助设计”的英文缩写为___________。
A. CAD B. CAM C. CAE D. CAT2. 微型计算机中,再分称作中央处理单元(CPU)的就是指___________。
A.运算器和控制器 B.累加器和算术逻辑运算部件(ALU) C.累加器和控制器 D.通用寄存器和控制器3. 计算机系统的“主机”由___________形成。
A.CPU,内存储器及辅助存储器 B.CPU和内存储器C.存放在主机箱内部的全部器件 D.计算机的主板上的全部器件 4. 冯·诺依曼计算机工作原理的设计思想就是___________。
A.程序设计 B.程序存储 c.程序编制D.算法设计 5. 世界上最先同时实现的程序存储的计算机就是___________。
A.ENIAC B.EDSAC C.EDVAC D.UNIVAC6. 通常,在微机中标明的P4或奔腾4是指___________。
A.产品型号 B.主频 C.微机名称 D.微处理器型号7. 连接计算机系统结构的五大基本组成部件一般通过___________。
A.适配器B.电缆 c.中继器 D.总线8. 在计算机领域中通常用主频去叙述___________。
A.计算机的运算速度 B.计算机的可靠性 C.计算机的可以运转性 D.计算机的可扩充性9. 下列计算机接口中,可以直接进行“插拔”操作的是___________。
A.COM B.LPT C.PCI D.USB10. 在来衡量计算机的主要性能指标中,字长就是___________。
A.计算机运算部件一次能处置的二进制数据位数 B.8十一位二进制长度 C.计算机的总线数 D.存储系统的容量11. 在计算机领域中,通常用英文单词“BYTE”来表示___________。
A.字 B.字长 C.二进制位 D.字节12. 在计算机领域中,通常用英文单词“bit”去则表示___________。
1、查找整个职员表的所有内容。
select *from employees2、查看雇员名字(last_name)。
select last_namefrom employees3、查看雇员编号、名字和工种。
select last_name,job_id,employee_idfrom employees4、显示所有雇员的姓名、工资并将DEPARTMENT_ID显示为(Department_Id)。
select last_name,salary,DEPARTMENT_ID as Department_Idfrom employees5、查找在60号部门工作的雇员。
select last_name+first_name name,department_idfrom employeeswhere departmet_id=606、要求查找职位为SH_CLERK和SA_MAN的雇员姓名(last_name)。
select last_name job_idfrom employeeswhere job_id in (’sh_clerk’,’sa_man’)7、查找职位不是SH_CLERK和SA_MAN的雇员工种及姓名。
将姓名显示为(first_name+last_name命名为”Name”)。
select first_name+last_name Name, job_idfrom employeeswhere job_id not in (’sh_clerk’,’sa_man’)8、查找哪些雇员的工资在2000到3000之间select *from employeeswhere salary between 2000 and 30009、查找哪些雇员的工资不在3000到5000之间select *from employeeswhere salary not between 3000 and 500010、查找first_name以D开头,后面仅有三个字母的雇员信息。
c语言sql笔试试题及答案1. 写出以下C语言程序的输出结果。
```c#include <stdio.h>int main() {int a = 5;int b = 3;int c = a + b;printf("%d", c);return 0;}```答案:82. 以下哪个选项是C语言中合法的变量名?A. 2variableB. variable2C. variable$2D. variable_2答案:D3. C语言中,以下哪个关键字用于定义函数?A. intB. voidC. returnD. function答案:B4. 以下哪个选项是C语言中合法的数组声明?A. int a[] = {1, 2, 3};B. int b[3] = {1, 2};C. int c[3] = {1, 2, 3, 4};D. int d[3] = {1};答案:A5. 在C语言中,以下哪个语句用于从标准输入读取一个字符?A. scanf("%c", &c);B. printf("%c", c);C. getchar();D. getc();答案:C6. 以下哪个选项是C语言中合法的指针声明?A. int *p;B. int *p = 0;C. int *p = 1;D. int *p = "Hello";答案:A7. 以下哪个选项是C语言中合法的字符串字面量?A. "Hello, World!"B. 'Hello, World!'C. "Hello, World!\n"D. 'Hello, World!\n'答案:A8. 在C语言中,以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A9. 以下哪个选项是C语言中合法的函数声明?A. int add(int a, int b);B. int add(int, int);C. int add(int a);D. int add();答案:A10. 在C语言中,以下哪个选项是合法的循环语句?A. for(;;)B. while(1)C. do {} while(0)D. All of the above答案:D11. 以下哪个选项是C语言中合法的条件语句?A. if(a > b)B. if a > bC. if (a > b)D. if a > b {}答案:C12. 在C语言中,以下哪个关键字用于定义一个枚举类型?A. enumB. typedefC. unionD. struct13. 以下哪个选项是C语言中合法的宏定义?A. #define PI 3.14159B. #define PI = 3.14159C. #define PI 3.14159D. #define PI答案:A14. 以下哪个选项是C语言中合法的文件包含指令?A. #include <stdio.h>B. #include "stdio.h"C. #include "stdio.h"D. #include <stdio.h>答案:A15. 在C语言中,以下哪个关键字用于定义一个联合体?A. structB. unionC. enumD. typedef答案:B16. 以下哪个选项是C语言中合法的函数指针声明?A. int (*func)(int);B. int *func(int);C. int func(int *);D. int (*func)(int, int);答案:A17. 在C语言中,以下哪个关键字用于定义一个位字段?B. bitsC. bitfieldD. _bit答案:C18. 以下哪个选项是C语言中合法的switch语句?A. switch(a) { case 1: break; }B. switch(a) { case 1: break; default: break; }C. switch(a) { case 1: break; default: break; }D. switch(a) { case 1: ; }答案:B19. 在C语言中,以下哪个关键字用于定义一个静态库?A. staticB. externC. libraryD. lib答案:A20. 以下哪个选项是C语言中合法的动态内存分配函数?A. mallocB. callocC. reallocD. All of the above答案:D。
sql笔试题及答案一、选择题1. SQL中的INNER JOIN和OUTER JOIN有什么区别?A. INNER JOIN用于查询两个表中有关联的数据,而OUTER JOIN用于查询所有数据,包括没有关联的数据。
B. INNER JOIN只能查询单个表,OUTER JOIN可以查询多个表。
C. INNER JOIN和OUTER JOIN没有区别,只是不同的命名方式。
D. 以上都不是。
答案:A2. 如何在SQL中创建一个新表?A. 使用CREATE TABLE语句。
B. 使用INSERT INTO语句。
C. 使用SELECT INTO语句。
D. 使用UPDATE语句。
答案:A3. 在SQL中,如何删除表中的重复记录?A. 使用DELETE语句。
B. 使用DROP语句。
C. 使用DISTINCT关键字。
D. 使用GROUP BY语句。
答案:C4. 以下哪个SQL语句用于查询表中的数据?A. SELECT * FROM table_name;B. INSERT INTO table_name (column1, column2) VALUES (value1, value2);C. UPDATE table_name SET column1 = value1 WHERE condition;D. DELETE FROM table_name WHERE condition;答案:A5. 如何在SQL中对查询结果进行排序?A. 使用ORDER BY子句。
B. 使用GROUP BY子句。
C. 使用HAVING子句。
D. 使用COUNT()函数。
答案:A二、填空题1. 在SQL中,______关键字用于从表中选择唯一的值。
答案:DISTINCT2. 若要在SQL中查询某个字段的平均值,应使用______函数。
答案:AVG()3. ______语句可以用来向数据库表中添加新的数据行。
答案:INSERT INTO4. 若要在SQL中查询特定条件下的数据,应使用______子句。
二编写SQL语句(5分/题)501) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话2) 修改学生表的结构,添加一列信息,学历3) 修改学生表的结构,删除一列信息,家庭住址4) 向学生表添加如下信息:学号姓名年龄性别联系电话学历1 A 22 男123456 小学2 B 21 男119 中学3 C 23 男110 高中4 D 18 女114 大学5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专”6) 删除学生表的数据,姓名以C开头,性别为‘男’的记录删除7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来9) 查询出所有学生的姓名,性别,年龄降序排列10) 按照性别分组查询所有的平均年龄三填空(3分/题) 361)索引分为___聚簇索引__和_ 非聚簇索引___2) TRUNCATE TABLE(删除所有,不能回滚)命令是什么含义?和Delete from(删除一个或者多个记录,能回滚)表名有什么区别?2)说出以下聚合数的含义:avg ,sum ,max ,min , count ,count(*)Avg 求平均值Sum 求和Max 最大值Min 最小值Count 返回满足条件的记录Count(*)函数返回表中所有记录数:8) 视图可以更新吗?会影响到实际表吗?视图是可以更新的,视图只是基于基本表上的虚拟表,对视图的更新会直接影响到实际表create table student(stu_no varchar(4) primary key,stu_name varchar(10) not null,stu_age decimal(3,0),stu_sex char(2),stu_address varchar(255),stu_tel number(20))select * from studentalter table student add stu_xl varchar(20)alter table student drop column stu_addressinsert into student(stu_no,stu_name,stu_age,stu_sex,stu_tel,stu_xl) values('1','A','22','ÄÐ','123456','Сѧ')insert into student(stu_no,stu_name,stu_age,stu_sex,stu_tel,stu_xl) values('2','B','21','ÄÐ','119','ÖÐѧ');insert into student(stu_no,stu_name,stu_age,stu_sex,stu_tel,stu_xl) values('3','C','23','ÄÐ','110','¸ßÖÐ');insert into student(stu_no,stu_name,stu_age,stu_sex,stu_tel,stu_xl) values('4','D','18','Å®','114','´óѧ');insert into student(stu_no,stu_name,stu_age,stu_sex,stu_tel,stu_xl) values('5','D','18','Å®','114','´óѧ');update student set stu_xl='´óר'where stu_tel like'11%'delete from student where stu_sex='ÄÐ'and stu_name like'C%'select stu_no,stu_name from student where stu_xl='´óר'and stu_age <'22'select stu_name,stu_sex from student order by stu_age descselect avg(stu_age),stu_sex from student where stu_sex='ÄÐ'group by stu_sex查询重复个数select stu_name,count(*) from student group by stu_name having count(*)>1。
1.触发器的作用?答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。
它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
可以联级运算。
如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
2。
什么是存储过程?用什么来调用?答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。
如果某次操作需要执行多次SQ L,使用存储过程比单纯SQL语句执行要快。
可以用一个命令对象来调用存储过程。
3。
索引的作用?和它的优点缺点是什么?答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。
它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。
索引可以是唯一的,创建索引允许指定单个列或者是多个列。
缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
3。
什么是内存泄漏?答:一般我们所说的内存泄漏指的是堆内存的泄漏。
堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。
当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。
4。
维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。
其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。
最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。
5。
什么是事务?什么是锁?答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。
为了确保要么执行,要么不执行,就可以使用事务。
要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。
锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。
与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。
当然锁还分级别的。
6。
什么叫视图?游标是什么?答:视图是一种虚拟的表,具有和物理表相同的功能。
可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。
对视图的修改不影响基本表。
它使得我们获取数据更容易,相比多表查询。
游标:是对查询出来的结果集作为一个单元来有效的处理。
游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。
可以对结果集当前行做修改。
一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
7。
为管理业务培训信息,建立3个表:S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄C(C#,CN)C#,CN分别代表课程编号,课程名称SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩(1) 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?答:select s# ,sn from s where S# in(select S# from c,sc where c. c#=sc.c# and cn=’税收基础’)(2) 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位? 答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’(3) 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?答:select sn,sd from s where s# not in(select s# from sc wherec#=’c5’)(4) 查询选修了课程的学员人数答:select 学员人数=count(distinct s#) from sc(5) 查询选修课程超过5门的学员学号和所属单位?答:select sn,sd from s where s# in(select s# from sc group by s # having count(distinct c#)>5)--------------------------------------------------------------------------------------------------------------------------------------------在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的基准技术问题。
下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。
它们按照从易到难的顺序排列。
当你问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。
1.你能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗?你希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。
如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。
2.NULL是什么意思?NULL(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。
NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。
假设您的SQL Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值.您不能把任何值与一个UNKNOWN值进行比较,并在逻辑上希望获得一个答案。
您必须使用IS NULL操作符。
3.什么是索引?SQL Server 2000里有什么类型的索引?任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。
一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。
简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。
在SQL Server里,它们有两种形式:聚集索引和非聚集索引。
聚集索引在索引的叶级保存数据。
这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。
由于存在这种排序,所以每个表格只会有一个聚集索引。
非聚集索引在索引的叶级有一个行标识符。
这个行标识符是一个指向磁盘上数据的指针。
它允许每个表格有多个非聚集索引。
4.什么是主键?什么是外键?主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。
外键是一个用来建立两个表格之间关系的约束。
这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。
那么这些相连的字段就是外键。
5.什么是触发器?SQL Server 2000有什么不同类型的触发器?让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。
触发器是一种专用类型的存储过程,它被捆绑到SQL Server 2000的表格或者视图上。
在SQL Server 2000里,有INSTEAD-OF和AFTER两种触发器。
INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Langu age,DML)语句对表格执行语句的存储过程。
例如,如果我有一个用于Table A的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。
AFTER触发器要在DML语句在数据库里使用之后才执行。
这些类型的触发器对于监视发生在数据库表格里的数据变化十分6.您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?这个与关系相关的问题有两个可能的答案。
第一个答案(而且是您希望听到的答案)是使用外键限制。
外键限制用来维护引用的完整性。
它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。
这个字段就是候选键(通常是另外一个表格的主键)。
另外一种答案是触发器。
触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。
由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。
7.对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑? 你正在寻找进行与数据操控有关的应聘人员。
对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。
8.你可以用什么来确保表格里的字段只接受特定范围里的值?这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。
您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。
触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。
因此,微软建议使用C heck限制而不是其他的方式来限制域的完整性。
如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。
返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。
返回参数总是INT数据类型。
OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。
(可以用作输出参数的数据类型是有一些限制的。
)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。
9.什么是相关子查询?如何使用这些查询?经验更加丰富的开发人员将能够准确地描述这种类型的查询。
相关子查询是一种包含子查询的特殊类型的查询。
查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。