SQL基础语句

目录

  1. 全表查询
  2. 选择查询
  3. 常量和运算
  4. 条件查询 - where
  5. 运算符
  6. 模糊查询 - not like,like
  7. 逻辑运算
  8. 去重 - DISTINCT
  9. 排序 - order by
  10. 聚合函数
  11. 分组 - group by
  12. having
  13. join
  14. 组合查询

1.全表查询

查询数据表中所有关于学生(student)的信息

Select * from student

2.选择查询

查询数据表中学生的姓名(name)和年龄(age)信息

select name,age from student

3.常量和运算

查询数据表中的学生姓名(name)和成绩(score),并计算出来成绩的2倍且取名为:double_score

select name,score,score*2'double_score'from student

4.条件查询 - where

查询数据表中姓名为‘小明’的成绩和姓名

select name,score from student where name='小明'

5.运算符

查询数据表中的所有姓名和年龄,但不查询姓名为‘LISA’的学生

select name,age from student where name!="lisa"

6.模糊查询

查询数据表中所有学生的姓名(name)和年龄(age),但姓名内不能包含“张”(not like)

#不能包含“张”
select name,age from student where name not like "%张%"


#包含“张”
select  name,age from student where name like "%张%"

7.逻辑运算

查询数据表中所有人学生的姓名(name),成绩(score),要求学生的姓名需包含“ding”,或者成绩(score)大于100

select name,score from student where name like "%ding%" or score>100

8.去重 - DISTINCT

过滤掉数据表中重复的数据,筛选掉数据表中班级(class_id)重复的数据

select distinct class_id from student

9.排序 - order by

筛选出数据表中的学生姓名(name)、年龄(age)、成绩(score)并且按照成绩从大到小进行排序;如果成绩相同,则按照年龄从小到大排序

  • order by … Desc 从大到小
  • order by … Asc 从小到大
  • order by 默认排序为升序
select name,age,score from student order by score Desc,age Asc

10.聚合函数

聚合函数是指需要对数据进行汇总计算的特殊函数,他可以对数据进行:计数、求和、平均值、最大值、最小值等操作。

需要配合GROUP BY使用
----常见的的聚合函数:

  • COUNT:计算制定列的行数或非空值的数量
  • SUN:数值求和
  • AVG:数据平均值
  • MAX:最大值
  • MIN:最小值

汇总数据表中学生的总成绩(total_score)、平均成绩(avg_score)、最高成绩(max_score)、最低成绩(min_score)

select SUM(score)'total_score', AVG(score)'avg_score', MAX(score)'max_score', MIN(score)'min_score' from student

11.分组 - GROUP BY

分组聚合是一种对数据进行分类并对每个分类进行聚合计算的操作。

  • 单子段分组

学生表 student,包含以下字段:id(学号)、name(姓名)、class_id(班级编号)、score(成绩)。查询学生表中的班级编号(class_id)和每个班级的平均成绩(avg_score)

select class_id,AVG(score)'avg_score' from student group by class_id
  • 多字段分组
    比如想统计学校里每个班级每次考试的学生情况,这时就可以使用多字段分组。

学生表 student,包含以下字段:id(学号)、name(姓名)、class_id(班级编号)、exam_num(考试次数)、score(成绩)。统计学生表中的班级编号(class_id),考试次数(exam_num)和每个班级每次考试的总学生人数(total_num)

select class_id,exam_num,COUNT(id)'total_num' from student group by class_id,exam_num

12.分组聚合 – having

- HAVING函数用于在分组聚合后对分组进行过滤,可以对分组后的结果进行条件筛选,只保留满足特点条件的分组

- HAVING与条件查询WHERE的区别在于:
	WHERE用于在**分组之前**进行过滤
	HAVING用于在**分组之后**进行过滤

学生表 student,包含以下字段:id(学号)、name(姓名)、class_id(班级编号)、score(成绩)。统计学生表中班级的总成绩超过 150 分的班级编号(class_id)和总成绩(total_score)

select class_id,SUM(score)'total_score' from student group by class_id HAVING SUM(score)>=150

13.关联查询 - - join

关联查询是一种用于联合多个数据表中的数据的查询方式

  • CROSS JOIN
    • CROSS JOIN 是一种简单的关联查询,不需要任何条件来匹配行,它直接将左表的 每一行 与右表的 每一行 进行组合,返回的结果是两个表的笛卡尔
SELECT
  student.name AS student_name,
  student.age AS student_age,
  student.class_id,
  class.name AS class_name
FROM
  student
  CROSS JOIN class;
  • INNER JOIN
    • INNER JOIN 是一种常见的关联查询方式,它根据两个表之间的关联条件,将满足条件的行组合在一起
    • INNER JOIN 只返回两个表中满足关联条件的交集部分,即在两个表中都存在的匹配行

题目:

    假设有一个学生表 student,包含以下字段:id(学号)、name(姓名)、age(年龄)、class_id(班级编号)。还有一个班级表 class,包含以下字段:id(班级编号)、name(班级名称)、level(班级级别)。

    请你编写一个 SQL 查询,根据学生表和班级表之间的班级编号进行匹配,返回学生姓名(student_name)、学生年龄(student_age)、班级编号(class_id)、班级名称(class_name)、班级级别(class_level)。
select student.name'student_name',student.age'student_age',class_id,class.name'class_name',class.level'class_level' 
from 
student join class on student.calss_id = class.id
  • OUTER JOIN
    • OUTER JOIN 是一种关联查询方式,它根据指定的关联条件,将两个表中满足条件的行组合在一起,并 包含没有匹配的行
    • 在 OUTER JOIN 中,包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 两种类型,它们分别表示查询左表和右表的所有行(即使没有被匹配),再加上满足条件的交集部分

题目:

    假设有一个学生表 student,包含以下字段:id(学号)、name(姓名)、age(年龄)、class_id(班级编号)。还有一个班级表 class,包含以下字段:id(班级编号)、name(班级名称)、level(班级级别)。

    请你编写一个 SQL 查询,根据学生表和班级表之间的班级编号进行匹配,返回学生姓名(student_name)、学生年龄(student_age)、班级编号(class_id)、班级名称(class_name)、班级级别(class_level),要求必须返回所有学生的信息(即使对应的班级编号不存在)。
select s.name'student_name',s.age'student_age',class_id,c.name'class_name',c.level'class_level' 
from 
student s left join calss c on s.class_id = c.id

14.组合查询

组合查询是一种将多个 SELECT 查询结果合并在一起的查询操作。

  • 常见的组合查询:UNION 和 UNION ALL。

  • UNION:用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行

  • UNION ALL:将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留

      题目:
    
      假设有一个学生表 student,包含以下字段:id(学号)、name(姓名)、age(年龄)、score(分数)、class_id(班级编号)。还有一个新学生表 student_new,包含的字段和学生表完全一致。
    
      请编写一条 SQL 语句,获取所有学生表和新学生表的学生姓名(name)、年龄(age)、分数(score)、班级编号(class_id)字段,要求保留重复的学生记录。
    
select name,age,score,class_id from student UNION ALL select name,age,score,class_id from student_new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值