SQL的基础语句
select语句
使用形式:SELECT column1, column2, ... FROM table_name WHERE condition;
select * from student where sex=’男’;其中,SELECT关键字用于指定要查询的列,可以使用*代表所有列;FROM关键字用于指定要查询的表;WHERE关键字用于指定查询的条件。
insert语句
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);其中,table_name是要插入数据的表名,column1、column2等是表中的列名,value1、value2等是要插入的值。
update语句
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE some_column = some_value;其中,table_name是要更新数据的表名,column1、column2等是要修改的列名,value1、value2等是要修改的值,WHERE子句是用于指定要更新的行的条件。
delete语句
DELETE FROM table_name WHERE some_column = some_value;其中,table_name是要删除数据的表名,WHERE子句是用于指定要删除的行的条件。
注意:如果不指定条件相当于删除表中所有数据
SQL基本查询
where子句
WHERE子句是结构化查询语言(SQL)中用于筛选数据的关键字。通过WHERE子句,您可以指定一个或多个条件来限制从数据库中检索的数据行。以下是WHERE子句的使用方式:
SELECT * FROM table_name WHERE some_column = some_value;操作符:
WHERE子句可以使用以下比较运算符:
=(等于)
<(小于)
>(大于)
<=(小于或等于)
>=(大于或等于)
<>或!=(不等于)
还可以使用逻辑运算符(AND、OR和NOT)来组合多个条件。例如:
SELECT * FROM students WHERE sex = ‘男’ and age > 23;模糊搜索
-- 多字符匹配 SELECT * FROM students WHERE clazz like 'xx%' -- 单字符匹配 SELECT * FROM students WHERE stu_name LIKE '张_'; -- 多关键词匹配:找姓名含“张”或“李”或“王”的学生 SELECT * FROM students WHERE name RLIKE '张|李|王' -- 范围匹配:找姓名含“张”且后面跟1-2个字符的学生(如“张三”“张三丰”) SELECT * FROM students WHERE name RLIKE '张.{1,2}';in
返回选项中的内容
select * from students where clazz in ('xx','xx','xx');BETWEEN AND
返回年龄在22到24的学生
select * from students where age BETWEEN 22 AND 24;order by子句
ORDER BY子句用于对查询结果按照一个或多个列进行排序。它接受一个或多个列名或表达式作为参数,并可指定每个列的排序方式(ASC:升序,DESC:降序)。语法如下:
SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...group by子句
GROUP BY子句用于将查询结果按照一个或多个列进行分组,并对每个组进行聚合计算(如COUNT、SUM、AVG等)。语法如下:
SELECT column1, column2, ..., avg(column_name) FROM table_name GROUP BY column1, column2, ...-- 嵌套where select * from (SELECT column1, column2, ..., aggregate_function(column_name) f FROM table_name GROUP BY column1, column2, ...) as t1 where t1.f > xxx;having子句
HAVING子句用于对分组后的结果进行过滤,只返回符合条件的分组。它接受一个或多个聚合函数作为参数,并可指定每个函数的过滤条件。语法如下:
SELECT column1, column2, ..., aggregate_function(column_name) FROM table_name GROUP BY column1, column2, ... HAVING condition;limit子句
LIMIT用于限制查询结果集的行数,其中,number是你想要返回的行数。其语法如下:
SELECT column1, column2, ... FROM table_name LIMIT number;-- 多行查询 从number1起 limit number2个 SELECT column1, column2, ... FROM table_name LIMIT number1,number2;offsite子句
OFFSET用于指定查询结果集的偏移量。
其中,number是你想要返回的行数,offset_num是从查询结果集的起始位置偏移的行数。
SELECT column1, column2, ... FROM table_name LIMIT number OFFSET offset;数据连接
内连接 join | inner join
SELECT s.*, sc.subject_id, su.subject_name FROM ( students s JOIN scores sc JOIN subjects su ON s.stu_id = sc.stu_id and sc.subject_id = su.subject_id );外连接 left join / right join / full join
# 在score末行添加一个假数据 # 2000 1 100 期末 SELECT * FROM( students as s RIGHT JOIN scores as sc ON s.stu_id = sc.stu_id );union 操作
先拼接,再去重(删除重复行)
-- 合并“成绩≥90”和“成绩≤60”的学生信息(UNION 自动去重) SELECT s.stu_id, s.stu_name, sc.score, su.subject_name FROM students s JOIN scores sc ON s.stu_id = sc.stu_id JOIN subjects su ON sc.subject_id = su.subject_id WHERE sc.score >= 90 UNION SELECT s.stu_id, s.stu_name, sc.score, su.subject_name FROM students s JOIN scores sc ON s.stu_id = sc.stu_id JOIN subjects su ON sc.subject_id = su.subject_id WHERE sc.score <= 60 ORDER BY score DESC;union all操作
直接拼接结果,不做任何去重 / 排序
-- 添加一个student 张三 19 SELECT name FROM students WHERE age = 20 UNION ALL SELECT name FROM students WHERE age = 19;