SQL son las siglas de Structured Query Language. Los comandos SQL son las instrucciones que se utilizan para comunicarse con una base de datos para realizar tareas, funciones y consultas con datos.
Los comandos SQL se pueden usar para buscar en la base de datos y realizar otras funciones como crear tablas, agregar datos a tablas, modificar datos y eliminar tablas.
Aquí hay una lista de comandos SQL básicos (a veces llamados cláusulas) que debe saber si va a trabajar con SQL.
SELECCIONAR y DESDE
La SELECT
parte de una consulta determina qué columnas de datos se mostrarán en los resultados. También hay opciones que puede aplicar para mostrar datos que no son una columna de tabla.
El siguiente ejemplo muestra tres columnas SELECT
ed FROM
la tabla "estudiante" y una columna calculada. La base de datos almacena el ID de estudiante, el nombre y el apellido del estudiante. Podemos combinar las columnas Nombre y Apellido para crear la columna calculada FullName.
SELECT studentID, FirstName, LastName, FirstName + ' ' + LastName AS FullName FROM student;
+-----------+-------------------+------------+------------------------+ | studentID | FirstName | LastName | FullName | +-----------+-------------------+------------+------------------------+ | 1 | Monique | Davis | Monique Davis | | 2 | Teri | Gutierrez | Teri Gutierrez | | 3 | Spencer | Pautier | Spencer Pautier | | 4 | Louis | Ramsey | Louis Ramsey | | 5 | Alvin | Greene | Alvin Greene | | 6 | Sophie | Freeman | Sophie Freeman | | 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd | | 8 | Donald D. | Chamberlin | Donald D. Chamberlin | | 9 | Raymond F. | Boyce | Raymond F. Boyce | +-----------+-------------------+------------+------------------------+ 9 rows in set (0.00 sec)
CREAR MESA
CREATE TABLE
hace exactamente lo que parece: crea una tabla en la base de datos. Puede especificar el nombre de la tabla y las columnas que deben estar en la tabla.
CREATE TABLE table_name ( column_1 datatype, column_2 datatype, column_3 datatype );
ALTERAR TABLA
ALTER TABLE
cambia la estructura de una mesa. Así es como agregaría una columna a una base de datos:
ALTER TABLE table_name ADD column_name datatype;
CHEQUE
La CHECK
restricción se utiliza para limitar el rango de valores que se puede colocar en una columna.
Si define una CHECK
restricción en una sola columna, solo permite ciertos valores para esta columna. Si define una CHECK
restricción en una tabla, puede limitar los valores en ciertas columnas en función de los valores en otras columnas de la fila.
El siguiente SQL crea una CHECK
restricción en la columna "Edad" cuando se crea la tabla "Personas". La CHECK
restricción asegura que no puede haber ninguna persona menor de 18 años.
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) );
Para permitir el nombramiento de una CHECK
restricción y para definir una CHECK
restricción en varias columnas, utilice la siguiente sintaxis SQL:
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255), CONSTRAINT CHK_Person CHECK (Age>=18 AND City="Sandnes") );
DÓNDE
(AND
,OR
, IN
, BETWEEN
, Y LIKE
)
La WHERE
cláusula se utiliza para limitar el número de filas devueltas.
Como ejemplo, primero le mostraremos una SELECT
declaración y los resultados sin una WHERE
declaración. Luego, agregaremos una WHERE
declaración que usa los cinco calificadores anteriores.
SELECT studentID, FullName, sat_score, rcd_updated FROM student;
+-----------+------------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+------------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+---------------------+ 9 rows in set (0.00 sec)
Ahora, repetiremos la SELECT
consulta pero limitaremos las filas devueltas usando una WHERE
declaración.
STUDENT studentID, FullName, sat_score, recordUpdated FROM student WHERE (studentID BETWEEN 1 AND 5 OR studentID = 8) AND sat_score NOT IN (1000, 1400);
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 5 rows in set (0.00 sec)
ACTUALIZAR
Para actualizar un registro en una tabla, usa la UPDATE
declaración.
Utilice la WHERE
condición para especificar qué registros desea actualizar. Es posible actualizar una o más columnas a la vez. La sintaxis es:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
Aquí hay un ejemplo que actualiza el nombre del registro con Id 4:
UPDATE Person SET Name = “Elton John” WHERE Id = 4;
También puede actualizar columnas en una tabla usando valores de otras tablas. Utilice la JOIN
cláusula para obtener datos de varias tablas. La sintaxis es:
UPDATE table_name1 SET table_name1.column1 = table_name2.columnA table_name1.column2 = table_name2.columnB FROM table_name1 JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key
Aquí hay un ejemplo de actualización del Administrador de todos los registros:
UPDATE Person SET Person.Manager = Department.Manager FROM Person JOIN Department ON Person.DepartmentID = Department.ID
AGRUPAR POR
GROUP BY
le permite combinar filas y agregar datos.
Aquí está la sintaxis de GROUP BY
:
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;
TENIENDO
HAVING
le permite filtrar los datos agregados por la GROUP BY
cláusula para que el usuario obtenga un conjunto limitado de registros para ver.
Aquí está la sintaxis de HAVING
:
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > value;
AVG ()
"Promedio" se utiliza para calcular el promedio de una columna numérica del conjunto de filas devuelto por una declaración SQL.
Aquí está la sintaxis para usar la función:
SELECT groupingField, AVG(num_field) FROM table1 GROUP BY groupingField
Aquí hay un ejemplo usando la tabla de estudiantes:
SELECT studentID, FullName, AVG(sat_score) FROM student GROUP BY studentID, FullName;
COMO
AS
le permite cambiar el nombre de una columna o tabla mediante un alias.
SELECT user_only_num1 AS AgeOfServer, (user_only_num1 - warranty_period) AS NonWarrantyPeriod FROM server_table
Esto da como resultado la siguiente salida.
+-------------+------------------------+ | AgeOfServer | NonWarrantyPeriod | +-------------+------------------------+ | 36 | 24 | | 24 | 12 | | 61 | 49 | | 12 | 0 | | 6 | -6 | | 0 | -12 | | 36 | 24 | | 36 | 24 | | 24 | 12 | +-------------+------------------------+
También puede usar AS para asignar un nombre a una tabla para facilitar la referencia en las combinaciones.
SELECT ord.product, ord.ord_number, ord.price, cust.cust_name, cust.cust_number FROM customer_table AS cust JOIN order_table AS ord ON cust.cust_number = ord.cust_number
Esto da como resultado la siguiente salida.
+-------------+------------+-----------+-----------------+--------------+ | product | ord_number | price | cust_name | cust_number | +-------------+------------+-----------+-----------------+--------------+ | RAM | 12345 | 124 | John Smith | 20 | | CPU | 12346 | 212 | Mia X | 22 | | USB | 12347 | 49 | Elise Beth | 21 | | Cable | 12348 | 0 | Paul Fort | 19 | | Mouse | 12349 | 66 | Nats Back | 15 | | Laptop | 12350 | 612 | Mel S | 36 | | Keyboard| 12351 | 24 | George Z | 95 | | Keyboard| 12352 | 24 | Ally B | 55 | | Air | 12353 | 12 | Maria Trust | 11 | +-------------+------------+-----------+-----------------+--------------+
PEDIR POR
ORDER BY
gives us a way to sort the result set by one or more of the items in the SELECT
section. Here is an SQL sorting the students by FullName in descending order. The default sort order is ascending (ASC
) but to sort in the opposite order (descending) you use DESC
.
SELECT studentID, FullName, sat_score FROM student ORDER BY FullName DESC;
COUNT
COUNT
will count the number of rows and return that count as a column in the result set.
Here are examples of what you would use COUNT for:
- Counting all rows in a table (no group by required)
- Counting the totals of subsets of data (requires a Group By section of the statement)
This SQL statement provides a count of all rows. Note that you can give the resulting COUNT column a name using “AS”.
SELECT count(*) AS studentCount FROM student;
DELETE
DELETE
is used to delete a record in a table.
Be careful. You can delete all records of the table or just a few. Use the WHERE
condition to specify which records you want to delete. The syntax is:
DELETE FROM table_name WHERE condition;
Here is an example deleting from the table Person the record with Id 3:
DELETE FROM Person WHERE Id = 3;
INNER JOIN
JOIN
, also called Inner Join, selects records that have matching values in two tables.
SELECT * FROM A x JOIN B y ON y.aId = x.Id
LEFT JOIN
A LEFT JOIN
returns all rows from the left table, and the matched rows from the right table. Rows in the left table will be returned even if there was no match in the right table. The rows from the left table with no match in the right table will have null
for right table values.
SELECT * FROM A x LEFT JOIN B y ON y.aId = x.Id
RIGHT JOIN
A RIGHT JOIN
returns all rows from the right table, and the matched rows from the left table. Opposite of a left join, this will return all rows from the right table even where there is no match in the left table. Rows in the right table that have no match in the left table will have null
values for left table columns.
SELECT * FROM A x RIGHT JOIN B y ON y.aId = x.Id
FULL OUTER JOIN
A FULL OUTER JOIN
returns all rows for which there is a match in either of the tables. So if there are rows in the left table that do not have matches in the right table, those will be included. Also, if there are rows in the right table that do not have matches in the left table, those will be included.
SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName
INSERT
INSERT
is a way to insert data into a table.
INSERT INTO table_name (column_1, column_2, column_3) VALUES (value_1, 'value_2', value_3);
LIKE
LIKE
is used in a WHERE
or HAVING
(as part of the GROUP BY
) to limit the selected rows to the items when a column has a certain pattern of characters contained in it.
This SQL will select students that have FullName
starting with “Monique” or ending with “Greene”.
SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName LIKE 'Monique%' OR FullName LIKE '%Greene';
+-----------+---------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+---------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | +-----------+---------------+-----------+---------------------+ 2 rows in set (0.00 sec)
You can place NOT
before LIKE
to exclude the rows with the string pattern instead of selecting them. This SQL excludes records that contain “cer Pau” and “Ted” in the FullName column.
SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName NOT LIKE '%cer Pau%' AND FullName NOT LIKE '%"Ted"%';
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 7 rows in set (0.00 sec)