多表查询之非等值查询

复制代码
#非等值连接
#案例1:查询员工的工资和工资级别
SELECT
    salary,
    grade_level
FROM
    employees e,
    job_grades g
WHERE
    salary BETWEEN g.lowest_sal
AND g.highest_sal
AND g.grade_level = 'A';

#3.自连接
#案例:查询员工名和上级的名称
SELECT
    e.employee_id,
    e.last_name,
    m.employee_id,
    m.last_name
FROM
    employees e,
    employees m
WHERE
    e.manager_id = m.employee_id;

#作业
#1、显示员工表的最大工资,工资平均值
SELECT
    Max(salary),
    avg(salary)
FROM
    employees;

#查询员工表的 employee_id, job_id, last_name,按 department_id降序, salary升序
SELECT
    employee_id,
    job_id,
    last_name
FROM
    employees
ORDER BY
    department_id DESC,
    salary;

#三、查询员工表的bid中包含a和e的,并且a在e的前面
SELECT
    job_id
FROM
    employees
WHERE
    job_id LIKE '%a%e%';

/*四、已知表 student,里面有id(学号),name,gradeId(年级编号)
    已知表grade,里面有id(年级编号),name(年级名)
    已知表result,里面有id, score,studentNo(学号)
要求查询姓名、年级名、成绩 */
SELECT
    s. NAME,
    g. NAME,
    r.score
FROM
    student s,
    grade g,
    result r
WHERE
    s.id = r.studentNo
AND s.gradeId = g.id;

#五、显示当前日期,以及去前后空格,截取子字符串的函数
SELECT
    NOW() SELECT
        trim(字符 FROM '');

SELECT
    substr(str, startIndex);

SELECT
    sunstr (str, startIndex, length);

#1.显示所有员工的姓名,部门号和部门名称
USE myemployees;

SELECT
    last_name,
    d.department_id,
    d.department_name
FROM
    employees e,
    departments d
WHERE
    e.department_id = d.department_id;

#2.查询90号部门员工的job_id和90号部门的1ocation id
USE myemployees;

SELECT
    e.job_id,
    d.location_id
FROM
    employees e,
    departments d
WHERE
    e.department_id = d.department_id
AND e.department_id = 90;

#3选择所有有奖金的员工的last_name,department_name,location_id,city
SELECT
    last_name,
    department_name,
    l.location_id,
    city
FROM
    employees e,
    departments d,
    locations l
WHERE
    l.location_id = d.location_id
AND e.department_id = d.department_id
AND e.commission_pct IS NOT NULL;

#4.选择city在Toronto工作的员工的last_name,job_id,department_id,department_name
SELECT
    last_name,
    job_id,
    d.department_id,
    department_name
FROM
    employees e,
    departments d,
    locations l
WHERE
    e.department_id = d.department_id
AND l.location_id = d.location_id
AND city = 'Toronto';

#5.查询每个工种、每个部门的部门名、工种名和最低工资
SELECT
    department_name,
    job_title,
    MIN(salary)
FROM
    employees e,
    departments d,
    jobs j
WHERE
    e.department_id = d.department_id
AND e.job_id = j.job_id
GROUP BY
    department_name,
    job_title;

#6.查询每个国家下的部门个数大于2的国家编引
SELECT
    country_id,
    COUNT(*) 部门个数
FROM
    departments d,
    locations l
WHERE
    d.location_id = l.location_id
GROUP BY
    country_id
HAVING
    部门个数 > 2;

#7.选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号,结果类似于下面的格式
#employees Emp# manager Mar#
#kochhar    101   king   100
SELECT
    e.last_name employees,
    e.employee_id "Emp#",
    m.last_name manager,
    m.employee_id "Mgr#"
FROM
    employees e,
    employees m
WHERE
    e.manager_id = m.employee_id
AND e.last_name = 'kochhar';

CREATE TABLE job_grades (
    grade_level VARCHAR (3),
    lowest_sal INT,
    highest_sal INT
);

INSERT INTO job_grades
VALUES
    ('A', 1000, 2999);

INSERT INTO job_grades
VALUES
    ('B', 3000, 5999);

INSERT INTO job_grades
VALUES
    ('C', 6000, 9999);

INSERT INTO job_grades
VALUES
    ('D', 10000, 14999);

INSERT INTO job_grades
VALUES
    ('E', 15000, 24999);

INSERT INTO job_grades
VALUES
    ('F', 25000, 40000);
复制代码

 

作者:Esofar

出处:https://www.cnblogs.com/deyo/p/13264900.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   自律即自由-  阅读(371)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示