Las notas de estudio SQL

Insertar datos en la base de datos:

La primera forma no especifica el nombre de la columna que desea insertar datos sólo proporcionan valor a ser insertado, se puede añadir una nueva fila de datos:

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); 

En segundo lugar, si desea agregar valor para todas las columnas de la tabla, no es necesario especificar nombres de columna en la consulta SQL. Sin embargo, asegúrese de que el mismo orden que las columnas de los valores de la tabla.

INSERT INTO语法如下所示: INSERT INTO table_name VALUES (value1, value2, value3, ...);

Se puede extraer por otra tabla de los valores de campo instrucción SELECT, entonces estos datos para rellenar la tabla, esta tabla Campo otra consulta a la tabla, los datos a ser incluido es uno a uno.

INSERT INTO first_table_name [(column1, column2, ... columnN)] 
SELECT column1, column2, ...columnN FROM second_table_name [WHERE condition]; 

SQL INSERT INTO SELECT Sintaxis podemos replicar todas las columnas de una tabla a otra tabla que ya existe en:

INSERT INTO tabla2 SELECT * FROM tabla1;

O es posible que queramos copiar una fila existente a otra tabla:

INSERT INTO tabla2 (COLUMN_NAME (s)) SELECT nombre_columna (s) de la Tabla1;

Cuando se crea una tabla, NULL sintaxis básica es la siguiente:

SQL> CREATE TABLE CUSTOMERS( ID INT NOT NULL,
 NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, 
ADDRESS CHAR (25) , 
SALARY DECIMAL (18, 2), 
PRIMARY KEY (ID) )

Aquí, NO NULL significa que para una columna dada, debe explícitamente asignados de acuerdo con su tipo de datos. Hay dos y no se utiliza para definir NOT NULL, es decir, estas columnas pueden ser NULL. El valor es NULL campos se dejan en blanco en el proceso de grabación de campos creados.

superior / límite / rownum Ejemplo El siguiente instrucción SQL para seleccionar los tres primeros registros de la tabla "clientes": 

SELECT * FROM TOP 3 Clientes;

Los siguientes declaración muestra SQL un ejemplo del uso de la cláusula LIMIT equivalente: 

SELECT * FROM Clientes LÍMITE 3;

La siguiente instrucción SQL muestra un ejemplo del uso de ROWNUM equivalente a: 

* SELECT FROM Clientes DONDE ROWNUM <= 3;

 

El operador SQL EN EN operador le permite especificar varios valores en la cláusula WHERE. EN operador OR es la abreviatura de una pluralidad de condiciones.

COLUMN_NAME SQL EN 语法 SELECT (s) FROM nombre_tabla DONDE COLUMN_NAME IN (valor1, valor2, ...);

或者 SELECT nombre_columna (s) FROM nombre_tabla DONDE COLUMN_NAME IN (instrucción SELECT);

DROP INDEX

DROP INDEX para dejar caer el índice de la tabla.

Sintaxis DROP INDEX para el MS Access: DROP INDEX index_name EN nombre_tabla

Sintaxis DROP INDEX para MS SQL Server es: table_name.index_name DROP INDEX

Sintaxis DROP INDEX para DB2 / Oracle es: index_name DROP INDEX

Sintaxis DROP INDEX para MySQL: ALTER TABLE nombre_tabla DROP INDEX index_name

TABLE DROP

TABLE DROP para eliminar la tabla.

DROP TABLE nombre_tabla DROP DATABASE 语句

declaración DROP DATABASE a la base de datos de eliminación.

DROP TABLE BASE DE DATOS nombre_basedatos TRUNCATE 语句

 

Si sólo tenemos que eliminar los datos de la tabla, sin eliminar la tabla en sí, entonces ¿cómo lo hacemos?

TABLE uso TRUNCATE: TRUNCATE TABLE nombre_tabla

 

SQL ALTER TABLE sintaxis Para añadir una columna a la tabla, utilice la siguiente sintaxis:

ALTER TABLE nombre_tabla ADD nombre_columna tipo de datos  

Para eliminar una columna de una tabla, utilice la siguiente sintaxis (Tenga en cuenta que algunos sistemas de bases de datos no permiten esto para eliminar una tabla de base de columnas):

ALTER TABLE nombre_tabla DROP COLUMN COLUMN_NAME  

Para cambiar el tipo de datos de las columnas de la tabla, utilice la siguiente sintaxis:

SQL Server / MS Access: tipo de datos ALTER TABLE nombre_tabla ALTER COLUMN COLUMN_NAME

My SQL / Oracle: ALTER TABLE nombre_tabla MODIFICAR COLUMNA COLUMN_NAME tipo de datos

La sintaxis de MySQL

La siguiente sentencia SQL tabla "Personas" en la columna "ID" se define de forma automática incremento (incremento automático) campo de clave principal:

CREATE TABLE Persons 
( ID int NOT NULL AUTO_INCREMENT,
 LastName varchar(255) NOT NULL, 
 FirstName varchar(255), 
 Address varchar(255),
 City varchar(255), 
 PRIMARY KEY (ID) )

MySQL utilizar AUTO_INREMENT palabra clave para realizar un auto-incremento (de incremento automático) tarea.

Por defecto, AUTO_INREMENT valor inicial es 1, cada nuevo registro por uno.

NOT NULL restricción: para asegurar que los datos de una columna no puede tener una restricción DEFAULT valor NULL: proporcionar valores predeterminados restricción UNIQUE cuando los datos no especificados columna utilizada: para asegurar que todos los datos en la columna varía restricción de clave principal: identifica de forma exclusiva una fila de la tabla de datos / grabación de restricción de clave externa: identificar de forma única una fila en las otras tablas / registros de las restricciones de comprobación: todos los valores satisfacen una cierta condición para asegurar esta columna índice de restricción: para la creación rápida o la recuperación de los datos en la base de datos

Hay varias conexiones SQL diferentes:

SQL JOIN cláusula se utiliza para combinar dos o más filas de mesas con base en un campo común entre las mesas

Es para determinar primero una tabla primaria como un conjunto de resultados, a continuación, las filas a otras tablas selectivamente "Conexión" en la mesa principal en el conjunto de resultados.

El conector (INNER JOIN): cuando hay un partido de ambas tablas, filas antes de regresar. (Seleccione dos filas de mesas se devuelven)

Dejó de conexión (LEFT JOIN): devuelve todas las filas de la tabla izquierda, incluso si no hay ninguna coincidencia en la fila de tabla de la derecha. la conexión derecha (RIGHT JOIN): devolver todas las filas en la tabla de la derecha, incluso si no hay coincidencia de la izquierda fila de la tabla.

Totalmente conectado (FULL JOIN): siempre que una mesa hay una coincidencia, la línea de retorno.

conector cartesiana (cartesiana): Devuelve el producto cartesiano de dos o más registros del conjunto de mesa.

JOIN ejecución de órdenes

La siguiente es la estructura general consulta de combinación:

SELECT <row_list> 
FROM <left_table> <inner|left|right> 
JOIN <right_table> ON <join condition> 
WHERE <where_condition>

Su aplicación en el siguiente orden (sentencias SQL que se ejecutará en el primero de ellos es siempre la cláusula FROM):

DE: alrededor de dos mesas en la implementación de producto cartesiano, lo que resulta en la primera vt1 mesa. El número de filas n * m

(N es el número de filas en la tabla de la izquierda, m es un número de filas en la tabla de la derecha)

ON: El estado CERRADO vt1 proyección progresiva, vt2 inserta el resultado en

JOIN: agregar una línea externa.

Si LEFT JOIN (LEFT OUTER JOIN) se especifica, el primero de atravesar más de cada fila de la tabla de la izquierda,

En donde no se insertará línea vt2 en VT2, los campos restantes serán llenados fila es NULL, se forma el VT3;

Si el derecho especificado JOIN es la misma razón.

Si especifica un INNER JOIN, no se añade la línea externa, el proceso de inserción se ignora,

VT2 = vt3 (INNER JOIN filtros así colocados en la posición ON o donde no hay diferencia entre los resultados de la ejecución)

DONDE: par fila filtrado condiciones para vt3, que satisface la condición se da salida a VT4

SELECT: Retirar del campo especificado en VT4 VT5

PD: De hecho, podemos ver LEFT JOIN y RIGHT JOIN no es diferente de la semántica,

Los resultados dependen de la diferencia entre la mesa para la colocación de dos izquierda y derecha

SQL INTERSECT cláusula: combinar dos instrucciones SELECT, pero sólo devuelve los resultados de dos sentencias SELECT en ambas filas.

SQL dinámico:

1. <donde> </> donde las condiciones dinámicas donde complemento

<Si la prueba = ""> </ si> determinación dinámica, determina si el argumento pasado correctamente

select * from emp 
<where> 
    <if test="name != null and name !=''"> 
        name like concat('%',#{name},'%') 
    </if> 
    <if test="job != null and job != ''"> 
        and job = #{job} 
    </if> 
</where>

2. <colección foreach = item "ids" = "id" separador = "" = abiertos "(" close = ")"> </ froeach>

<insert id="addBatchSave"> 
    insert into tbl_employee(last_name,email,gender) 
    values 
    <foreach collection="emps" item="emppp" separator=","> 
        (#{emppp.lastName},#{emppp.email},#{emppp.gender}) 
    </foreach> 
</insert>

3. <set> </ set> actualizaciones dinámicas

<update id="updateEmp"> 
    update emp 
    <set> 
        <if test="name != null and name != ''"> 
            name=#{name}, 
        </if> 
        <if test="job != null and job != ''"> 
            job=#{job} 
        </if>
    </set> 
    where id=#{id} 
</update>

4. <sql id = "idName"> </ sql> usado con frecuencia fragmento encapsulación sql, la referencia es <includ refid = "idName">

<sql id="insertColumn"> 
    <if test="_databaseId=='mysql'"> 
        id,last_name,email,gender 
    </if> 
    <if test="_databaseId=='oracle'"> 
        id,last_name,email,department_id 
    </if> 
</sql> 
<insert id="addEmployeeBysql" databaseId="mysql"> 
    insert into tbl_employee( <!-- 引用外部定义的sql --> 
    <include refid="insertColumn" ></include> ) 
        values (#{id},#{lastName},#{email},#{gender}) 
</insert>

5. <ajuste prefijo = "donde" prefixOverrides = "" sufijo = "" suffixOverrides = "y">

prefix = "": Prefijo: Ajuste del cuerpo de lengüeta de importancia para luchar contra el resultado de toda la cadena de cadena. prifix toda la cadena para luchar contra una cadena de prefijo

prifixOverrides = "": anulación de prefijo: la eliminación de toda la cadena de caracteres delante de la adicional

sufijo = "": Sufijo: para luchar contra toda la cadena de caracteres más una cadena sufijo

suffixOverrides = "": cubierta sufijo: Eliminación de toda la cadena de caracteres seguido por exceso

Alternativamente valores integrales que comienza con el prefijo, mediante la sustitución de parte del sufijo final global.

select * from emp 
    <trim prefix="where" prefixOverrides="" suffix="" suffixOverrides="and"> 
        <if test="job != null and job != ''"> 
            job=#{job} and 
        </if> 
        <if test="topid != null and topid != ''"> 
            topid=#{topid} and 
        </if> 
    </trim>

6. <eligió> <cuando test = ""> </ cuando> <cuando test = ""> </ cuando> </ eligió>

Cuando primera vez establecido, no ejecutará hacia abajo. Mientras un frente no se sostiene, se ha reducido a juez, encuentre el final de la creación.

select * from emp 
<where> 
    <choose> 
        <when test="name != null and name != ''"> 
            name like concat('%',#{name},'%') 
        </when> 
        <when test="job != null and job !=''"> 
            and job=#{job} 
        </when> 
    </choose> 
</where>

unirse en la parte posterior de la condición y la condición en la que la diferencia entre:

1, seleccionar * de Tab1 combinación izquierda en Sep2 (tab1.size = tab2.size), donde tab2.name = 'AAA' 2, seleccionar * de Tab1 izquierda unirse a Sep2 en (tab1.size = tab2.size y tab2.name = 'AAA') 第一 条 SQL 的 过程: 1, 中间 表 en 条件: tab1.size = tab2.size

 

tab1.id

tab1.size

tab2.size

tab2.name

1

10

10

AAA

2

20

20

acreditación

2

20

20

CCC

3

30

(nulo)

(nulo)

2 y, a continuación, el filtrado de la mesa intermedia donde las condiciones: tab2.name = 'AAA'

 

tab1.id

tab1.size

tab2.size

tab2.name

1

10

10

AAA

Segundo procedimiento SQL: 1, la mesa intermedia con la condición de: tab1.size = tab2.size y tab2.name = 'AAA'

 

tab1.id

tab1.size

tab2.size

tab2.name

1

10

10

AAA

2

20

(nulo)

(nulo)

3

30

(nulo)

(nulo)

SQL en la fecha, la diferencia date_format, STR_TO_DATE de:

1, fecha (DateString)

expresión de fecha DateString es legítimo

如: Fecha de SELECT ( '09/02/2017 15: 25: 46,635') de la doble; -> '02/09/2017'

2, date_format (DateString, formato)

DateString argumento es legítima la fecha. formato de salida formato predeterminado de fecha / hora.

如: SELECT STR_TO_DATE ( '09/02/2017 15: 25: 46.635', '% Y-% m-% d')

De la doble; -> '02/09/2017'

3.str_to_date (str, formato)

Uso de la STR_TO_DATE función (str, formato), en el que, el formato como se muestra en el formato anterior todavía.

En particular, el formato y el formato requerido formato coherente str, por ejemplo STR_TO_DATE ( '08/07/2017 16:56:12', '% Y-% m-% d% H:% I:% s' ), un error se produce si inconsistente. No los repita.

 

optimización de SQL: normas comunes de optimización

Tabla 2.1 conexiones

  • Cuantas más conexiones mesas, peor será el rendimiento
  • Si es posible, dividida en una pluralidad de conectar procedimiento ejecutado uno
  • Preferentemente ejecutada puede reducir significativamente la cantidad de conexión de datos, no sólo reduce la complejidad, es posible realizar fácilmente como se esperaba
  • Si el multi-mesa se une inevitable, es probable que sea un defecto de diseño
  • URL malos resultados, porque tiene que ser alrededor de la mesa de exploración de tabla
  • Trate de usar combinación interna consulta

2.2 utilizar una tabla temporal

Si es inevitable, considere el uso de tablas temporales o variables de tabla para almacenar los resultados intermedios.

2.3 menos subconsultas

2.4 vista anidada

No es demasiado profunda, la vista general de la anidado preferiblemente no más de 2.

3, precauciones de escritura de SQL

columna de 3,1 NULL

columnas nulas utilizan el índice no tiene sentido cualquier columna que contiene valores nulos no se incluirán en el índice. Por lo tanto, cuando la declaración es nulo o no es nula, no se permite optimizador de declaración a utilizar el índice.

3.2 concat o ||

o el operador de concatenación de cadenas concat || MySQL y Oracle, si la función de la operación de la columna, sino que también hace caso omiso de la reunión con el índice. Comparar la siguiente consulta:

- 忽 律 索引 seleccione ... .. desde donde FIRST_NAME || '' || last_name = 'puertas de Bill;

- 使用 索引 seleccione ... .. desde donde nombre apellido = 'factura' y apellidos = 'bill gates';

3.3 como

El comodín en el primer lugar, no puede utilizar el índice, de lo contrario se puede.

- No se puede utilizar el índice de seleccionar .. .. donde nombre como '% t%';

- Se puede usar el índice de elegir .. .. donde nombre como 't%';

3,4 orden por

No utilice la cláusula ORDER BY de columnas no indizadas o expresiones anidadas, esto se traducirá en un menor rendimiento.

3.5 No operación

No utilice el cálculo del índice no se puede cambiar a otras operaciones puede utilizar el índice. De la siguiente manera:

- un índice incorrecto de elegir .. .. donde Sal = 3000 ;!

- Índice de graduación de elegir .. .. donde Sal <3000 o sal> 3000;

3,6 donde 与 tener

seleccionar .. de .. en .. donde .. grupo por .. tener .. orden por .. límite .., estructura de sintaxis de la instrucción sql superior, en el que sobre, donde un filtro y que tiene un comportamiento, el comportamiento del filtro se puede completar con antelación, cuanto más se puede reducir la cantidad de datos que se pasa a la siguiente fase, por lo que si el comportamiento de filtrado de tener que completa, en donde, se debería dar prioridad a dónde conseguir.

3.7 existe en alternativa

No está en el menos eficaz, debido a la tabla de sub-consulta escaneo completo de tabla. Considere el uso de enlaces externos o no existe. De la siguiente manera:

- SELECT * correcta DE EMP

DONDE EMPNO> 0 Y EXISTE (SELECCIONAR 'X' DE DEPARTAMENTO

DONDE DEPT.DEPTNO = EMP.DEPTNO Y LOC = 'MELB')

- Error SELECT * FROM EMP

DONDE EMPNO> 0 y DEPTNO IN (SELECT DEPTNO DE DEPT DONDE LOC = 'MELB')

3.8 Índice

Los beneficios del índice de búsqueda binaria se puede lograr, la complejidad del tiempo es O (log2)

Pero hay costes, la necesidad de espacio adicional para almacenar los datos de índice, y cada inserción, actualización y eliminación en el índice será actualizado, por lo que el aumento será de más de 4,5 veces el disco IO. Así que dar a algunos de la utilización innecesaria del campo de índice aumentó el índice reducirá el rendimiento del sistema. Para Oracle hablando, las sentencias SQL, trata de mayúsculas, minúsculas necesidad interna de escritura en la Universidad Nacional Cheng Kung, y luego ejecutado.

No utilice la función en la columna de índice, que dejará de usar el índice, un escaneo completo de tabla, de la siguiente manera:

- 错误 SELECT ... FROM DEPT DONDE SAL * 12> 25000;

- correcta SELECT ... FROM DEPT DONDE SAL> 25000/12;

3.9> y> =

- 4 posicionado directamente a la grabación (recomendada) seleccionar .. .. desde donde SAL> = 4;

- 3 para ubicar en primer lugar, encontrar de nuevo después de un (no se recomienda) seleccionar .. .. desde donde SAL> 3;

3.10 unión en lugar de o

Columnas en el índice, o pueden alternativamente operar utilizando unión. o acción en la columna indexada causó un escaneo completo de tabla.

- 高效: SELECT LOC_ID, LOC_DESC, REGIÓN DE UBICACIÓN

DONDE LOC_ID = 10 UNION SELECT LOC_ID, LOC_DESC, REGION DE UBICACIÓN

DONDE REGIÓN = 'MELBOURNE'

- 低效: SELECT LOC_ID, LOC_DESC, REGIÓN DE UBICACIÓN

DONDE LOC_ID = 10 O REGIÓN = 'MELBOURNE'

3.11 es nula y no es nulo

Si la columna puede estar vacío, evitando el uso del índice. Para el índice pluralidad de columnas, por lo menos, asegúrese de que al menos una columna no está en blanco. Por índice de varias columnas, sólo se accede a la primera columna del índice estará habilitada, si el acceso a la parte posterior de la columna usando un escaneo completo de tabla.

- ineficiente: (Si no Index) SELECT .. DE DEPARTAMENTO DONDE Cód_dpto NO ES NULL;

- Eficiente: (índice efectivo) SELECT .. DE DEPARTAMENTO DONDE Cód_dpto> = 0;

3.12 unión y toda unión

unión con la operación de deduplicación, el tiempo de cálculo aumenta. no hay necesidad de re-unión de todo, sino que incluirá el mismo registro. Bajo la misma función, la unión preferente toda la operación.

vista Base de datos: Una vista se deriva de uno o varios vector base (vista) de mesa, que es diferente de la tabla básica es una tabla virtual;

CREATE VIEW Estudiante (Sno, NombreS, SSEX, Sage, Sdept) AS SELECT SX.Sno, SX.Sname, SY.Ssex, SX.Sage, SY.Sdept DE SX, SY DONDE SX.Sno = SY.Sno;

 

Publicado 15 artículos originales · ganado elogios 0 · Vistas 273

Supongo que te gusta

Origin blog.csdn.net/weixin_45146962/article/details/105113375
Recomendado
Clasificación