第15周所学MySQL笔记——连接查询、子查询、(插入,修改,删除)数据
一.连接查询:
(一).内连接查询 inner join
关键字:inner join on
语 句:select * from one_table a inner join two_table on onw.o_id = t.t_id;
说明: 组合两个表中的记录,返回关联字段的记录,也就是返回两个表的的交集部分。
(二).左连接查询 left join
关键字:left join on /left outer join on
语句: select * from one_table a left join two_table on onw.o_id = t.t_id;
说明:left join 是left outer join 的简称,它的全称是左外连接,是外连接中的一种。左(外)连接,左表(one_table)的记录将会全部表示出来,而右表(two_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL.
(三). 右连接 reght join
关键字:right join on /right outer join on
语句: select * from one_table a right join two_table on onw.o_id = t.t_id;
说明:right join 是right outer join 的简称,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,右表(one_table)的记录将会全部表示出来,而左表(two_table)只会显示符合搜索条件的记录。左表记录不足的地方均为NULL.
(四).全连接 union
关键字: union /union all
语句:(select colum1,coulum2…colum N from tableA) union / union all (select colum1,coulum2…colum N from tableB)
注意:1.通过union 连接的sql它们分别单独取出的列数必须相同;
2.不要求合并的表名称相同时,以第一个sql表列名为准;
3. 使用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用union 进行合并,而是通常采用union all 进行合并;
4. 被union 连接的sql 子句,单个子句中不用写order by ,因为不会右排序的效果,但可以对最终的结果集进行排序;
二. 子查询
1.什么是子查询?
子查询就是在查询中有两个查询语句,一个为主查询还有一个子查询。并且先执行子查询再执行主查询。
2.子查询需要注意有哪十大问题?
(1、子查询语句中的小括号
(2、子查询的书写风格
(3、可以使用的子查询位置(where,select,having,from)
(4、不可以使用的子查询位置(group by)
(5、重点:from后面的子查询
(6、主查询和子查询可以不是同一张表
(7、一般再子查询中不使用排序,只有在top-N分析问题中,必须对子查询排序
(8、一般先执行子查询,再执行主查询;但相关子查询例外
(9、单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
(10.注意:子查询中是null值问题
三. 插入、更新与删除数据
(一).插入数据:
语法:
insert into 表名(列名,......) values (值1,...);
注意:
1.插入的类型与列的类型一致或兼容;
2.不可以为NULL的列必须插入值,可以为NULL的列如何插入值?
答:方一:列名的值写null,方二:列名和值都不写。
3.列的顺序可以不唯一,但是值要和列名对齐。
4.列数和值的个数必须一致。
5.可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致。
(二). 修改数据:
语法:
update 表名
set 列=新值,列=新值,...
where 筛选条件 ;
1.分单表修改和多表修改。
(三). 删除数据:
方法一:delete
语法:
1.单表的删除 :
delets from 表名 where 筛选条件
2.多表的删除 【补充】
方法二:truncate
语法: truncate table 表名 ;