Instrucción SELECT (Microsoft Access SQL)

Office 2013 y posterior

Última modificación:lunes, 09 de marzo de 2015

Hace referencia a:Access 2013 | Access 2016

Indica al motor de base de datos de Microsoft Access que devuelva información de la base de datos como un conjunto de registros.

SELECT [predicado] { * | tabla.* | [tabla.]campo1 [AS alias1] [, [tabla.]campo2 [AS alias2] [, …]]} FROM expresiónDeTabla [, …] [IN baseDeDatosExterna] [WHERE… ] [GROUP BY… ] [HAVING… ] [ORDER BY… ] [WITH OWNERACCESS OPTION]

La instrucción SELECT consta de los siguientes elementos:

Parte

Descripción

predicado

Uno de los siguientes predicados: ALL, DISTINCT, DISTINCTROW o TOP. El predicado se usa para restringir el número de registros devueltos. Si no se especifica ninguno, el valor predeterminado es ALL.

*

Especifica que se seleccionen todos los campos de la tabla o tablas especificadas.

tabla

Nombre de la tabla que contiene los campos en los que se seleccionan registros.

campo1, campo2

Nombres de los campos que contienen los datos que desea recuperar. Si incluye varios campos, éstos se recuperan en el orden enumerado.

alias1, alias2

Nombres que se usarán como encabezados de columna en lugar de los nombres de columna originales en tabla.

expresiónDeTabla

Nombre de la tabla o tablas que contienen los datos que desea recuperar.

baseDeDatosExterna

Nombre de la base de datos que contiene las tablas de expresiónDeTabla si no se encuentran en la base de datos actual.

Para llevar a cabo esta operación, el motor de base de datos Microsoft® Jet busca en la tabla o tablas especificadas, extrae loas columnas seleccionadas, selecciona las filas que cumplen el criterio y ordena o agrupa las filas resultantes en el orden especificado.

Las instrucciones SELECT no modifican los datos de la base de datos.

SELECT suele ser la primera palabra de una instrucción SQL. La mayoría de las instrucciones SQL son instrucciones SELECT o SELECT…INTO.

La sintaxis mínima de una instrucción SELECT es la siguiente:

SELECT campos FROM tabla

Puede usar un asterisco (*) para seleccionar todos los campos de una tabla. En el siguiente ejemplo, se seleccionan todos los campos de la tabla Employees:

SELECT * FROM Employees;

Si un nombre de campo está incluido en más de una tabla en la cláusula FROM, debe ir precedido por el nombre de la tabla y el operador . (punto). En el siguiente ejemplo, el campo Department se encuentra la tabla Employees y la tabla Supervisors. La instrucción SQL selecciona los departamentos de la tabla Employees y los nombres de los supervisores de la tabla Supervisors:

SELECT Employees.Department, Supervisors.SupvName 
FROM Employees INNER JOIN Supervisors 
WHERE Employees.Department = Supervisors.Department;

Cuando se crea un objeto Recordset, el motor de base de datos Microsoft Jet usa el nombre de campo de la tabla como el nombre de objeto Field en el objeto Recordset. Si desea un nombre de campo diferente o no hay un nombre implícito en la expresión usada para generar el campo, use la palabra reservada AS. En el siguiente ejemplo, se usa el título Birth para nombrar el objeto Field devuelto en el objeto Recordset resultante:

SELECT BirthDate 
AS Birth FROM Employees;

Si se usan funciones de agregado o consultas que devuelven nombres de objeto Field ambiguos o duplicados, debe usar la cláusula AS para proporcionar un nombre alternativo para el objeto Field. En el siguiente ejemplo, se usa el título HeadCount para nombrar el objeto Field devuelto en el objeto Recordset resultante:

SELECT COUNT(EmployeeID)
AS HeadCount FROM Employees;

Puede usar las demás cláusulas de una instrucción SELECT para restringir y organizar los datos devueltos. Para obtener más información, vea el tema de Ayuda acerca de la cláusula que utilice.

Vínculos proporcionados por:Icono Miembro de la comunidad Comunidad UtterAccess | Acerca de los colaboradores

En algunos de los ejemplos siguientes, se supone la existencia de un campo hipotético Salary en una tabla Employees. Tenga en cuenta que este campo no existe realmente en la tabla Employees (Empleados) de la base de datos Northwind (Neptuno).

En este ejemplo, se crea un objeto Recordset de tipo Dynaset basado en una instrucción SQL que selecciona los campos Apellidos y Nombre de todos los registros de la tabla Empleados. Llama al procedimiento EnumFields, que imprime el contenido de un objeto Recordset en la ventana Depuración.

Sub SelectX1() 
 
    Dim dbs As Database, rst As Recordset 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
 
    ' Select the last name and first name values of all  
    ' records in the Employees table. 
    Set rst = dbs.OpenRecordset("SELECT LastName, " _ 
        & "FirstName FROM Employees;") 
 
    ' Populate the recordset. 
    rst.MoveLast 
 
    ' Call EnumFields to print the contents of the 
    ' Recordset. 
    EnumFields rst,12 
 
    dbs.Close 
 
End Sub

En este ejemplo, se cuenta el número de registros que tienen una entrada en el campo PostalCode y asigna al campo devuelto el nombre Tally.

Sub SelectX2() 
 
    Dim dbs As Database, rst As Recordset 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
 
    ' Count the number of records with a PostalCode  
    ' value and return the total in the Tally field. 
    Set rst = dbs.OpenRecordset("SELECT Count " _ 
        & "(PostalCode) AS Tally FROM Customers;") 
 
    ' Populate the Recordset. 
    rst.MoveLast 
 
    ' Call EnumFields to print the contents of  
    ' the Recordset. Specify field width = 12. 
    EnumFields rst, 12 
 
    dbs.Close 
 
End Sub 

En este ejemplo, se muestra el número de empleados y los salarios medio y máximo.

Sub SelectX3() 
 
    Dim dbs As Database, rst As Recordset 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
 
    ' Count the number of employees, calculate the  
    ' average salary, and return the highest salary. 
    Set rst = dbs.OpenRecordset("SELECT Count (*) " _ 
        & "AS TotalEmployees, Avg(Salary) " _ 
        & "AS AverageSalary, Max(Salary) " _ 
        & "AS MaximumSalary FROM Employees;") 
 
    ' Populate the Recordset. 
    rst.MoveLast 
 
    ' Call EnumFields to print the contents of 
    ' the Recordset. Pass the Recordset object and 
    ' desired field width. 
    EnumFields rst, 17 
 
    dbs.Close 
 
End Sub 

Se pasa un objeto Recordset al procedimiento Sub EnumFields desde el procedimiento que realiza la llamada. Después, el procedimiento da formato a los campos de Recordset y los imprime en la ventana Depuración. La variable es el ancho del campo impreso deseado. Algunos campos pueden estar truncados.

Sub EnumFields(rst As Recordset, intFldLen As Integer) 
 
    Dim lngRecords As Long, lngFields As Long 
    Dim lngRecCount As Long, lngFldCount As Long 
    Dim strTitle As String, strTemp As String 
 
    ' Set the lngRecords variable to the number of 
    ' records in the Recordset. 
    lngRecords = rst.RecordCount 
 
    ' Set the lngFields variable to the number of 
    ' fields in the Recordset. 
    lngFields = rst.Fields.Count 
 
    Debug.Print "There are " & lngRecords _ 
        & " records containing " & lngFields _ 
        & " fields in the recordset." 
    Debug.Print 
 
    ' Form a string to print the column heading. 
    strTitle = "Record  " 
    For lngFldCount = 0 To lngFields - 1 
        strTitle = strTitle _ 
        & Left(rst.Fields(lngFldCount).Name _ 
        & Space(intFldLen), intFldLen) 
    Next lngFldCount     
 
    ' Print the column heading. 
    Debug.Print strTitle 
    Debug.Print 
 
    ' Loop through the Recordset; print the record 
    ' number and field values. 
    rst.MoveFirst 
 
    For lngRecCount = 0 To lngRecords - 1 
        Debug.Print Right(Space(6) & _ 
            Str(lngRecCount), 6) & "  "; 
 
        For lngFldCount = 0 To lngFields - 1 
            ' Check for Null values. 
            If IsNull(rst.Fields(lngFldCount)) Then 
                strTemp = "<null>" 
            Else 
                ' Set strTemp to the field contents.  
                Select Case _ 
                    rst.Fields(lngFldCount).Type 
                    Case 11 
                        strTemp = "" 
                    Case dbText, dbMemo 
                        strTemp = _ 
                            rst.Fields(lngFldCount) 
                    Case Else 
                        strTemp = _ 
                            str(rst.Fields(lngFldCount)) 
                End Select 
            End If 
 
            Debug.Print Left(strTemp _  
                & Space(intFldLen), intFldLen); 
        Next lngFldCount 
 
        Debug.Print 
 
        rst.MoveNext 
 
    Next lngRecCount 
 
End Sub 

UtterAccess es el principal foro de ayuda y wiki sobre Microsoft Access. Haga clic aquí para unirse.

Mostrar: