Instrucción SELECT (Microsoft Access SQL)
Se aplica a: Access 2013 | Office 2013
Indica al motor de base de datos de Microsoft Access que devuelva información de la base de datos como un conjunto de registros.
Sintaxis
SELECT [predicado] { * | tabla.* | [tabla.]campo1 [AS alias1] [, [tabla.]campo2 [AS alias2] [, …]]} FROM expresiónDeTabla [, …] [IN externaldatabase] [DÓNDE... ] [GROUP BY... ] [TENER... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]
La instrucción SELECT consta de los siguientes elementos:
Elemento | Descripción |
---|---|
predicado | Uno de los siguientes predicados: ALL, DISTINCT, DISTINCTROW o TOP. Use el predicado 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. |
table | Nombre de la tabla que contiene los campos en los que se seleccionan registros. |
field1, field2 | Nombres de los campos que contienen los datos que desea recuperar. Si incluye varios campos, éstos se recuperan en el orden enumerado. |
alias1, alias2 | Los nombres que se van a usar como encabezados de columna en lugar de los nombres de columna originales de la tabla. |
expresiónDeTabla | Nombre de la tabla o tablas que contienen los datos que desea recuperar. |
externaldatabase | Nombre de la base de datos que contiene las tablas de tableexpression si no están en la base de datos actual. |
Comentarios
Para llevar a cabo esta operación, el motor de base de datos Microsoft Jet busca en la tabla o tablas especificadas, extrae las 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 ejemplo siguiente se seleccionan todos los campos de la tabla Employees.
SELECT * FROM Employees;
Si se incluye un nombre de campo en más de una tabla de la cláusula FROM, preceda al nombre de la tabla y al 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 la comunidad de UtterAccess. UtterAccess es el principal foro de ayuda y wiki de Microsoft Access.
Ejemplo
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