## 5.1 union 將多條查詢語句的結果合并成一張表
```
語法:(默認將合并后的表格去除重復數據)
查詢語句1
union
查詢語句2
union
查詢語句n...
```
* 條件:查詢語句的格式必須相同,類型要兼容
* 案例:-- 4、查詢平均成績小于60分的同學的學生編號和學生姓名和平均成績
```
-- (包括有成績的和無成績的)
SELECT s1.s_id,s1.s_name,avg(s_score) 平均
from student s1 LEFT JOIN score s2
on s1.s_id=s2.s_id
GROUP BY s1.s_id,s1.s_name HAVING 平均<60
UNION
SELECT s1.s_id,s1.s_name,0 平均 #將沒在成績表里的學生找出來
from student s1 WHERE s1.s_id not in(
SELECT s_id FROM score)
```
```
語法:(union all 不會去除重復數據)
查詢語句1
union all
查詢語句2
union all
查詢語句n...
```
>[info]SQL不支持全外連接,但可以通過union間接實現全外連接
## 5.2 DDL數據定義語言和DML數據操作語言
create database [if not exists]庫名;
RENAME DATABASE books TO 新庫名; -- mysql5.1.23后就把他給刪除了,想要重命名要找其他方法
> 更改庫的字符集 ALTER DATABASE books CHARACTER SET gbk;
> 庫的刪除 DROP DATABASE IF EXISTS books;
create table 表名(列名1 類型,列名2 類型,列名n 類型)
alter table 表名 add|drop|modify|change column 列名 【列類型 約束】;
drop table IF EXISTS 表名
```
insert into 表名(字段) values(值)
update 表名 set 字段=值
delete from 表 where 條件
```
- 1.僅僅復制表的結構
`CREATE TABLE copy LIKE author;
`
- 2.復制表的結構+數據
```
CREATE TABLE copy2
SELECT * FROM author;
```
- 3.只復制部分數據
```
CREATE TABLE copy3
SELECT id,au_name
FROM author
WHERE nation='中國';
```
- 4.修改多表的記錄
*案例 1:修改張無忌的女朋友的手機號為114
```
UPDATE boys bo
INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='119',bo.`userCP`=1000
WHERE bo.`boyName`='張無忌';
```
*案例2:修改沒有男朋友的女神的男朋友編號都為2號
```
UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`boyfriend_id`=2
WHERE bo.`id` IS NULL;
```
>[danger]delete pk truncate【面試題★】
~~~
/*
1.delete 可以加where 條件,truncate不能加
2.truncate刪除,效率高一丟丟
3.假如要刪除的表中有自增長列,如果用delete刪除后,再插入數據,自增長列的值從斷點開始(從被刪除的數據值之后開始),
而truncate刪除后,再插入數據,自增長列的值從1開始。
4.truncate刪除沒有返回值,delete刪除有返回值
5.truncate刪除不能回滾,delete刪除可以回滾.
*/
~~~