• mysql连接查询


    1.连接查询

    作用:当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回

    2、连接类型

    内连接

    定义:

    内连接查询:查询结果为两个表匹配到的数据

    语法1:

    select * from 表1

    inner join 表2 on 表1.列 = 表2.列

    例:查询学生信息及学生成绩

     语法2:

     select * from 表1,表2 on 表1.列 = 表2.列

    注:通常不使用此语法,效率较低

     3个表连接

    -- 查询学生信息及学生的课程对应的成绩

    显示指定列

    左连接

    定义:

    查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据(匹配不到)使用null填充

    语法:

    select * from 表1

    left join 表2 on 表1 .列 = 表2.列

    例:

    查询所有学生的成绩,包括没有成绩的学生

     例:

    查询所有学生的成绩,包括没有成绩的学生,需要显示课程名

    右连接 

     定义:

    右连接查询:查询结果为两个表匹配到的数据加右表特有的数据,对于左边中不存在的数据使用null填充

    语法:

    select * from 表1

    right join 表2 on 表1 .列 = 表2.列

    例:查询所有学生的成绩,包括没有成绩的学生 

     例:

    查询所有学生的成绩,包括没有成绩的学生,需要显示课程名

    自关联

    定义

    连接查询的一种应用,对同一个表查询多次,把查询多次得到的结果连接组成新的结果 

    主要应用场景:数据有上下级关系,并且存于同一个表中

     例:查询河南省的所有城市

     

    例:查询郑州市的所有区县 

     

    例:查询河南省所有区县

     子查询

    定义

    在一个select 语句中,嵌入另外一个select语句,那么嵌入的那个select语句称之为子查询语句

    主查询

    外城的select称之为主查询语句

    主查询和子查询的关系

    • 子查询是嵌入到主查询中
    • 子查询是辅助主查询的,要么充当条件,要么充当数据源
    • 子查询是可以独立存在的语句是一条转正的select语句 

    子查询充当条件

    以下例子中子查询返回结果只有一个值(一行一列),这种称之为标量子查询

    例1:查询大于平均年龄的学生

    -- 查询班里学生的平均年龄
    SELECT AVG(age) FROM students --21.5833
    -- 查询大于平均年龄的学生
    SELECT * from students where age > 21.5833

    SELECT * FROM students where age >(SELECT AVG(age) FROM students);

    以下例子返回数据结果是一列数据(一列多行),这种称之为列子查询

    例: 查询18岁学生的成绩,要求显示成绩

    -- 学生表中查询18岁学生的学号
    SELECT studentNo from students WHERE age = 18

    -- 成绩表中根据学号查询成绩
    SELECT * FROM scores where studentNo in ('002','006' )

    SELECT * FROM scores where studentNo in (SELECT studentNo from students WHERE age = 18 )

     以下例子查询的结果是一行(一行多列),这种称之为行子查询

    例:查询和王昭君同班、同龄的学生信息 

    SELECT class,age from students where name = '王昭君'

    SELECT * from students where class = '1班' and age = 20
    SELECT * from students where (class,age) = ('1班' , '20')
    SELECT * from students where (class,age) = (SELECT class,age from students where name = '王昭君')

     子查询充当数据源

    以下例子子查询返回的结果是多行多列(相当于一个表),这种称之为表级子查询;

    例:查询数据库和系统测试的课程成绩

    子查询中特定关键字使用 

    in范围 

    格式:主查询where条件in(列子查询)

    any|some任意一个

    格式:主查询where 列 = any(列子查询)

    在条件查询的结果中匹配任意一个几个,等价于in  

    all

    格式:主查询where列 = all(列子查询):等价于里面所有

    格式:主查询where列<>all(列子查询):不等于其中所有 

  • 相关阅读:
    springboot幼儿园书刊信息管理系统毕业设计源码141858
    前端js jsencrypt加密,后端解密
    一次Django SSO简单实现
    开源?Highcharts JS 10.3.2 | Highcharts Javascript
    Go: panic / recover 简介与实践
    【附源码】Python计算机毕业设计团结里小区疫情防控系统
    各位同志,Android studio打不开,提示什么动态链接库
    开题报告:基于java企业公司网站系统 毕业设计论文开题报告模板
    【MySQL】MySQL表之联合查询(多表查询)
    【好用的个人工具】搭建一款实用的个人IT工具箱——it-tools
  • 原文地址:https://blog.csdn.net/weixin_45490820/article/details/124470657