## 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删除可以回滚.
*/
~~~