「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」
小小前端有时候也需要写一写API,所以对平时常用的 SQL 语句简单的总结了一下。
插入数据
- 向已有表插入数据
insert into [DB_name].[dbo].[table_name]
values('column1', 'column2')
- 插入数据并返回该条数据的自增列ID
-- 返回本次语句块中插入数据的最后一个自增量ID
insert into [DB_name].[dbo].[table_name]
values('column1', 'column2')
select SCOPE_IDENTITY();
-- 返回整个数据库中插入数据的最后一个自增量ID
insert into [DB_name].[dbo].[table_name]
values('column1', 'column2')
select @@IDENTITY
[注意] 插入时,忽略自增列的值
从已有数据表向另一个表追加数据
insert into dbo.a
select * from dbo.b
将查询数据插入临时表(临时表之前不存在)
select *
into #tempTable
from dbo.b
删除数据
delete from [DB_name].[dbo].[table_name]
where colName = 'columnValue' and colName = 'columnValue'
查询数据
select top 1000 *
from [DB_name].[dbo].[table_name]
order by colName
修改数据
update [DB_Name].[dbo].[Table_Name]
set column1 = newValue, column2 = newValue
where id = '1'
批量替换特定列的特定字符串
update [dbo].[Table_Name]
set list_URL = replace(list_URL, 'https://baidu.com', 'https://google.com')
where list_URL LIKE '%baidu.com%'
创建表
CREATE TABLE [DB_Name].[dbo].[Table_Name](
id int identity(1, 1), --自增列,从1开始,递增量为1
name char NOT NULL,
age int NOT NULL,
sex boolean NOT NULL
)
修改表结构
-- 新增字段
ALTER TABLE [Table_Name] ADD [Column_Name] NVARCHAR(50) NULL
-- 在特定位置新增字段
ALTER TABLE [Table_Name] ADD [Column_Name] NVARCHAR(50) NULL [FIRST | AFTER] [Column_Name]
-- 新增列的时候添加默认值
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
-- 删除字段
ALTER TABLE [Table_Name] DROP COLUMN [Column_Name]
-- 修改字段
ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] NVARCHAR(50) NULL
-- 修改字段长度
ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(255)
SQL表连接
- [INNER] JOIN: 内连接, 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 左连接, 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 右连接, 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 全连接, 只要其中一个表中存在匹配,就返回行
Table Person
| Id_P | Name | City |
|---|---|---|
| 1 | Winter | London |
| 2 | Gross | New York |
| 3 | Mars | Beijing |
Table Orders
| Id_O | OrderNo | Id_P |
|---|---|---|
| 1 | 11111 | 3 |
| 2 | 22222 | 3 |
| 3 | 33333 | 1 |
| 4 | 44444 | 1 |
| 5 | 55555 | 65 |
- 谁订购了产品,分别订购了什么产品?
select Person.Name, Orders.OrderNo
from Person, Orders
where Person.Id_P = Orders.Id_O
the Results:
| Name | OrderNo |
|---|---|
| Winter | 33333 |
| Winter | 44444 |
| Mars | 11111 |
| Mars | 22222 |
- 列出所有人的订购(inner join)
select Person.Name, Orders.OrderNo
from Person
inner join Orders
on Person.Id_P = Orders.Id_P
order by Person.Name
the Results:
| Name | OrderNo |
|---|---|
| Winter | 33333 |
| Winter | 44444 |
| Mars | 11111 |
| Mars | 22222 |
查看特定表的字段结构信息
使用 INFORMATION_SCHEMA.COLUMNS
-- 实体表
select column_name, data_type, *
from serverName.DBName.INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='Portal_DimList'
-- 临时表
select *
from tempdb.INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME like '#tempTableName%'
使用 sp_columns 存储过程
适用于 DBLink 下的其他 Server 下的表
缺点:不能筛选特定需要的字段
-- 实体表
exec serverName.DBName.DBOwner.sp_columns 'B2B_InvoiceNumber_Flag_New'
-- 临时表
exec [tempdb].[dbo].sp_columns #tempTableName
使用 sys.columns
缺点:获取到的字段类型是数据库里的数字代号,不是可读文字
-- 临时表
select *
from tempdb.sys.columns
where object_id=OBJECT_ID('tempdb.dbo.#tempTableName');
查看特定表的信息
select *
from INFORMATION_SCHEMA.tables
where TABLE_NAME='Portal_DimList'
插入特殊字符值
-- 1. 修改列类型为 'NVARCHAR'
-- 2. 插入数据时,引号前加 "N"
select N"¢"
insert into table_name
values(991, 'm01', 'point', 'Point', 'doubleSum', N'c2¢')
修改 text 类型的列为 ntext 类型
-- 先修改列的类型为 varchar(max)
alter table [dbo].[Portal_JSON]
alter column JSON_text [varchar](max) NULL
-- 再将列的类型修改为 ntext
alter table [dbo].[Portal_JSON]
alter column JSON_text ntext NULL