一. SELECT语句基础定义SELECT语句用于从数据库表中检索数据。它是SQL中最基本和最常用的命令。语法解析SELECT column1, column2, ... -- 选择要检索的列FROM table_name -- 指定数据来源的表[WHERE condition] -- 可选的筛选条件[ORDER BY column_name [ASC|DESC]] -- 可选的排序[LIMIT number]; -- 可选的返回行数限制详细解释- SELECT指定要返回的列可以使用*表示所有列- FROM指定数据来源的一个或多个表- WHERE过滤条件只有满足条件的行才会被返回- ORDER BY对结果集进行排序- LIMIT限制返回的行数二. WHERE条件筛选定义WHERE子句用于过滤记录只返回满足指定条件的行。比较运算符-- 定义精确匹配查询SELECT * FROM employees WHERE salary 5000; -- 等于-- 定义范围比较查询SELECT * FROM employees WHERE salary 5000; -- 大于SELECT * FROM employees WHERE salary 5000; -- 小于SELECT * FROM employees WHERE salary 5000; -- 大于等于SELECT * FROM employees WHERE salary 5000; -- 小于等于SELECT * FROM employees WHERE salary 5000; -- 不等于-- 定义范围区间查询SELECT * FROM employees WHERE salary BETWEEN 3000 AND 6000; -- 在3000-6000之间逻辑运算符定义-- 定义AND要求所有条件都满足SELECT * FROM employeesWHERE salary 5000 AND department_id 1; -- 工资5000且部门1-- 定义OR要求至少一个条件满足SELECT * FROM employeesWHERE salary 5000 OR department_id 1; -- 工资5000或部门1-- 定义NOT否定条件SELECT * FROM employeesWHERE NOT department_id 1; -- 部门不等于1-- 定义复杂逻辑组合SELECT * FROM employeesWHERE (salary 5000 OR commission_pct IS NOT NULL) -- 括号优先执行AND hire_date 2020-01-01;模糊查询定义-- 定义LIKE用于模式匹配%匹配任意字符序列SELECT * FROM employees WHERE first_name LIKE J%; -- 以J开头SELECT * FROM employees WHERE first_name LIKE %n; -- 以n结尾SELECT * FROM employees WHERE first_name LIKE %oh%; -- 包含oh-- 定义_匹配单个字符SELECT * FROM employees WHERE first_name LIKE J_; -- J开头两个字符SELECT * FROM employees WHERE first_name LIKE J__; -- J开头三个字符NULL值处理定义-- 定义IS NULL检查空值SELECT * FROM employees WHERE commission_pct IS NULL;-- 定义IS NOT NULL检查非空值SELECT * FROM employees WHERE commission_pct IS NOT NULL;-- 定义COALESCE函数处理空值返回第一个非空值SELECTfirst_name,COALESCE(commission_pct, 0) AS commission -- 如果commission_pct为NULL则返回0FROM employees;三. JOIN连接查询定义JOIN用于根据两个或多个表之间的相关列合并行。用于从多个表中检索数据。INNER JOIN定义-- 定义内连接返回两个表中匹配的行SELECTe.first_name,e.last_name,d.department_nameFROM employees e -- e是employees表的别名INNER JOIN departments d ON e.department_id d.department_id; -- 连接条件解释只返回employees和departments表中department_id匹配的记录。LEFT JOIN定义-- 定义左连接返回左表所有记录和右表匹配的记录SELECTe.first_name,d.department_nameFROM employees eLEFT JOIN departments d ON e.department_id d.department_id;解释返回所有员工记录即使某些员工没有分配部门department_name为NULL。RIGHT JOIN定义- 定义右连接返回右表所有记录和左表匹配的记录SELECTe.first_name,d.department_nameFROM employees eRIGHT JOIN departments d ON e.department_id d.department_id;解释返回所有部门记录即使某些部门没有员工first_name为NULL。自连接定义-- 定义表与自身连接用于查询层次结构数据SELECTe1.first_name AS 员工姓名,e2.first_name AS 经理姓名FROM employees e1LEFT JOIN employees e2 ON e1.manager_id e2.employee_id;解释通过manager_id字段将员工表与自身连接查找每个员工的经理。四. 聚合函数与分组聚合函数定义聚合函数对一组值执行计算并返回单个值。-- 定义COUNT计算行数SELECT COUNT(*) AS total_employees FROM employees; -- 总员工数SELECT COUNT(DISTINCT department_id) AS unique_departments FROM employees; -- 不重复部门数-- 定义SUM计算总和SELECT SUM(salary) AS total_salary FROM employees; -- 工资总额-- 定义AVG计算平均值SELECT AVG(salary) AS average_salary FROM employees; -- 平均工资-- 定义MAX/MIN找最大最小值SELECT MAX(salary) AS max_salary FROM employees; -- 最高工资SELECT MIN(salary) AS min_salary FROM employees; -- 最低工资GROUP BY定义-- 定义按部门分组统计SELECTdepartment_id,COUNT(*) AS employee_count, -- 每个部门的员工数AVG(salary) AS avg_salary -- 每个部门的平均工资FROM employeesGROUP BY department_id; -- 按department_id分组解释将员工按部门分组然后对每个组计算统计值。HAVING定义-- 定义HAVING对分组后的结果进行筛选SELECTdepartment_id,AVG(salary) AS avg_salaryFROM employeesGROUP BY department_idHAVING AVG(salary) 5000; -- 只显示平均工资5000的部门解释WHERE在分组前过滤行HAVING在分组后过滤组。五. 子查询定义子查询是嵌套在其他SQL查询中的查询。标量子查询定义-- 定义返回单个值的子查询SELECT * FROM employeesWHERE salary (SELECT AVG(salary) FROM employees); -- 子查询返回平均工资解释子查询(SELECT AVG(salary) FROM employees)返回一个值平均工资主查询使用这个值进行比较。列子查询定义-- 定义返回一列值的子查询通常与IN一起使用SELECT * FROM employeesWHERE department_id IN (SELECT department_id FROM departmentsWHERE location_id 1700 -- 子查询返回特定位置的部门ID列表);解释子查询返回一个部门ID列表主查询检查员工的部门ID是否在这个列表中。EXISTS子查询定义-- 定义检查子查询是否返回任何行SELECT * FROM departments dWHERE EXISTS (SELECT 1 FROM employees eWHERE e.department_id d.department_id -- 关联子查询);解释对于每个部门检查是否存在属于该部门的员工。EXISTS返回布尔值。关键概念总结1. **SELECT**数据检索的核心命令2. **WHERE**行级过滤条件3. **JOIN**多表数据关联4. **GROUP BY**数据分组聚合5. **HAVING**分组结果过滤6. **子查询**查询嵌套解决复杂问题7. **索引**提高查询性能的数据结构