oracle查询员工姓名的第2个字母为“M”的员工信息 -- 用三种做法
时间: 2024-10-25 21:14:50 浏览: 57
在Oracle数据库中,有多种方式可以查询员工姓名的第二个字母为"M"的员工信息。以下是三种常见的做法:
1. **利用SQL函数**:
```sql
SELECT * FROM employees
WHERE SUBSTR(last_name, 2, 1) = 'M';
```
这个查询使用了`SUBSTR`函数,从`last_name`字段的第二个字符开始截取长度为1的字符,然后判断是否等于'M'。
2. **使用REGEXP_LIKE函数** (如果支持正则表达式):
```sql
SELECT * FROM employees
WHERE REGEXP_LIKE(last_name, '^_?[A-Za-z]*M');
```
这里正则表达式匹配以_'(可选前导空格)后面跟着任意数量字母,然后紧跟'M'的情况。
3. **使用连接字符串操作符** (如果数据库版本支持):
```sql
SELECT * FROM employees
WHERE last_name LIKE '___M%' OR last_name LIKE '_M____';
```
这个查询通过连接三个下划线(`___`)来代表第一个字母,之后跟'M'以及可能存在的其他字符,但这不是标准SQL语法,仅在部分数据库系统如Oracle中可用。
相关问题
请给Oracle表中的emp表出30道单表查询的题带答案
好的,以下是30道Oracle单表查询的题目和答案:
1. 查询emp表中所有员工的信息。
```
SELECT * FROM emp;
```
2. 查询emp表中员工的工号、姓名、工资。
```
SELECT empno, ename, sal FROM emp;
```
3. 查询emp表中薪水大于等于3000的员工信息。
```
SELECT * FROM emp WHERE sal >= 3000;
```
4. 查询emp表中薪水大于等于3000且职位为经理的员工信息。
```
SELECT * FROM emp WHERE sal >= 3000 AND job = '经理';
```
5. 查询emp表中所有员工的姓名、工资和奖金。
```
SELECT ename, sal, comm FROM emp;
```
6. 查询emp表中所有员工的姓名、工资和年薪。
```
SELECT ename, sal, sal*12 FROM emp;
```
7. 查询emp表中所有员工的姓名、工资和工资涨幅。
```
SELECT ename, sal, (sal-1200)/1200*100 AS "涨幅%" FROM emp;
```
8. 查询emp表中所有员工的姓名、工资和工资级别。
```
SELECT ename, sal,
CASE
WHEN sal < 2000 THEN 'A级'
WHEN sal < 3000 THEN 'B级'
ELSE 'C级'
END AS "工资级别"
FROM emp;
```
9. 查询emp表中所有员工的姓名、部门名称和工资。
```
SELECT e.ename, d.dname, e.sal FROM emp e, dept d WHERE e.deptno = d.deptno;
```
10. 查询emp表中所有员工的姓名、部门编号和岗位名称。
```
SELECT e.ename, e.deptno, j.jname FROM emp e, job j WHERE e.job = j.job;
```
11. 查询emp表中所有员工的姓名、入职日期和工资。
```
SELECT ename, hiredate, sal FROM emp;
```
12. 查询emp表中薪水大于等于2000并且小于等于4000的员工信息。
```
SELECT * FROM emp WHERE sal BETWEEN 2000 AND 4000;
```
13. 查询emp表中薪水不在2000到4000范围内的员工信息。
```
SELECT * FROM emp WHERE sal NOT BETWEEN 2000 AND 4000;
```
14. 查询emp表中员工姓名中包含字母“A”的员工信息。
```
SELECT * FROM emp WHERE ename LIKE '%A%';
```
15. 查询emp表中员工姓名以字母“S”开头的员工信息。
```
SELECT * FROM emp WHERE ename LIKE 'S%';
```
16. 查询emp表中员工姓名以字母“S”结尾的员工信息。
```
SELECT * FROM emp WHERE ename LIKE '%S';
```
17. 查询emp表中员工姓名中包含3个字母的员工信息。
```
SELECT * FROM emp WHERE ename LIKE '___';
```
18. 查询emp表中员工姓名中包含2个字母的员工信息。
```
SELECT * FROM emp WHERE ename LIKE '__';
```
19. 查询emp表中薪水排在前10位的员工信息。
```
SELECT * FROM emp ORDER BY sal DESC FETCH FIRST 10 ROWS ONLY;
```
20. 查询emp表中薪水排在后10位的员工信息。
```
SELECT * FROM (SELECT * FROM emp ORDER BY sal DESC) WHERE ROWNUM <= 10 ORDER BY sal ASC;
```
21. 查询emp表中薪水排名第5到第10的员工信息。
```
SELECT * FROM (SELECT e.*, RANK() OVER (ORDER BY sal DESC) AS rank FROM emp e) WHERE rank BETWEEN 5 AND 10;
```
22. 查询emp表中每个部门的员工数量。
```
SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;
```
23. 查询emp表中每个部门的平均工资、最高工资和最低工资。
```
SELECT deptno, AVG(sal), MAX(sal), MIN(sal) FROM emp GROUP BY deptno;
```
24. 查询emp表中薪水比平均工资高的员工信息。
```
SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp);
```
25. 查询emp表中薪水比其上级领导高的员工信息。
```
SELECT e.*, m.ename AS "上级领导" FROM emp e, emp m WHERE e.mgr = m.empno AND e.sal > m.sal;
```
26. 查询emp表中没有上级领导的员工信息。
```
SELECT * FROM emp WHERE mgr IS NULL;
```
27. 查询emp表中每个职位的平均工资和员工数量。
```
SELECT job, AVG(sal), COUNT(*) FROM emp GROUP BY job;
```
28. 查询emp表中每个职位的平均工资和最高工资。
```
SELECT job, AVG(sal), MAX(sal) FROM emp GROUP BY job;
```
29. 查询emp表中每个职位的平均工资和最低工资。
```
SELECT job, AVG(sal), MIN(sal) FROM emp GROUP BY job;
```
30. 查询emp表中工资最高的员工信息。
```
SELECT * FROM emp WHERE sal = (SELECT MAX(sal) FROM emp);
```
阅读全文