多表查询
(一)查询结果去重 (distinct 关键字)
注意:distinct 只能出现在所有字段的最前面。表示对后面所有字段联合去重。
(二)连接查询(及其重要!!!)
(1)什么是连接查询?
在实际开发中往往不止一张表(一张表太过冗余),需要对多张表进行联合查询取出最终的结果。(关系性数据库的理解就是多张表相互之间有关系)
(2)连接查询的分类
(3)连接查询的笛卡尔积现象
重点:当两张表进行连接查询的时候,如果没有进行任何条件限制,最终的查询结果条数是两张表记录条数的乘积。另外,在连接查询时最好给每个表起别名,select的时候限定要查询表的字段名,可以省去在其他表中查找该字段的操作,执行 效率高。
怎么避免笛卡尔积现象?----->当然是加条件进行过滤。
避免了笛卡尔积现象,会减少查询的次数吗?----->不会,查询次数仍是笛卡尔积次,只不过显示的是符合条件的记录。
(4)内连接之等值连接:(inner表示内连接,可省)最大特点是:条件是等量关系
该语法是SQL99,这种语法结构更清晰一些:表的连接条件和后来的where条件分离了。
例:查询每个员工的部门名称,要求显示员工名和部门名
(5)内连接之非等值连接:(连接条件是非等值关系)
例:找出每个员工的工资等级,要求显示员工名,工资,工资等级。
(6)自连接:(一张表看做两张表,自己连接自己)
例:找出每个员工的上级领导,要求显示员工名和对应的领导名。(需要对同一张表起不同的别名)
(7)外连接:(最主要的特点是主表的数据无条件的全部查出来,实际开发中外连接居多)
a.内连接和外连接的区别:
b.外连接的分类:
c.例:找出每个员工的上级领导。主要搞清楚谁是主表,左连接主表放在左边,右连接主表放在右边(下面是左连接,a就是主表)
注意:区分内连接和外连接 不是看inner和outer(因为都可以省略),而是看有无left或right,有则是外连接,无则是内连接。
(8)三张表以上的连接查询
例:找出每一个员工的部门名称,工资等级,以及上级领导。
注意查询的数据若有空一般需要用到外连接,否则用内连接。
(三)子查询
(1)什么是子查询,子查询都可以出现在哪里?
(2)from后嵌套子查询(重要!)
注意拆分题目要求
(四)union (可以将查询的结果集相加)
(五)limit(重点中的重点,以后分页查询全靠它!)
(1)limit是mysql特有的,其他数据库中没有,不通用。
(2)limit取结果集中的部分数据,这是它的作用。
(3)语法机制:
(4)limit是sql语句最后执行的一个环节
(5)通用的标准分页sql
(六)创建表(可以在建表时后跟default来指定默认值)
删除表:drop table if exists xxx表名
(七)insert语句向表中插入数据
复制与查询结果插入
(八)修改数据:update
(九)删除数据:delete
(十)约束(Constraint,创建表时加在字段后)
(1)什么是约束?常见的约束有哪些?
参考:https://www.bilibili.com/video/BV1fx411X7BD?