SQL试题练习

一、查询员工的全名,email和电话
SELECT concat(first_name,',',last_name),email,phone_int FROM employees;
//concat(str1, str2,...)功能:将多个字符串连接成一个字符串
例1:select concat (id, name, score) as info from employee;
例2:select concat (id, ',', name, ',', score) as info from employee;
//concat_ws(str1, str2,...)功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)
例3:select concat_ws (',',id, name, score) as info from employee;
//group_concat()功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
例4:使用group_concat()和group by显示相同名字的人的id号:
    select name, group_concat ( id ) from employee 
group by name;
例5:将上面的id号从大到小排序,且用'_'作为分隔符
    select name, group_concat ( id order by id desc separator '_' ) from employee group by name; 
例6:上面的查询中显示了以name分组的每组中所有的id。接下来我们要查询以name分组的所有组的id和score:
    select name, group_concat ( concat_ws ('_',id, score) order by id) from employee group by name; 

二、查询所有员工的全名,月薪和年薪(月薪*12)
SELECT first_name,last_name,salary,salary*12 FROM employees;


三、查询所有员工的全名,月薪和年终奖(年薪*commission_pct)
SELECT first_name,last_name,salary,salary*12*ifnull(commission_pct,0) FROM employees;


四、查询哪些部门和职位有员工
SELECT DISTINCT department_id,job_id from employees WHERE department_id is not null;


五、查询1999年之后入职的员工信息
SELECT first_name,last_name,hire_date FROM employees WHERE year(hire_date) >= '1999'


六、查询公司的老板信息
SELECT first_name,last_name FROM employees WHERE manager_id IS NULL


七、查询所有员工信息,按照部门和年薪降序排序;
SELECT first_name,last_name,salary*12 as total FROM employees ORDER BY department_id,total DESC


八、给用户名加密,保留员工全名前3位,中间4位使用*代替,如果姓名还有多余的字符,保留;
SELECT concat(RPAD(substring(concat(first_name,last_name),1,3),7,'*'),SUBSTRING(concat(first_name,last_name),8)) FROM employees


九、计算员工姓名和全薪;
SELECT first_name,last_name,salary,salary*12*(1+ifnull(commission_pct,0)) FROM employees


十、查询员工所属的部门id,如果没有部门,打印“未分配部门”
SELECT first_name,last_name,ifnull(department_id,'未分配部门') FROM employees


十一、查询出每一个部门的平均工资
SELECT department_id,AVG(salary) FROM employees WHERE department_id is not null GROUP BY department_id 


十二、查询平均工资高于8000的部门和其平均工资
SELECT department_id,AVG(salary) FROM employees WHERE department_id is not null GROUP BY department_id HAVING AVG(salary)>=8000


十三、查询换过工作员工换工作的次数
SELECT employee_id,COUNT(employee_id) FROM job_history GROUP BY employee_id


十四、查询在95,96,97,98年各进公司多少人
SELECT year(hire_date),count(employee_id)
FROM employees
WHERE YEAR(hire_date) in ('1995','1996','1997','1998')
GROUP BY YEAR(hire_date)


十五、输出员工名称,员工id,员工所属部门
SELECT first_name,last_name,department_name FROM employees e JOIN departments d ON e.department_id = d.department_id


十六、输出员工信息,包括employee_id,  first_name,    department_id,  department_name   location_id     city
SELECT e.employee_id,e.first_name,d.department_id,d.department_name,l.location_id,l.city
FROM employees e JOIN departments d ON e.department_id = d.department_id JOIN locations l ON d.location_id = l.location_id


十七、在 EMPLOYEES 表中所有薪水位于JOB_GRADES表最低薪水和最高薪水之间雇员的薪水级别
SELECT e.first_name,e.last_name,e.salary
FROM employees e,job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal

SELECT e.first_name,e.last_name,e.salary
FROM employees e JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal


十八、查询所有有奖金的员工的姓名,部门,地址,城市
SELECT e.employee_id,e.first_name,d.department_id,d.department_name,l.location_id,l.city
FROM employees e JOIN departments d ON e.department_id = d.department_id JOIN locations l ON d.location_id = l.location_id
WHERE e.commission_pct IS NOT NULL


十九、查询last_name为'Ki' 的员工的经理信息
SELECT first_name,last_name FROM employees WHERE employee_id IN (SELECT manager_id FROM employees WHERE last_name LIKE 'Ki%')


二十、查询公司工资最低的员工信息
SELECT first_name,last_name,salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees)


二十一、查询1999年来公司的所有员工的最高工资的员工
SELECT first_name,last_name,hire_date,salary
FROM employees WHERE salary=
(SELECT MAX(salary) FROM employees WHERE year(hire_date)='1999')
AND year(hire_date) = '1999'


二十二、查询曾经做过ST_CLERK的员工信息
SELECT e.first_name,e.last_name,j.job_id FROM employees e JOIN job_history j ON e.employee_id = j.employee_id WHERE j.job_id = 'ST_CLERK'

 

一、选择题:(20分) 1、根据关系数据基于的数据模型——关系模型的特征判定下列正确的一项:(___) A、只存在一对多的实体关系,以图形方式来表示。 B、以二维表格结构来保存数据,在关系表中不答应有重复行存在。 C、能体现一对多、多对多的关系,但不能体现一对一的关系。 D、关系模型数据库是数据库发展的最初阶段。 2、在“连接”组中有两种连接认证方式,其中在(___)方式下,需要客户端应用程序连接时提供登录时需要的用户标识和密码。 A、Windows身份验证 B、SQL Server 身份验证 C、以超级用户身份登录时 D、其他方式登录时 3、SQL Server 2000 在安装之前,应留意的事项:(___) A、SQL Server 2000的任何版本在安装时都不用考虑操作系统的制约。 B、SQL Server 2000的安装对硬件的要求不作任何限制。 C、SQL Server 2000 在安装之前,必须在操作系统级启用TCP/IP。 D、在Windows NT Server 4.0上安装SQL Server 2000时,最低的要求是必须安装Service Pack 4(SP4)以上。 4、关系数据库中,主键是(1___),主键的建立有(2___)种方法,当运用Transact-SQL语句创建主键时,可以是(3___)。 ⑴ A、为标识表中唯一的实体 B、创建唯一的索引,答应空值 C、只答应以表中第一字段建立 D、答应有多个主键的 ⑵ A、一 B、二 C、三 D、四 ⑶ A、create table table1 (column1 char(13) not null primary, column2 int not) on primary; B、alter table table1 with notcheck add constraint [PK_table1] primary key nonclustered ( column1) on primary; C、alter table table1 column1 primary key ; 5、表在数据库中是一个非常重要的数据对象,它是用来(1___)各种数据内容的,数据库创建后就可以创建表了,创建表可以用(2___)等方法来创建。 ⑴ A、显示 B、查询 C、存放 D、检索 ⑵ A、企业治理器 B、查询分析器 C、OSQL D、企业治理器和CREATE TABLE语句 6、为数据表创建索引的目的是(1___),可以在创建表时用(2___)来创建唯一索引,也可以用(2___)来创建唯一索引。 ⑴ A、提高查询的检索性能 B、创建唯一索引 C、创建主键 D、归类 ⑵ A、设置主键约束,设置唯一约束 B、Create table,Create index C、设置主键约束,Create index D、以上都可以 7、 在Transact-SQL语法中,用来插入数据的命令是(___),用于更新的命令是(___)。 A、INSERT,UPDATE B、UPDATE,INSERT C、DELETE,UPDATE D、CREATE,INSERT INTO 8、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1___),使用要害字(2___)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3___),假如在SELECT语句中使用集合函数时,一定在后面使用(4___)。 ⑴ A、SELECT,INTO B、SELECT,FROM C、SELECT,GROUP D、仅SELECT ⑵ A、DISTINCT B、UNION C、ALL C、TOP ⑶ A、JOIN B、UNION C、INTO C、LIKE ⑷ A、GROUP BY B、COMPUTE BY C、HAVING D、COMPUTE 9、视图是一种常用的数据对象,它是提供(1___)和(1___)数据的另一种途径,可以简化数据库操作,当使用多个数据表来建立视图时,表的连接不能使
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值