企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 子查询: 把查询结果作为值来使用 var1=select max(days) from teacher class; select name gender from teacher class where days=var1; ### 子查询的位置: **where型** **from型** **exists型** ### 子查询返回值: **一个值(标量)** 获得一个值后,使用关系运算符连接 < , = ,> ,<= , >=,!= **一列(列子查询) in,not in,any(任何一个),all(所有)** =any(集合)=in (等于集合中的任何一个) !=all(集合)=not in 不等于集合中的所有元素 同一个字段的值的集合 用 in 判断是否在这个范围内 //先查询出姓名,然后用姓名查询他的个人信息 select * from teacher where t_name in (select t_name from class where cname='php0228'); **一行多列(行子查询)** 构建出一行, 运算符 =,子查询只能返回一行 ![](https://box.kancloud.cn/b10e1213f28c89ba6a4a46170184057b_1039x79.png) **表(多行多列)** 通常在from里面 select * from(table) where ..... from 里面必须是一个表,不能是一个结果,所以必须给表起**别名** select * from (select t_name,c_name from teacher_class where days>15) as temp where t_anme like '李%'; ## exists子查询 是否存在 如果子查询可以返回数据则为真,否则为假 ![](https://box.kancloud.cn/eca5be2ef06e2e58370e985432ef9141_876x98.png) ![](https://box.kancloud.cn/953e9656ceef817724e2f7d7d56a777d_867x83.png) ## 连接查询 将所有数据,按照某种条件,连接起来,再进行筛选处理 连接分类:——根据连接条件不同 ### **内连接**:inner 要求:连接的多个数据都必须存在,才能进行内连接 inner join 默认可以省略inner `tableleft inner join tableright on 连接条件` 分类: 内连接在连接时候,是可以省略连接条件的。所有的左表数据都要与右表的记录做一次连接。m*n个记录, 成为**交叉连接**,或笛卡尔积。(做色子投递游戏) 此时可以使用 cross join 代替 inner join的无条件格式 有条件的内连接,可以过滤非法连接。 条件分类: **过滤条件**:** where** 是在m*n条记录里面过滤 **连接条件**:** on ** 和where结果一样,但逻辑不一样,on的意思是连接的时候过滤掉无效连接。 on 查询的数据量比较少。 ** using** using 要求负责连接的2个实体之间的字段名称一致 select * from tb1 join tb2 using id; 2个表的信息放到一个结果里面 ![](https://box.kancloud.cn/98f492e5ba45224e2c7a5828a02598c0_1088x183.png) ### **外连接**:outer 负责连接的一个或多个数据不存在,(有这个老师,但是没有带过课,即个别数据不存在) 外连接,不能使用where 连接的时候最好都加上表名指定字段,**表别名**——保证简洁和清晰 **列别名**:select t.id as tid,tc.id as tcid from ............ select * from student as s join select * from teacher as t where s.name and t.days>15; ![](https://box.kancloud.cn/d4b821331526f976835b71383aceeffb_1076x138.png) ***左外连接:*** left join 生成的结果中左边是最重要的 ***右外连接:*** right join 不能使用没有条件的外连接。 ### **自然连接**: 通过mysql自己的判断完成的连接,不需要条件 select * from one nature join two; 自动以某一个相同字段作为连接条件 自然内连接: nature join 自然外连接: nature left join natrue right join ## select * into outfile 导出结果,纯数据备份,不包括任何格式 select 用法,查询结果保存到文件里面 select * into outfile "d:/one" from employee; 生成的文件格式: 默认采用行区分记录,用制表符区分字段 为了满足特殊需求,这个是可以改的。 字段选项:fields terminated by '\t' enclosed by '' escaped by '\\' 行选项:lines terminated by '\n' starting by '' enclosed 字段的值包裹符号 starting 以什么开始 select * into outfile "d:/one" fields terminated by ',' lines terminated by '\n' starting by '' from employee; ## 增加数据 insert into 表名(字段列表) values (值列表) 插入部分字段数据,没有插入的字段使用默认值,default 或者null 多个记录可以用括号分开。 insert into tb1(id,username) values (1,ssssss),(2,aaa),(3,sfdfdf); **在主键冲突时采用更新操作** ~~~ insert into tb1(id,username) values (1,杨露禅) on duplicate key update username="杨露禅"; ~~~ 插入部分字段可以使用**set** `insert into teacher set name="张三丰",sex="男";` 插入的语句可以使用select 查询到的数据 **insert into ....select.........** `insert into teacher (tname,cname) select (tname,cname) from teacher;` 插入默认值 **default** insert into teacher values (10,'yyy',default); insert into teacher values (10,'yyy',default(字段名)); **插入数据replace** 把insert 换成replace 主键不冲突就插入,主键冲突就替换 replace into .................. ![](https://box.kancloud.cn/b59d4b5911cea3277e9f9b0124cfcb05_364x156.png) ## 数据导入 load data infile 'e:/one' into table teacher; ## 删除数据 允许使用条件,及limit 6 一次性只能删除6条 常见:order by limit配合使用 delete from teacher order by name limit 7 ### 删除多个表记录 delete from tb1 ,tb2 using tb1 join tb2 on .....=....... **truncate** 删除表,再新建一个同样的表名,即初始化 ### 更新数据 ![](https://box.kancloud.cn/49b86a06ec69d498b071954fcbbfa5cc_334x92.png) 多表更新 ![](https://box.kancloud.cn/59c33de840c4f5bbb2e9bda065080e8d_1073x144.png)