auto commit

This commit is contained in:
CyC2018 2018-03-05 09:47:11 +08:00
parent dbe4c30da2
commit 3b567e0d91

View File

@ -1,5 +1,10 @@
<!-- GFM-TOC -->
* [基础](#基础)
* [创建表](#创建表)
* [插入](#插入)
* [更新](#更新)
* [删除](#删除)
* [修改表](#修改表)
* [查询](#查询)
* [排序](#排序)
* [过滤](#过滤)
@ -18,11 +23,6 @@
* [自然连接](#自然连接)
* [外连接](#外连接)
* [组合查询](#组合查询)
* [插入](#插入)
* [更新](#更新)
* [删除](#删除)
* [创建表](#创建表)
* [修改表](#修改表)
* [视图](#视图)
* [存储过程](#存储过程)
* [游标](#游标)
@ -43,6 +43,90 @@ SQLStructured Query Language),标准 SQL 由 ANSI 标准委员会管理,
SQL 语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的 DBMS 以及配置。
```sql
# 注释
SELECT *
FROM mytable; -- 注释
/* 注释1
注释2 */
```
# 创建表
```sql
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
col1 INT NOT NULL DEFAULT 1,
col2 VARCHAR(45) NULL,
col3 DATE NULL,
PRIMARY KEY (`id`));
```
# 插入
**普通插入**
```sql
INSERT INTO mytable(col1, col2)
VALUES(val1, val2);
```
**插入检索出来的数据**
```sql
INSERT INTO mytable1(col1, col2)
SELECT col1, col2
FROM mytable2;
```
**将一个表的内容复制到一个新表**
```sql
CREATE TABLE newtable AS
SELECT * FROM mytable;
```
# 更新
```sql
UPDATE mytable
SET col = val
WHERE id = 1;
```
# 删除
```sql
DELETE FROM mytable
WHERE id = 1;
```
**TRUNCATE TABLE** 可以清空表,也就是删除所有行。
使用更新和删除操作时一定要用 WHERE 子句,不然会把整张表的数据都破坏。可以先用 SELECT 语句进行测试,防止错误删除。
# 修改表
**添加列**
```sql
ALTER TABLE mytable
ADD col CHAR(20);
```
**删除列**
```sql
ALTER TABLE mytable
DROP COLUMN col;
```
**删除表**
```sql
DROP TABLE mytable;
```
# 查询
**DISTINCT**
@ -80,15 +164,6 @@ FROM mytable
LIMIT 2, 3;
```
**注释**
```sql
# 注释
SELECT *
FROM mytable; -- 注释
/* 注释1
注释2 */
```
# 排序
@ -320,7 +395,7 @@ ORDER BY cust_name;
# 连接
连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON。
连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON 而不是 Where
连接可以替换子查询,并且比子查询的效率一般会更快。
@ -378,7 +453,7 @@ where e1.department = e2.department
自然连接是把同名列通过等值测试连接起来的,同名列可以有多个。
内连接和自然连接的区别:内连接提供连接的列,而自然连接自动连接所有同名列;内连接属于自然连接
内连接和自然连接的区别:内连接提供连接的列,而自然连接自动连接所有同名列。
```
select *
@ -387,14 +462,14 @@ from employee natural join department;
## 外连接
外连接保留了没有关联的那些行。分为左外连接,右外连接以及全外连接,左外连接就是保留左表的所有行。
外连接保留了没有关联的那些行。分为左外连接,右外连接以及全外连接,左外连接就是保留左表没有关联的行。
检索所有顾客的订单信息,包括还没有订单信息的顾客。
```
select Customers.cust_id, Orders.order_num
from Customers left outer join Orders
on Customers.cust_id = Orders.curt_id
on Customers.cust_id = Orders.curt_id;
```
如果需要统计顾客的订单数,使用聚集函数。
@ -404,14 +479,16 @@ select Customers.cust_id,
COUNT(Orders.order_num) as num_ord
from Customers left outer join Orders
on Customers.cust_id = Orders.curt_id
group by Customers.cust_id
group by Customers.cust_id;
```
# 组合查询
使用 **UNION**连接两个查询,每个查询必须包含相同的列、表达式或者聚集函数
使用 **UNION**组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果为 M+N 行
默认会去除相同行,如果需要保留相同行,使用 UNION ALL 。
每个查询必须包含相同的列、表达式或者聚集函数。
默认会去除相同行,如果需要保留相同行,使用 UNION ALL。
只能包含一个 ORDER BY 子句,并且必须位于语句的最后。
@ -425,81 +502,7 @@ FROM mytable
WHERE col =2;
```
# 插入
**普通插入**
```sql
INSERT INTO mytable(col1, col2)
VALUES(val1, val2);
```
**插入检索出来的数据**
```sql
INSERT INTO mytable1(col1, col2)
SELECT col1, col2
FROM mytable2;
```
**将一个表的内容复制到一个新表**
```sql
CREATE TABLE newtable AS
SELECT * FROM mytable;
```
# 更新
```sql
UPDATE mytable
SET col = val
WHERE id = 1;
```
# 删除
```sql
DELETE FROM mytable
WHERE id = 1;
```
**TRUNCATE TABLE** 可以清空表,也就是删除所有行。
使用更新和删除操作时一定要用 WHERE 子句,不然会把整张表的数据都破坏。可以先用 SELECT 语句进行测试,防止错误删除。
# 创建表
```sql
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
col1 INT NOT NULL DEFAULT 1,
col2 VARCHAR(45) NULL,
col3 DATE NULL,
PRIMARY KEY (`id`));
```
# 修改表
**添加列**
```sql
ALTER TABLE mytable
ADD col CHAR(20);
```
**删除列**
```sql
ALTER TABLE mytable
DROP COLUMN col;
```
**删除表**
```sql
DROP TABLE mytable;
```
# 视图