MySQL - 3, data query and filtering

0. Create a sample table and insert data:

CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    emp_name VARCHAR(50) NOT NULL,
    department VARCHAR(50),
    age INT,
    salary DECIMAL(10, 2)
);

INSERT INTO employees (emp_id, emp_name, department, age, salary) VALUES
    (1, 'lfsun-1', 'HR', 30, 45000.00),
    (2, 'lfsun-2', 'Finance', 35, 60000.00),
    (3, 'lfsun-3', 'IT', 28, 55000.00),
    (4, 'lfsun-4', 'Finance', 32, 58000.00),
    (5, 'lfsun-5', 'HR', 29, 47000.00);

1. Use SELECT and WHERE to query data:

-- 查询所有员工的信息
SELECT * FROM employees;

-- 查询薪资大于等于55000的员工
SELECT emp_name, department, salary FROM employees WHERE salary >= 55000;

2. Use GROUP BY to group data:

-- 查询各个部门的员工数量和平均年龄
SELECT department, COUNT(emp_id) AS num_employees, AVG(age) AS avg_age
FROM employees
GROUP BY department;

3. Use HAVING for conditional filtering:

-- 查询部门中员工数量大于1的部门的平均薪资
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING COUNT(emp_id) > 1;

4. Use ORDER BY to sort:

-- 按照薪资从高到低排序显示员工信息
SELECT * FROM employees ORDER BY salary DESC;

5. Use LIMIT to limit the number of returned results:

-- 查询薪资最高的两名员工
SELECT * FROM employees ORDER BY salary DESC LIMIT 2;

6. Use DISTINCT to remove duplicate records:

-- 查询不重复的部门列表
SELECT DISTINCT department FROM employees;

7. Use UNION to combine query results:

-- 查询HR部门和Finance部门员工的姓名
SELECT emp_name
FROM employees
WHERE department = 'HR'
UNION
SELECT emp_name
FROM employees
WHERE department = 'Finance';

8. Use JOIN to connect multiple tables:

CREATE TABLE departments (
    dep_id INT PRIMARY KEY,
    dep_name VARCHAR(50) NOT NULL
);

INSERT INTO departments (dep_id, dep_name) VALUES
    (1, 'HR'),
    (2, 'Finance'),
    (3, 'IT');

-- 内连接查询员工和部门信息
SELECT emp_name, department, dep_name
FROM employees
JOIN departments ON employees.department = departments.dep_name;

9. Use EXISTS for subqueries:

-- 查询存在薪资低于60000的员工的部门信息
SELECT DISTINCT department
FROM employees e
WHERE EXISTS (
    SELECT 1
    FROM employees
    WHERE salary < 60000 AND department = e.department
);

10. Use IN and NOT IN for conditional matching:

-- 查询年龄为28、29或32岁的员工信息
SELECT * FROM employees WHERE age IN (28, 29, 32);

-- 查询不属于HR和IT部门的员工信息
SELECT * FROM employees WHERE department NOT IN ('HR', 'IT');

11. Use BETWEEN for range matching:

-- 查询薪资在50000到60000之间的员工信息
SELECT * FROM employees WHERE salary BETWEEN 50000 AND 60000;

12. Use LIKE and NOT LIKE for fuzzy matching:

-- 查询姓名以'lfsun'开头的员工信息
SELECT * FROM employees WHERE emp_name LIKE 'lfsun%';

-- 查询姓名不包含'lfsun-1'的员工信息
SELECT * FROM employees WHERE emp_name NOT LIKE '%lfsun-1%';

13. Use IS NULL and IS NOT NULL for null value judgment:

-- 查询没有薪资信息的员工信息
SELECT * FROM employees WHERE salary IS NULL;

-- 查询具有薪资信息的员工信息
SELECT * FROM employees WHERE salary IS NOT NULL;

Guess you like

Origin blog.csdn.net/qq_43116031/article/details/131926972