一、重要的SQL命令
二、基本SQL命令
1、DISTINCT 关键词用于返回唯一不同的值:
SQL SELECT DISTINCT 语法:
select DISTINCT column_name,column_name from table_name;
2、SQL AND & OR 运算符
AND & OR 运算符用于基于一个以上的条件对记录进行过滤。
3、ORDER BY 注意事项
ORDER BY 多列的时候,eg:
order by A,B 这个时候都是默认按升序排列
order by A desc,B 这个时候 A 降序,B 升序排列
order by A ,B desc 这个时候 A 升序,B 降序排列
即 desc 或者 asc 只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的升序。
4、SQL INSERT INTO 语句
INSERT INTO 语句用于向表中插入新记录。
INSERT INTO 语句可以有两种编写形式。
insert into table_name values(value1,value2,value3,...);
insert into table_name (column1,column2,column3,...) values(value1,value2,value3,...);
5、SQL UPDATE 语句
UPDATE 语句用于更新表中已存在的记录。
SQL UPDATE 语法
update table_name set column1=value1,column2=value2,... where some_column=some_value;
6、SQL SELECT TOP 子句
SELECT TOP 子句用于规定要返回的记录的数目。
select TOP number column_name(s) from table_name;
7、SQL 别名
通过使用 SQL,可以为表名称或列名称指定别名。
基本上,创建别名是为了让列名称的可读性更强。
列的 SQL 别名语法:
select column_name as alias_name from table_name;
表的 SQL 别名语法:
select column_name(s) from table_name as alias_name;
在下面的情况下,使用别名很有用:
8、SQL 连接(JOIN)
SQL join 用于把来自两个或多个表的行结合起来。
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。
不同的 SQL JOIN:
(1) SQL INNER JOIN 关键字
INNER JOIN 关键字在表中存在至少一个匹配时返回行。
SQL INNER JOIN 语法:
select column_name(s) from table1 inner join table2 on table1.column_name=table2.column_name;
或:
select column_name(s) from table1 join table2 on table1.column_name=table2.column_name;
注释: INNER JOIN 与 JOIN 是相同的。
(2) SQL LEFT JOIN 关键字
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
SQL LEFT JOIN 语法:
select column_name(s) from table1 left join table2 on table1.column_name=table2.column_name;
或:
select column_name(s) from table1 left outer join table2 on table1.column_name=table2.column_name;
(3) SQL RIGHT JOIN 关键字
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
SQL RIGHT JOIN 语法:
select column_name(s) from table1 right join table2 on table1.column_name=table2.column_name;
或:
select column_name(s) from table1 right outer join table2 on table1.column_name=table2.column_name;
(4)SQL FULL OUTER JOIN 关键字
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
full outer join 关键字结合了 left join 和 right join 的结果。
SQL FULL OUTER JOIN 语法:
select column_name(s) from table1 full outer join table2 on table1.column_name=table2.column_name;
补充:
关键字 on
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用 left jion 时,on 和 where 条件的区别如下:
假设有两张表:
表1:tab1
id | size |
---|---|
1 | 10 |
2 | 20 |
3 | 30 |
表2:tab2
size | name |
---|---|
10 | AAA |
20 | BBB |
20 | CCC |
两条 SQL:
select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'
select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA')
第一条SQL的过程:
1、中间表
on条件: tab1.size = tab2.size
tab1.id | tab1.size | tab2.size | tab2.name |
---|---|---|---|
1 | 10 | 10 | AAA |
2 | 20 | 20 | BBB |
2 | 20 | 20 | CCC |
3 | 30 | (null) | (null) |
2、再对中间表过滤
where 条件:tab2.name=‘AAA’
tab1.id | tab1.size | tab2.size | tab2.name |
---|---|---|---|
1 | 10 | 10 | AAA |
第二条SQL的过程:
1、中间表
on条件:tab1.size = tab2.size and tab2.name=‘AAA’
(条件不为真也会返回左表中的记录)
tab1.id | tab1.size | tab2.size | tab2.name |
---|---|---|---|
1 | 10 | 10 | AAA |
2 | 20 | (null) | (null) |
3 | 30 | (null) | (null) |
其实以上结果的关键原因就是 left join、right join、full join 的特殊性,不管 on 上的条件是否为真都会返回 left 或 right 表中的记录,full 则具有 left 和 right 的特性的并集。 而 inner jion 没这个特殊性,则条件放在 on 中和 where 中,返回的结果集是相同的。
9、SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意: union内部的每个 select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 select语句中的列的顺序必须相同。
SQL UNION 语法:
select column_name(s) from table1 union select column_name(s) from table2;
注释: 默认地,union 操作符选取不同的值。如果允许重复的值,请使用 union all。
SQL UNION ALL 语法:
select column_name(s) from table1 union all select column_name(s) from table2;
注释: union 结果集中的列名总是等于 union 中第一个 select 语句中的列名。
10、SQL SELECT INTO 语句
通过 SQL,可以从一个表复制信息到另一个表。
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
SQL SELECT INTO 语法:
可以复制所有的列插入到新表中:
select * into newtable [IN externaldb] from table1;
或者只复制希望的列插入到新表中:
select column_name(s) into newtable [IN externaldb] from table1;
11、SQL INSERT INTO SELECT 语句
通过 SQL,可以从一个表复制信息到另一个表。
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
SQL INSERT INTO SELECT 语法:
我们可以从一个表中复制所有的列插入到另一个已存在的表中:
insert into table2 select * from table1;
或者我们可以只复制希望的列插入到另一个已存在的表中:
insert into table2 (column_name(s)) select column_name(s) from table1;
12、SQL CREATE DATABASE 语句
CREATE DATABASE 语句用于创建数据库。
SQL CREATE DATABASE 语法:
create database dbname;
13、SQL CREATE TABLE 语句
CREATE TABLE 语句用于创建数据库中的表。
表由行和列组成,每个表都必须有个表名。
SQL CREATE TABLE 语法:
create table table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
column_name 参数规定表中列的名称。
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度。
14、SQL 约束(Constraints)
SQL 约束用于规定表中的数据规则。
如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
SQL CREATE TABLE + CONSTRAINT 语法:
create table table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
在 SQL 中,我们有如下约束:
三、SQL延伸命令
1、sqlserver中将所查询的列上添加单引号:
select quotename(column_name,char(39)) from table_name;
2、sqlserver中将查询出来的一个字段的所有值用逗号进行拼接:
select stuff((select ','+column_name from table_name for xml path('')),1,1,'');
3、sqlserver中将所查询出的结果用逗号显示在一行,并且添加单引号:
select stuff((select ','+quotename(column_name,char(39)) from table_name for xml path('')),1,1,'');