## 子查詢:
把查詢結果作為值來使用
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');
**一行多列(行子查詢)** 構建出一行, 運算符 =,子查詢只能返回一行

**表(多行多列)** 通常在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子查詢 是否存在
如果子查詢可以返回數據則為真,否則為假


## 連接查詢
將所有數據,按照某種條件,連接起來,再進行篩選處理
連接分類:——根據連接條件不同
### **內連接**: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個表的信息放到一個結果里面

### **外連接**: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;

***左外連接:*** 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 ..................

## 數據導入
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** 刪除表,再新建一個同樣的表名,即初始化
### 更新數據

多表更新
