SQL基础简明总结

Inner Join

只含有关联的行

1
2
3
4
5
6
7
SELECT field1, RTRIM(field2) AS f2
FROM table_one INNER JOIN table_two
ON table_one.table_two_id = table_two.id
GROUP BY field1, f2
AVING COUNT(table_two.credit) > 2
WHERE condition1 AND condition2 AND field1 LIKE '%@hotmail.com'
ORDER BY field3;

Self Join

可用于替代子查询

1
2
3
4
SELECT c1.cust_id, c1.cust_name, c1.cust_contact
FROM customers AS c1, customers AS c2
WHERE c1.cust_name = c2.cust_name
AND c2.cust_contact = 'Jim';

Outer Join

包含没有关联行的行

  • LEFT 指的是 OUTER JOIN 左边的表选择所有行
1
2
3
SELECT customers.cust_id, orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id;

UNION

连接多个查询,但必须每个查询的列必须相同

INSERT INTO

1
2
3
4
5
INSERT INTO table1(
field1,
field2
)
VALUES('a', 2);

VALUES 可替换为 SELECT 来插入检索的数据

SELECT INTO 可用于从表中导出数据到另一个表中

表操作

1
2
3
4
5
6
CREATE TABLE ...
DROP TABLE ...

ALTER TABLE table1
ADD field CHAR(20)
DROP COLUMN deletedField

视图

用于重用SQL语句,一般用于简化复杂的查询语句,或者是过滤数据

1
2
3
4
5
6
7
8
9
CREATE VIEW cv AS
SELECT ...
WHERE ...

SELECT field1, field2
FROM cv
WHERE ...

- 两个where子句会自动组合

事务

批量的SQL语句要么全部执行,要么都不执行或回退到特定语句

用于保证数据的完整性

事务可用于管理增删改语句

1
2
3
4
5
6
7
8
START TRANSACTION
...
SAVEPOINT delete1
...
ROLLBACK TO delete1
COMMIT;

- 可以在想结束的地方COMMIT,判断是否出错来执行回退

重要概念

主键 每行的唯一标示,值不能够重用,不允许为NULL,不允许用户修改,自动生成,关键词 PRIMARY KEY

外键 确保与此列关联的另一表的列存在引用的值,否则会报错,关键词

1
2
3
4
5
6
- 定义中
REFERENCE table1 (field1)
- 更改中
ALTER TABLE table1
ADD CONSTRAINT
FOREIGN KEY (user_id) REFERENCES user (id)

唯一约束 保证列中的值唯一,可包含NULL值,可修改可更新,使用关键词 UNIQUE

检查约束 限定值的范围

1
ADD CONSTRAINT CHECK ( field > 0 )

索引 提前恰当的排序,当查找这个排好序的列时会非常快,主键数据本身就是排序的,提高查找性能,
却降低了增删改的性能,因为索引会在这些操作中动态更新索引

关键词 CREATE INDEX

触发器 关联特定表上的增删改操作,约束的性能更佳,使用前可以先考虑使用约束,能用于保持数据库的完整性

作者

马克鱼

发布于

2017-11-04

更新于

2025-10-12

许可协议