数据库(mysql)-基础知识点-2

子查询

MySQL中的子查询(Subquery)是嵌套在其他SQL查询中的查询。子查询可以出现在SELECT、FROM或WHERE子句中,并用于返回将被用于外部查询的数据。子查询的结果可以是一个单一的值、一行、一列或多行多列的数据集。

单行单列查询 

 实例

#查询比齐雷老师工资高的有哪些 
SELECT name FROM teacher WHERE salary>(SELECT salary FROM teacher WHERE name='齐雷');
//注意需要写(查询语句) 查询齐雷工资的就是子查询

注意子查询需要用()括起来

聚合函数 查询结果集只有一个值

实例

#查询哪些老师工资高于平均水平
SELECT name,salary FROM teacher WHREE salary> (SELECT AVG(salary) FROM teacher );

多行单列查询

子查询的查询的结果集有多个值

进行等值判断是要配合: IN 或 NOT IN 使用

如果 进行关系的计算

 ANY 用于在查询中筛选符合特定条件的任意一个数据

 ALL 它通常用于指定某个操作应适用于所有相关的行或值。

>ANY 即只要大于多行数据任意一个就行 (>最小值)

<ANY 即只要小于多行数据任意一个就行 (<最大值)

>ALL 即必须全部大于所有值 (>最大值)

<ALL 即必须全部小于所有值(<最小值)

 实例

#查看与'祝雷'和李费水同班的同学有哪些
# 这边是符合其中之一就行 ANY
SELECT name,age,gender,class_id FROM student WHERE class_id IN (SELECT class_id FROM student WHERE name IN ('祝雷','李费水'))
#查看比教科目2和教科目4老师工资都高的老师都有谁
多行单子列进行关系运算
SELECT name,salary FROM teacher WHERE salary>ALL(SELECT MAX(salary) FROM teacher WHERE subject_id IN(2,4));

更改数据

#将同李伟老师的科目的老师工资加500
UPDATE teacher SET salary=salary+500 WHERE subject_id=(SELECT subject_id FROM teacher WHERE name='李伟');
#将李伟的工资改成和李建明一样
UPDATE teacher SET salary =(SELECT salary FROM teacher WHERE name='李建明') WHERE name ='李伟';

 删除数据

#删除同李明老师教同一科目的所有老师
DELETE FROM teacher WHERE subject_id =(SELECT subject_id FROM teacher WHERE name='李明')

联表查询

联表查询在关系型数据库中非常常见,用于从多个表中检索相关数据

内连接

在SQL中, JOIN关键字默认执行的是内连接。内连接返回两个表中满足连接条件的记录。如果不明确指定连接类型, JOIN 就相当于  INNER JOIN。

SELECT   
    -- 选择要显示的列,可以是来自一个表的列,也可以是两个表通过JOIN操作关联后的列  
    table1.column1,   
    table1.column2,   
    table2.columnA,   
    table2.columnB  
FROM   
    -- 第一个表名  
    table1  
INNER JOIN   
    -- 第二个表名  
    table2   
ON   
    -- 指定JOIN条件,即两个表中用于匹配的列  
    table1.matching_column = table2.matching_column  
WHERE   
    -- 可选的WHERE子句,用于进一步过滤结果  
    some_condition;

实例 

#查询教语文老师的名字(这边teacher表有老师姓名和subject表要科目名称)
SELECT teacher.name,subject.name FROM teacher JOIN subject ON teacher.subject_id = subject.id  WHERE subject.name='语文';
SELECT teacher.name,subject.name FROM subject JOIN teacher ON  subject.id = teacher.subject_id WHERE subject.name='语文';

注意如果两个表中都要字段需要加对应的表名

否则 会报字段名模糊

相关推荐

  1. Mysql数据库基础知识2

    2024-04-10 14:30:01       5 阅读
  2. mysql 数据库基础知识

    2024-04-10 14:30:01       35 阅读
  3. mysql基本知识

    2024-04-10 14:30:01       19 阅读
  4. Mysql数据库基础知识1

    2024-04-10 14:30:01       27 阅读
  5. Mysql--基础知识--86--慢查询

    2024-04-10 14:30:01       5 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 14:30:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 14:30:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 14:30:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 14:30:01       18 阅读

热门阅读

  1. leetcode2529--正整数和负整数的最大计数

    2024-04-10 14:30:01       13 阅读
  2. vs2019不能创建控制台程序

    2024-04-10 14:30:01       13 阅读
  3. LeetCode热题100

    2024-04-10 14:30:01       9 阅读
  4. 联邦学习中的差分隐私与同态加密

    2024-04-10 14:30:01       14 阅读
  5. 渗透工具及其知识库(个人笔记)

    2024-04-10 14:30:01       12 阅读
  6. 程序员如何搞副业?

    2024-04-10 14:30:01       12 阅读
  7. 关于可视化大屏适配

    2024-04-10 14:30:01       14 阅读
  8. LeetCode 518. 零钱兑换 II

    2024-04-10 14:30:01       13 阅读
  9. 代码学习记录39---动态规划

    2024-04-10 14:30:01       11 阅读
  10. 由于等待端口使用超时,无法启动内核

    2024-04-10 14:30:01       13 阅读
  11. 【C语言】关键字选择题

    2024-04-10 14:30:01       11 阅读
  12. Redis相关知识汇总

    2024-04-10 14:30:01       13 阅读