Tiene una colección completa de declaraciones SQL clásicas, ¡preste atención para verificarlo! ! !

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

Supongo que te gusta

Origin blog.51cto.com/15057820/2654648
Recomendado
Clasificación