第六章 多表操作
- 联合查询
- 基本语法
- select - from -1-
- union
- select - from -2-
- select字段数量必需一致,即select出来的列必需一致
- 本质:把两个查询结果进行合并
- 排序-->+order by
- 在SQL中,ORDER BY语句用于对查询结果集中的记录进行排序。默认情况下,ORDER BY会按照升序(ASC)对数据进行排序,即从小到大。如果需要按照降序(DESC)排序,即从大到小,可以在列名后面加上DESC关键字
- SELECT * FROM employees ORDER BY department_id ASC, hire_date DESC;-->这个SQL语句将选择员工表employees中的所有员工,并先按部门ID升序排序,然后在相同部门中按雇佣日期降序排序。
- WHERE category_id<>3--> 筛选出不等于3的category_id
- desc-->按降序排列
- 基本语法
- 连接查询(将多张表的关联字段进行连接并查询)
- 交叉连接查询
- 将查询出的表的行记录将那些连接组成
- 基本语法
- select - from -1- cross join -2-;
- select - from -1-,-2-;
- 内连接查询
- 交叉连接查询会返回很多无效的数据
- 内连接插叙可以限定查询语句的条件,去除无效数据
- 基本语法
- 隐式
- select - from -1-,-2- where -c-
- 显式
- select - from -1- join -2- on -c-
- 隐式
- 自连接查询
- 外连接查询
- 查询出其中一张数据表符合条件之外的其他数据
- 基本语法
- select ---.- from -1- left|right join -2- on -c-;
- left -->左查询,一般-1-为左表,-2-为右表;right-->右查询
- select ---.- from -1- left|right join -2- on -c-;
- 左外连接查询
- 左连接返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配的记录,那么结果中的右表字段将以NULL填充。
- 交叉连接查询
-
-
- 右外连接查询
- 右外连接查询
-
- 子查询
- 标量子查询
- 这种子查询只能返回一个值(一行一列)。它通常用在比较运算符(如=、>、<等)后面。
- SELECT employee_name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
- 表子查询
- 返回的是一个结果集,即多行多列的数据。它可以用在FROM子句或者IN、EXISTS、ANY、ALL等关键字后面.
- 标量子查询
- 外键约束
- 基本语法
- 创建表时添加
- 创建表时添加
- 基本语法
-
-
-
- constraint + 外键约束的名称
- foreign key(外键列名)
- references 主表名称(主键列名)
- 例子
-
-
-
-
-
-
- 在这个例子中,外键约束确保了员工表中的每个部门ID都必须在部门表中存在,否则尝试插入或更新员工表中的部门ID将会失败。
-
- 修改
-
-
-
-
-
- alter
- add
-
- 练习 【MySQL】练习——建库、建表、改表、查询-CSDN博客
-
- 动手实践 多表查询练习
- (4)查询拥有属性值个数大于1的商品的id和name
- (4)查询拥有属性值个数大于1的商品的id和name
-
-
-
- HAVING子句是用来对分组后的结果进行过滤的。
- 由于WHERE子句不能与聚合函数一起使用,HAVING子句被引入SQL语言以弥补这一不足。
- HAVING子句通常与GROUP BY子句一起使用,允许在分组的基础上进行条件筛选,只返回满足特定条件的分组数据。
- 基本语法
- HAVING子句是用来对分组后的结果进行过滤的。
-
-
-
-
-
-
-
- 例子
- 例子
-
-
-
-