会使不如乐知,乐知不如好问
很多人应该都熟用基本的SQL语句了吧,比如insert、update、delete、select等等。但是在前一段时间的学习中,让我对SQL语句有了新的理解,包括在学习一些其他相数据库技术都有帮助。
关系型数据库
在关系型数据库中,一切皆关系。正如java一切皆对象一样。关系就是关系型数据库的基本单元。
最能体现这种关系的东西就是----表
。表有行关系、列关系、主键等等。包括视图,虽然不是表,但是在体现上依旧是表关系,只是没有存储在实际的磁盘中。
实例理解
- select
比如select * from test_table;
,其实返回的查询结果就是一张表----虚拟表,没有磁盘中实际的存储。所以,可以对返回的虚拟表再进行操作,比如子查询,就是对虚拟表再进行了查询操作,最后再返回一张虚拟表。
SELECT
*
FROM
(
SELECT
test_column1,
test_column2,
test_column3
FROM
test_table
);
SQL
- insert
最常用的操作应该有两种:
代码语言:javascript复制INSERT INTO test_table VALUES('test_column1','test_column2','test_column3');
--或者
INSERT INTO test_table
VALUES
('11', '22', '33'),
('44', '55', '66'),
('77', '88', '99');
SQL
在此之前,一直以为insert
一直是按行插入,一行一行的向表插数据。其实是错误的,VALUES
会返回一张虚拟表,例如第一个insert语句返回一张只有一行数据的三列表,而第二个insert是有三行数据的三列表。所以INSERT
和SELECT
可以结合使用。
INSERT INTO test_table_two SELECT test_column1,test_column2,test_column3,... FROM test_table;
深层理解
通过select和insert,可以理解DELETE
、UPDATE
、JOIN
、UNION
等等,其实都是对表操作或者返回一个表。
甚至在有些关系型数据库中使用函数返回的也是一个表,比如PostgreSQL
数据库,可以试一下执行以下SQL语句
SELECT * FROM right('sql',2);