SQL 的 SELECT 简单查询

在数据库管理中,SELECT 语句是 SQL 中最常用的语句之一,用于从数据库表中检索数据。
 

简单查询

简单查询是 SELECT 语句的基础应用,基本语法为 SELECT 列名 FROM 表名; 。例如,假设有一个名为 students 的表,包含 student_id 、student_name 、age 等列,要查询所有学生的姓名,可使用如下语句:
 

SELECT student_name FROM students;

如果要查询多个列,列名之间用逗号隔开,如 SELECT student_id, student_name FROM students; 。若要查询表中的所有列,可以使用通配符 * ,即 SELECT * FROM students; ,不过在实际应用中,为了提高查询效率和避免不必要的数据传输,通常不建议在生产环境大量使用 * 。
 

where 约束

WHERE 子句用于对查询结果进行条件筛选,语法为 SELECT 列名 FROM 表名 WHERE 条件; 。条件可以是比较运算符(如 = 、<> 、< 、> 等 )、逻辑运算符(AND 、OR 、NOT )等的组合。比如,要从 students 表中查询年龄大于 18 岁的学生姓名,还可以使用逻辑运算符组合多个条件,例如查询年龄大于 18 岁且性别为 '男' 的学生信息:

SELECT student_name FROM students WHERE age > 18;
SELECT * FROM students WHERE age > 18 AND gender = '男';

group by 分组

GROUP BY 子句用于根据指定列对查询结果进行分组,语法是 SELECT 列名 FROM 表名 GROUP BY 分组列; 。通常会配合聚合函数(如 SUM 、COUNT 、AVG 等 )使用。例如,在 orders 表中有 order_id 、customer_id 、order_amount 等列,要按 customer_id 分组统计每个客户的订单数量:

SELECT customer_id, COUNT(order_id) AS order_count
FROM orders
GROUP BY customer_id;

having 过滤

HAVING 子句用于对 GROUP BY 分组后的结果进行筛选,语法为 SELECT 列名 FROM 表名 GROUP BY 分组列 HAVING 条件; 。它与 WHERE 子句的区别在于,WHERE 是在分组前对行进行筛选,而 HAVING 是在分组后对组进行筛选。例如,查询订单数量大于 3 的客户:

SELECT customer_id, COUNT(order_id) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(order_id) > 3;

order by 排序

ORDER BY 子句用于对查询结果进行排序,语法为 SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC]; ,ASC 表示升序(默认 ),DESC 表示降序。比如,要按照学生成绩从高到低查询学生信息:

SELECT * FROM students ORDER BY score DESC;

limit 限制条数

LIMIT 子句用于限制查询结果返回的行数,语法为 SELECT 列名 FROM 表名 LIMIT [起始位置,] 数量; 。起始位置可选,不指定时默认从第 0 行开始。例如,只查询 students 表中前 5 条记录:

SELECT * FROM students LIMIT 5;

若要从第 3 条记录开始,查询 5 条记录:

SELECT * FROM students LIMIT 2, 5;

单表查询的语法顺序与执行顺序

语法顺序一般是 SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY - LIMIT 。但执行顺序有所不同,首先执行 FROM 确定数据源,然后 WHERE 进行行筛选,接着 GROUP BY 分组,再是 HAVING 对分组结果筛选,之后 SELECT 选择列,随后 ORDER BY 排序,最后 LIMIT 限制返回行数。理解这种顺序有助于优化查询性能。
 

正则查询

在 SQL 中,可以使用正则表达式进行模糊查询,通过 REGEXP 关键字实现。例如,在 students 表中查询姓名以 '张' 开头的学生:

SELECT * FROM students WHERE student_name REGEXP '^张';

PS:如果要查后面结尾字,可以加.*(|)$,这个要比like‘sth.%’好用一点喔。
 

连表操作

连表操作(如内连接、外连接等 )允许从多个相关表中检索数据。内连接语法如 SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.关联列 = 表2.关联列; 。例如,有 students 表和 scores 表,通过 student_id 关联,查询学生及其成绩信息:

SELECT students.student_name, scores.score
FROM students
INNER JOIN scores
ON students.student_id = scores.student_id;

SELECT 语句关键字执行优先级

了解 SELECT 语句中关键字的执行优先级,能帮助我们更准确地编写查询语句。一般来说,FROM 最先执行确定数据源,然后是 WHERE 筛选行,接着 GROUP BY 分组,HAVING 筛选组,之后是 SELECT 选取列,再是 DISTINCT 去重(如果有 ),ORDER BY 排序,最后 LIMIT 限制行数。具体执行顺序为:
SQL 的 SELECT 简单查询_第1张图片

子查询

子查询是在一个 SELECT 语句中嵌套另一个 SELECT 语句。子查询可以用于 WHERE 子句、FROM 子句等位置。例如,在 students 表中查询成绩高于平均成绩的学生:

SELECT * FROM students
WHERE score > (SELECT AVG(score) FROM students);

PS:同时条件还可以作为一个虚拟表,例如as为表t1,再进行和原来自身的表进行连接等操作,除了表与表之间连接,还可以自己与自己连接。

 

你可能感兴趣的:(sql,数据库,oracle)