1
1
<!-- GFM-TOC -->
2
2
* [ 基础] ( #基础 )
3
+ * [ 创建表] ( #创建表 )
4
+ * [ 插入] ( #插入 )
5
+ * [ 更新] ( #更新 )
6
+ * [ 删除] ( #删除 )
7
+ * [ 修改表] ( #修改表 )
3
8
* [ 查询] ( #查询 )
4
9
* [ 排序] ( #排序 )
5
10
* [ 过滤] ( #过滤 )
18
23
* [ 自然连接] ( #自然连接 )
19
24
* [ 外连接] ( #外连接 )
20
25
* [ 组合查询] ( #组合查询 )
21
- * [ 插入] ( #插入 )
22
- * [ 更新] ( #更新 )
23
- * [ 删除] ( #删除 )
24
- * [ 创建表] ( #创建表 )
25
- * [ 修改表] ( #修改表 )
26
26
* [ 视图] ( #视图 )
27
27
* [ 存储过程] ( #存储过程 )
28
28
* [ 游标] ( #游标 )
@@ -43,6 +43,90 @@ SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,
43
43
44
44
SQL 语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的 DBMS 以及配置。
45
45
46
+ ``` sql
47
+ # 注释
48
+ SELECT *
49
+ FROM mytable; -- 注释
50
+ /* 注释1
51
+ 注释2 */
52
+ ```
53
+
54
+ # 创建表
55
+
56
+ ``` sql
57
+ CREATE TABLE mytable (
58
+ id INT NOT NULL AUTO_INCREMENT,
59
+ col1 INT NOT NULL DEFAULT 1 ,
60
+ col2 VARCHAR (45 ) NULL ,
61
+ col3 DATE NULL ,
62
+ PRIMARY KEY (` id` ));
63
+ ```
64
+
65
+ # 插入
66
+
67
+ ** 普通插入**
68
+
69
+ ``` sql
70
+ INSERT INTO mytable(col1, col2)
71
+ VALUES (val1, val2);
72
+ ```
73
+
74
+ ** 插入检索出来的数据**
75
+
76
+ ``` sql
77
+ INSERT INTO mytable1(col1, col2)
78
+ SELECT col1, col2
79
+ FROM mytable2;
80
+ ```
81
+
82
+ ** 将一个表的内容复制到一个新表**
83
+
84
+ ``` sql
85
+ CREATE TABLE newtable AS
86
+ SELECT * FROM mytable;
87
+ ```
88
+
89
+ # 更新
90
+
91
+ ``` sql
92
+ UPDATE mytable
93
+ SET col = val
94
+ WHERE id = 1 ;
95
+ ```
96
+
97
+ # 删除
98
+
99
+ ``` sql
100
+ DELETE FROM mytable
101
+ WHERE id = 1 ;
102
+ ```
103
+
104
+ ** TRUNCATE TABLE** 可以清空表,也就是删除所有行。
105
+
106
+ 使用更新和删除操作时一定要用 WHERE 子句,不然会把整张表的数据都破坏。可以先用 SELECT 语句进行测试,防止错误删除。
107
+
108
+ # 修改表
109
+
110
+ ** 添加列**
111
+
112
+ ``` sql
113
+ ALTER TABLE mytable
114
+ ADD col CHAR (20 );
115
+ ```
116
+
117
+ ** 删除列**
118
+
119
+ ``` sql
120
+ ALTER TABLE mytable
121
+ DROP COLUMN col;
122
+ ```
123
+
124
+ ** 删除表**
125
+
126
+ ``` sql
127
+ DROP TABLE mytable;
128
+ ```
129
+
46
130
# 查询
47
131
48
132
** DISTINCT**
@@ -80,15 +164,6 @@ FROM mytable
80
164
LIMIT 2 , 3 ;
81
165
```
82
166
83
- ** 注释**
84
-
85
- ``` sql
86
- # 注释
87
- SELECT *
88
- FROM mytable; -- 注释
89
- /* 注释1
90
- 注释2 */
91
- ```
92
167
93
168
# 排序
94
169
@@ -320,7 +395,7 @@ ORDER BY cust_name;
320
395
321
396
# 连接
322
397
323
- 连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON。
398
+ 连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON 而不是 Where 。
324
399
325
400
连接可以替换子查询,并且比子查询的效率一般会更快。
326
401
@@ -378,7 +453,7 @@ where e1.department = e2.department
378
453
379
454
自然连接是把同名列通过等值测试连接起来的,同名列可以有多个。
<
F438
tr class="diff-line-row">380
455
381
- 内连接和自然连接的区别:内连接提供连接的列,而自然连接自动连接所有同名列;内连接属于自然连接 。
456
+ 内连接和自然连接的区别:内连接提供连接的列,而自然连接自动连接所有同名列。
382
457
383
458
```
384
459
select *
@@ -387,14 +462,14 @@ from employee natural join department;
387
462
388
463
## 外连接
389
464
390
- 外连接保留了没有关联的那些行。分为左外连接,右外连接以及全外连接,左外连接就是保留左表的所有行 。
465
+ 外连接保留了没有关联的那些行。分为左外连接,右外连接以及全外连接,左外连接就是保留左表没有关联的行 。
391
466
392
467
检索所有顾客的订单信息,包括还没有订单信息的顾客。
393
468
394
469
```
395
470
select Customers.cust_id, Orders.order_num
396
471
from Customers left outer join Orders
397
- on Customers.cust_id = Orders.curt_id
472
+ on Customers.cust_id = Orders.curt_id;
398
473
```
399
474
400
475
如果需要统计顾客的订单数,使用聚集函数。
@@ -404,14 +479,16 @@ select Customers.cust_id,
404
479
COUNT(Orders.order_num) as num_ord
405
480
from Customers left outer join Orders
406
481
on Customers.cust_id = Orders.curt_id
407
- group by Customers.cust_id
482
+ group by Customers.cust_id;
408
483
```
409
484
410
485
# 组合查询
411
486
412
- 使用 ** UNION** 来连接两个查询,每个查询必须包含相同的列、表达式或者聚集函数。
487
+ 使用 ** UNION** 来组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果为 M+N 行。
488
+
489
+ 每个查询必须包含相同的列、表达式或者聚集函数。
413
490
414
- 默认会去除相同行,如果需要保留相同行,使用 UNION ALL 。
491
+ 默认会去除相同行,如果需要保留相同行,使用 UNION ALL。
415
492
416
493
只能包含一个 ORDER BY 子句,并且必须位于语句的最后。
417
494
@@ -425,81 +502,7 @@ FROM mytable
425
502
WHERE col = 2 ;
426
503
```
427
504
428
- # 插入
429
-
430
- ** 普通插入**
431
-
432
- ``` sql
433
- INSERT INTO mytable(col1, col2)
434
- VALUES (val1, val2);
435
- ```
436
-
437
- ** 插入检索出来的数据**
438
-
439
- ``` sql
440
- INSERT INTO mytable1(col1, col2)
441
- SELECT col1, col2
442
- FROM mytable2;
443
- ```
444
-
445
- ** 将一个表的内容复制到一个新表**
446
-
447
- ``` sql
448
- CREATE TABLE newtable AS
449
- SELECT * FROM mytable;
450
- ```
451
-
452
- # 更新
453
-
454
- ``` sql
455
- UPDATE mytable
456
- SET col = val
457
- WHERE id = 1 ;
458
- ```
459
-
460
- # 删除
461
-
462
- ``` sql
463
- DELETE FROM mytable
464
- WHERE id = 1 ;
465
- ```
466
-
467
- ** TRUNCATE TABLE** 可以清空表,也就是删除所有行。
468
-
469
- 使用更新和删除操作时一定要用 WHERE 子句,不然会把整张表的数据都破坏。可以先用 SELECT 语句进行测试,防止错误删除。
470
-
471
- # 创建表
472
-
473
- ``` sql
474
- CREATE TABLE mytable (
475
- id INT NOT NULL AUTO_INCREMENT,
476
- col1 INT NOT NULL DEFAULT 1 ,
477
- col2 VARCHAR (45 ) NULL ,
478
- col3 DATE NULL ,
479
- PRIMARY KEY (` id` ));
480
- ```
481
-
482
- # 修改表
483
-
484
- ** 添加列**
485
-
486
- ``` sql
487
- ALTER TABLE mytable
488
- ADD col CHAR (20 );
489
- ```
490
-
491
- ** 删除列**
492
-
493
- ``` sql
494
- ALTER TABLE mytable
495
- DROP COLUMN col;
496
- ```
497
505
498
- ** 删除表**
499
-
500
- ``` sql
501
- DROP TABLE mytable;
502
- ```
503
506
504
507
# 视图
505
508
0 commit comments