Columna SQL
Resumen de conocimientos básicos de la base de datos SQL
Resumen del conocimiento avanzado de la base de datos SQL
1. Parte básica
1. Crea una base de datos
CREATE DATABASE dbname
2. Eliminar la base de datos
DROP DATABASE dbname
3. Crea una nueva tabla
CREATE TABLE tabname(
col1 type1 [not null] [primary key],
col2 type2 [not null],..
)
Cree una nueva tabla basada en una tabla existente:
使用旧表创建新表
create table tab_new
as
select
col1,
col2…
from tab_old
4. Elimina la nueva tabla.
DROP TABLE tablename
5. Agrega una columna
Alter table tabname add column col type
6. Agregue la clave principal:
Alter table tabname add primary key(col)
Eliminar la clave principal:
Alter table tabname drop primary key(col)
7. Cree un índice:
create [unique] index idxname on tabname(col….)
Eliminar índice:
drop index idxname
Nota: El índice no se puede cambiar, debe eliminarlo y reconstruirlo si desea cambiarlo.
8. Cree una vista:
create view viewname as select statement
Eliminar vista:
drop view viewname
9, algunas declaraciones SQL simples
--选择:
select * from table1 where 范围
--插入:
insert into table1(field1,field2) values(value1,value2)
--删除:
delete from table1 where 范围
--更新:
update table1 set field1=value1 where 范围
--查找:
select * from table1 where field1 like ’%value1%’
--排序:
select * from table1 order by field1,field2 [desc]
--总数:
select count as totalcount from table1
--求和:
select sum(field1) as sumvalue from table1
--平均:
select avg(field1) as avgvalue from table1
--最大:
select max(field1) as maxvalue from table1
--最小:
select min(field1) as minvalue from table1
10. Varios operadores de consulta avanzados
A: operador UNION El operador
UNION deriva una tabla de resultados combinando las otras dos tablas de resultados y eliminando cualquier fila duplicada en la tabla. Cuando se usa ALL con UNION (es decir, UNION ALL), las filas duplicadas no se eliminan. En ambos casos, cada fila de la tabla derivada es de TABLE1 o de TABLE2.
B: operador EXCEPT El operador
EXCEPT deriva una tabla de resultados incluyendo todas las filas en TABLE1 pero no en TABLE2 y eliminando todas las filas duplicadas. Cuando se usa TODO con EXCEPTO (EXCEPTO TODO), las filas duplicadas no se eliminan.
C: operador INTERSECT
El operador INTERSECT deriva una tabla de resultados al incluir solo las filas en TABLE1 y TABLE2 y eliminar todas las filas duplicadas. Cuando se usa ALL con INTERSECT (INTERSECT ALL), las filas duplicadas no se eliminan.
Nota: Varias filas de resultados de consultas que utilizan operandos deben ser coherentes.
11. Use la combinación externa
A, combinación izquierda (externa):
Unión externa izquierda (combinación izquierda): el conjunto de resultados incluye las filas coincidentes de la tabla de combinación, así como todas las filas de la tabla de combinación izquierda.
select
a.a,
a.b,
a.c,
b.c,
b.d,
b.f
from a
LEFT OUT JOIN
b ON a.a = b.c
B : derecha (exterior) unirse
Unión externa derecha (combinación derecha): el conjunto de resultados incluye las filas de combinación coincidentes de la tabla de combinación y todas las filas de la tabla de combinación derecha.
C: unión completa / cruzada (externa): unión
externa completa: no solo incluye las filas coincidentes de la tabla de enlace simbólico, sino que también incluye todos los registros de las dos tablas unidas.
12 、 Agrupar por
Agrupe las columnas, que a menudo se utilizan con funciones agregadas (recuento, suma, máximo, mínimo, promedio)
Nota:
Al agrupar: texto, ntext, campos de tipo de imagen no se pueden utilizar como base de agrupación
Los campos de la función estadística de selección no se pueden juntar con campos ordinarios;
2. Parte avanzada
1. Copie la tabla (solo copie la estructura de la tabla, nombre de la tabla de origen: un nuevo nombre de tabla: b)
--方法一 仅用于SQL Server:
select * into b from a where 1<>1
--方法二:
select top 0 * into b from a
2. Copiar tabla (copiar datos, nombre de la tabla de origen: un nombre de la tabla de destino: b)
insert into b(a, b, c)
select d,e,f from b;
3. Subconsulta (nombre de tabla 1: nombre de tabla 2: b)
select a,b,c from a where a IN (select d from b )
或者:
select a,b,c from a where a IN (1,2,3)
4. Muestra el artículo, el remitente y la última hora de respuesta.
select
a.title,
a.username,
b.adddate
from table a,
(select max(adddate) adddate
from table
where table.title=a.title) b
5. Consulta de combinación externa (nombre de tabla 1: nombre de tabla 2: b)
select
a.a,
a.b,
a.c,
b.c,
b.d,
b.f
from a
LEFT OUT JOIN b ON a.a = b.c
6. Consulta de vista en línea (nombre de la tabla 1: a)
select * from (
SELECT a,b,c FROM a
) T
where t.a > 1;
7. El uso de between, el valor de límite se incluye cuando el rango de los datos de la consulta está restringido por between, no
between不包括
select * from table1
where time between time1 and time2
select a,b,c, from table1
where a not between 数值1 and 数值2
8. Cómo usar en
select * from table1
where a [not] in (‘值1’,’值2’,’值4’,’值6’)
9. Dos tablas relacionadas, elimine la información en la tabla principal que no está en la tabla secundaria
delete from table1
where not exists (
select * from table2
where table1.field1=table2.field1
)
10. Preguntas sobre la inspección conjunta de cuatro metros:
select * from a
left inner join b on a.a=b.b
right inner join c on a.a=c.c
inner join d on a.a=d.d
where ...
..
11. Recuerde cinco minutos antes del horario
select * from 日程安排
where datediff('minute',f开始时间,getdate())>5
12. Una declaración SQL para realizar la paginación de la base de datos
select top 10 b.*
from (
select top 20 主键字段,排序字段
from 表名 order by 排序字段 desc
) a,
表名 b
where b.主键字段 = a.主键字段
order by a.排序字段具体
Implementación: Acerca de la paginación de la base de datos:
declare @start int, @ end int
@sql nvarchar (600)
set @ sql = 'select top' + str (@ end- @ start + 1) + '+ from T
donde rid not in (
select top' + str (@ str-1) + 'Deshacerse de T donde Rid> -1)'
exec sp_executesql @sql
13. Los primeros 10 registros
select top 10 *
form table1
where 范围
14. Incluya todas las filas en TableA pero no en TableB y TableC y elimine todas las filas duplicadas para derivar una tabla de resultados
(select a from tableA )
except
(select a from tableB)
except
(select a from tableC)
15. Obtenga 10 datos de forma aleatoria
select top 10 *
from tablename
order by newid()
16. Descripción: Eliminar registros duplicados
--方法一
delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
--方法二
select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp
Evaluación: esta operación implica el movimiento de una gran cantidad de datos. Este enfoque no es adecuado para operaciones de gran capacidad pero de datos 3), por ejemplo: importar datos en una tabla externa, debido a algunas razones solo se importa parte de la primera , pero es difícil Determinar la ubicación específica, para que solo se importe la próxima vez, para que se generen muchos campos duplicados, cómo eliminar campos duplicados
alter table tablename
--添加一个自增列
add column_b int identity(1,1)
delete from tablename
where column_b not in(
select max(column_b)
from tablename
group by column1,column2,...
)
alter table tablename drop column column_b
17. Enumere todos los nombres de las tablas en la base de datos.
use master
go
select name from sysobjects
where type='U' // U代表用户
18. Enumere todos los nombres de las columnas en la tabla.
use master
go
select name
from syscolumns
where id=object_id('TableName')
19. Inicializar tabla table1
TRUNCATE TABLE table1
20. Seleccione registros del 10 al 15
select top 5 *
from (
select top 15 *
from table
order by id asc
) table_别名
order by id desc
Tres, habilidades de desarrollo
1. Donde 1 = 1 significa seleccionar todo, donde 1 = 2 no selecciona todo
if @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from ['
+ @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
Podemos escribir directamente
set @strSQL = 'select count(*) as Total from ['
+ @tblName + '] where 1=1 '+ @strWhere
2. Reducir la base de datos
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE
3. Comprime la base de datos
dbcc shrinkdatabase(dbname)
4. Transferir la base de datos al nuevo usuario con derechos de usuario existentes.
exec sp_change_users_login 'update_one','newname','oldname'
go
5. Verifique el conjunto de respaldo
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
6. Reparar la base de datos
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
7. Log clear
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE tablename -- 要操作的数据库名
SELECT @LogicalFileName = 'tablename_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想设定的日志文件的大小(M)
Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
8. Cambiar una mesa
exec sp_changeobjectowner 'tablename','dbo'
9. Almacene y cambie todas las tablas
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO
10. Escriba los datos directamente en SQL SERVER de forma circular
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
Caso: Existe la siguiente tabla, y todas las calificaciones reprobadas en la solicitud se montarán sobre la base de un aumento de 0.1 cada vez, para que simplemente pasen:
Puntuación de nombre
Zhangshan 80
Lishi 59
Wangwu 50
Songquan 69
while((select min(score) from tb_table)<60)
begin
update tb_table set score =score*1.01
where score<60
if (select min(score) from tb_table)>60
break
else
continue
end