SQL基础简明总结

目录

Inner Join

只含有关联的行

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

可用于替代子查询

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 左边的表选择所有行
SELECT customers.cust_id, orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id;

UNION

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

INSERT INTO

INSERT INTO table1(
    field1,
    field2
)
VALUES('a', 2);

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

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

表操作

CREATE TABLE ...
DROP TABLE ...

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

视图

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

CREATE VIEW cv AS
SELECT ...
WHERE ...

SELECT field1, field2
FROM cv
WHERE ...

- 两个where子句会自动组合

事务

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

用于保证数据的完整性

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

START TRANSACTION
...
SAVEPOINT delete1
...
ROLLBACK TO delete1
COMMIT;

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

重要概念

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

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

- 定义中
REFERENCE table1 (field1)
- 更改中
ALTER TABLE table1
ADD CONSTRAINT
FOREIGN KEY (user_id) REFERENCES user (id)

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

检查约束 限定值的范围

ADD CONSTRAINT CHECK ( field > 0 )

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

关键词 CREATE INDEX

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