выборка

Импортируйте данные в рабочее пространство MATLAB от выполнения SQL-оператора

Синтаксис

results = fetch(conn,sqlquery)
results = fetch(conn,sqlquery,opts)
results = fetch(___,Name,Value)
[results,metadata] = fetch(___)

Описание

пример

results = fetch(conn,sqlquery) возвращает все строки данных после выполнения SQL-оператора sqlquery для объекта connection. fetch импортирует данные в пакетах.

пример

results = fetch(conn,sqlquery,opts) настраивает опции для того, чтобы импортировать данные от выполняемого SQL-запроса при помощи объекта SQLImportOptions.

пример

results = fetch(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение" и любой из предыдущих комбинаций входных аргументов. Например, 'MaxRows',5 импортирует пять строк данных.

пример

[results,metadata] = fetch(___) также возвращает таблицу metadata, которая содержит информацию о метаданных об импортированных данных.

Примеры

свернуть все

Импортируйте все данные о продукте от таблицы базы данных Microsoft® SQL Server® в MATLAB® при помощи объекта connection. Затем определите самую высокую себестоимость единицы продукции среди продуктов в таблице.

Создайте соединение с базой данных ODBC к базе данных Microsoft® SQL Server® с аутентификацией Windows®. Задайте пустое имя пользователя и пароль. База данных содержит таблицу productTable.

datasource = 'MS SQL Server Auth';
conn = database(datasource,'','');

Проверяйте соединение с базой данных. Если свойство Message пусто, то связь успешна.

conn.Message
ans =

     []

Импортируйте все данные от productTable при помощи объекта connection и SQL-запроса, и отобразите импортированные данные.

sqlquery = 'SELECT * FROM productTable';
results = fetch(conn,sqlquery)
results =

  15×5 table

    productNumber    stockNumber    supplierNumber    unitCost    productDescription
    _____________    ___________    ______________    ________    __________________

          9          1.2597e+05          1003            13       'Victorian Doll'  
          8          2.1257e+05          1001             5       'Train Set'       
          7          3.8912e+05          1007            16       'Engine Kit'      
          2          4.0031e+05          1002             9       'Painting Set'    
          4          4.0034e+05          1008            21       'Space Cruiser'   
          1          4.0035e+05          1001            14       'Building Blocks' 
          5          4.0046e+05          1005             3       'Tin Soldier'     
          6          4.0088e+05          1004             8       'Sail Boat'       
          3            4.01e+05          1009            17       'Slinky'          
         10          8.8865e+05          1006            24       'Teddy Bear'      
         11          4.0814e+05          1004            11       'Convertible'     
         12          2.1046e+05          1010            22       'Hugsy'           
         13          4.7082e+05          1012            17       'Pancakes'        
         14           5.101e+05          1011            19       'Shawl'           
         15          8.9975e+05          1011            20       'Snacks'          

Определите самую высокую себестоимость единицы продукции для всех продуктов в таблице.

max(results.unitCost)
ans =

    24

Закройте соединение с базой данных.

close(conn)

Настройте настройки импорта при импортировании данных от результатов SQL-запроса на базе данных. Управляйте настройками импорта путем создания объекта SQLImportOptions. Затем настройте настройки импорта для различных столбцов в SQL-запросе. Импортируйте данные с помощью функции fetch .

Этот пример использует файл employees_database.mat , который содержит столбцы first_name, hire_date и DEPARTMENT_NAME. Пример также использует базу данных Microsoft® SQL Server® Version 11.00.2100 и Драйвер Microsoft SQL Server 11.00.5058.

Создайте соединение с базой данных ODBC к базе данных Microsoft SQL Server с аутентификацией Windows®. Задайте пустое имя пользователя и пароль.

datasource = 'MS SQL Server Auth';
conn = database(datasource,'','');

Загрузите информацию о сотруднике в рабочую область MATLAB®.

employeedata = load('employees_database.mat');

Создайте employees и таблицы базы данных departments с помощью информации о сотруднике.

emps = employeedata.employees;
depts = employeedata.departments;

sqlwrite(conn,'employees',emps)
sqlwrite(conn,'departments',depts)

Создайте объект SQLImportOptions с помощью SQL-запроса и функции databaseImportOptions. Этот запрос получает всю информацию для сотрудников, которые являются менеджерами по продажам или программистами.

sqlquery = ['SELECT * from employees e join departments d ' ...
    'on (e.department_id = d.department_id) where job_id ' ...
    'in (''IT_PROG'',''SA_MAN'')'];
opts = databaseImportOptions(conn,sqlquery)

Отобразите текущие настройки импорта для переменных, выбранных в свойстве SelectedVariableNames объекта SQLImportOptions.

vars = opts.SelectedVariableNames;
varOpts = getoptions(opts,vars)
varOpts = 
    1x16 SQLVariableImportOptions array with properties:

   Variable Options:
                       (1) |          (2) |         (3) |     (4) |            (5) |         (6) |      (7) |      (8) |              (9) |         (10) |            (11) |        (12) |            (13) |              (14) |         (15) |          (16)  
       Name: 'employee_id' | 'first_name' | 'last_name' | 'email' | 'phone_number' | 'hire_date' | 'job_id' | 'salary' | 'commission_pct' | 'manager_id' | 'department_id' | 'temporary' | 'DEPARTMENT_ID' | 'DEPARTMENT_NAME' | 'MANAGER_ID' | 'LOCATION_ID'
       Type:      'double' |       'char' |      'char' |  'char' |         'char' |      'char' |   'char' | 'double' |         'double' |     'double' |        'double' |    'double' |        'double' |            'char' |     'double' |      'double'
  FillValue:         [NaN] |           '' |          '' |      '' |             '' |          '' |       '' |    [NaN] |            [NaN] |        [NaN] |           [NaN] |       [NaN] |           [NaN] |                '' |        [NaN] |         [NaN]

	To access sub-properties of each variable, use getoptions

Измените типы данных для hire_date, DEPARTMENT_NAME и переменных first_name с помощью функции setoptions . Затем отобразите обновленные настройки импорта. Поскольку hire_date хранит данные о дате и времени, измените тип данных этой переменной к datetime. Поскольку DEPARTMENT_NAME определяет конечное множество повторяющихся значений, измените тип данных этой переменной к categorical. Кроме того, поменяйте имя этой переменной к нижнему регистру. Поскольку first_name хранит текстовые данные, измените тип данных этой переменной к string.

opts = setoptions(opts,'hire_date','Type','datetime');
opts = setoptions(opts,'DEPARTMENT_NAME','Name','department_name', ...
    'Type','categorical');
opts = setoptions(opts,'first_name','Type','string');

vars = opts.SelectedVariableNames;
varOpts = getoptions(opts,vars)
varOpts = 
    1x16 SQLVariableImportOptions array with properties:

   Variable Options:
                       (1) |          (2) |         (3) |     (4) |            (5) |         (6) |      (7) |      (8) |              (9) |         (10) |            (11) |        (12) |            (13) |              (14) |         (15) |          (16)  
       Name: 'employee_id' | 'first_name' | 'last_name' | 'email' | 'phone_number' | 'hire_date' | 'job_id' | 'salary' | 'commission_pct' | 'manager_id' | 'department_id' | 'temporary' | 'DEPARTMENT_ID' | 'department_name' | 'MANAGER_ID' | 'LOCATION_ID'
       Type:      'double' |     'string' |      'char' |  'char' |         'char' |  'datetime' |   'char' | 'double' |         'double' |     'double' |        'double' |    'double' |        'double' |     'categorical' |     'double' |      'double'
  FillValue:           NaN |    <missing> |          '' |      '' |             '' |         NaT |       '' |      NaN |              NaN |          NaN |             NaN |         NaN |             NaN |       <undefined> |          NaN |           NaN

	To access sub-properties of each variable, use getoptions

Выберите эти три измененных переменные с помощью свойства SelectVariableNames.

opts.SelectedVariableNames = {'first_name','hire_date','department_name'};

Импортируйте и отобразите результаты SQL-запроса с помощью функции fetch.

employees_data = fetch(conn,sqlquery,opts)
employees_data=10×3 table
    first_name          hire_date          department_name
    ___________    ____________________    _______________

    "Alexander"    03-Jan-2006 00:00:00         IT        
    "Bruce"        21-May-2007 00:00:00         IT        
    "David"        25-Jun-2005 00:00:00         IT        
    "Valli"        05-Feb-2006 00:00:00         IT        
    "Diana"        07-Feb-2007 00:00:00         IT        
    "John"         01-Oct-2004 00:00:00         Sales     
    "Karen"        05-Jan-2005 00:00:00         Sales     
    "Alberto"      10-Mar-2005 00:00:00         Sales     
    "Gerald"       15-Oct-2007 00:00:00         Sales     
    "Eleni"        29-Jan-2008 00:00:00         Sales     

Удалите employees и таблицы базы данных departments с помощью функции execute.

execute(conn,'DROP TABLE employees')
execute(conn,'DROP TABLE departments')

Закройте соединение с базой данных.

close(conn)

Укажите, что данные возвращают формат и количество импортированных строк для результатов SQL-запроса. Импортируйте данные с помощью SQL-запроса и функции fetch.

Этот пример использует базу данных Microsoft® SQL Server® Version 11.00.2100 и Драйвер Microsoft SQL Server 11.00.5058.

Создайте соединение с базой данных ODBC к базе данных Microsoft SQL Server с аутентификацией Windows®. Задайте пустое имя пользователя и пароль.

datasource = 'MS SQL Server Auth';
conn = database(datasource,'','');

Загрузите терпеливую информацию в рабочую область MATLAB®.

patients = readtable('patients.xls');

Создайте таблицу базы данных patients с помощью терпеливой информации.

tablename = 'patients';
sqlwrite(conn,tablename,patients)

Выберите все данные из таблицы базы данных patients и импортируйте пять строк из таблицы как структура. Используйте аргумент пары "имя-значение" 'DataReturnFormat', чтобы задать возврат данных о результате как структура. Кроме того, используйте аргумент пары "имя-значение" 'MaxRows', чтобы задать пять строк. Отобразите импортированные данные.

sqlquery = ['SELECT * FROM ' tablename];
results = fetch(conn,sqlquery,'DataReturnFormat','structure', ...
    'MaxRows',5)
results = struct with fields:
                    LastName: {5×1 cell}
                      Gender: {5×1 cell}
                         Age: [5×1 double]
                    Location: {5×1 cell}
                      Height: [5×1 double]
                      Weight: [5×1 double]
                      Smoker: [5×1 double]
                    Systolic: [5×1 double]
                   Diastolic: [5×1 double]
    SelfAssessedHealthStatus: {5×1 cell}

Удалите таблицу базы данных patients с помощью функции execute.

sqlquery = ['DROP TABLE ' tablename];
execute(conn,sqlquery)

Закройте соединение с базой данных.

close(conn)

Импортируйте данные о продукте от базы данных Microsoft® SQL Server® в MATLAB® при помощи связи ODBC и переменной в операторе SQL SELECT.

Создайте соединение с базой данных ODBC к базе данных Microsoft® SQL Server® с аутентификацией Windows®. Задайте пустое имя пользователя и пароль. База данных содержит таблицу productTable.

datasource = 'MS SQL Server Auth';
conn = database(datasource,'','');

Проверяйте соединение с базой данных. Если свойство Message пусто, то связь успешна.

conn.Message
ans =

     []

Выберите все данные из productTable путем определения описания продукта как переменной. Импортируйте данные от выполняемого запроса с помощью функции fetch.

Оператор SQL SELECT использует квадратные скобки, чтобы конкатенировать эти два вектора символов. Чтобы создать пару одинарных кавычек, которая появляется в операторе SQL SELECT, задайте два набора четырех одинарных кавычек вокруг productdesc. Внешние две метки формируют рисунок следующего вектора символов для конкатенации. Две внутренних метки обозначают кавычку в векторе символов.

productdesc = 'Painting Set';
sqlquery = ['SELECT * FROM productTable ' ...
    'WHERE productDescription = ' '''' productdesc ''''];
results = fetch(conn,sqlquery)
results =

  1×5 table

    productNumber    stockNumber    supplierNumber    unitCost    productDescription
    _____________    ___________    ______________    ________    __________________

          2          4.0031e+05          1002            9          'Painting Set'  

Вместо переменной используйте вектор символов 'Slinky', чтобы импортировать данные.

sqlquery = ['SELECT * FROM productTable ' ...
    'WHERE productDescription = ' '''Slinky'''];
results = fetch(conn,sqlquery)
results =

  1×5 table

    productNumber    stockNumber    supplierNumber    unitCost    productDescription
    _____________    ___________    ______________    ________    __________________

          3           4.01e+05           1009            17            'Slinky'     

Закройте соединение с базой данных.

close(conn)

Получите информацию о метаданных при импортировании данных от SQL-запроса. Импортируйте данные с помощью fetch, функционируют и исследуют информацию о метаданных при помощи записи через точку.

Этот пример использует файл outages.csv, который содержит данные об отключении электричества. Кроме того, пример использует базу данных Microsoft® SQL Server® Version 11.00.2100 и Драйвер Microsoft SQL Server 11.00.5058.

Создайте соединение с базой данных к базе данных Microsoft SQL Server с аутентификацией Windows®. Задайте пустое имя пользователя и пароль.

datasource = "MS SQL Server Auth";
conn = database(datasource,"","");

Загрузите информацию об отключении электричества в рабочую область MATLAB®.

outages = readtable("outages.csv");

Создайте таблицу базы данных outages с помощью информации об отключении электричества.

tablename = "outages";
sqlwrite(conn,tablename,outages)

Импортируйте данные в рабочее пространство MATLAB и возвратите информацию о метаданных об импортированных данных.

sqlquery = "SELECT * FROM outages";
[results,metadata] = fetch(conn,sqlquery);

Просмотрите имена переменных в импортированных данных.

metadata.Properties.RowNames
ans = 6×1 cell array
    {'Region'         }
    {'OutageTime'     }
    {'Loss'           }
    {'Customers'      }
    {'RestorationTime'}
    {'Cause'          }

Просмотрите тип данных каждой переменной в импортированных данных.

metadata.VariableType
ans = 6×1 cell array
    {'char'  }
    {'char'  }
    {'double'}
    {'double'}
    {'char'  }
    {'char'  }

Просмотрите недостающее значение данных для каждой переменной в импортированных данных.

metadata.FillValue
ans = 6×1 cell array
    {0×0 char}
    {0×0 char}
    {[   NaN]}
    {[   NaN]}
    {0×0 char}
    {0×0 char}

Просмотрите индексы недостающих данных для каждой переменной в импортированных данных.

metadata.MissingRows
ans = 6×1 cell array
    {  0×1 double}
    {  0×1 double}
    {604×1 double}
    {328×1 double}
    { 29×1 double}
    {  0×1 double}

Отобразите первые восемь строк импортированных данных, которые содержат недостающее время восстановления. data содержит время восстановления в пятой переменной. Используйте числовые индексы, чтобы найти строки с недостающими данными.

index = metadata.MissingRows{5,1};
nullrestoration = results(index,:);
head(nullrestoration)
ans=8×6 table
      Region              OutageTime             Loss     Customers     RestorationTime          Cause       
    ___________    _________________________    ______    __________    _______________    __________________

    'SouthEast'    '2003-01-23 00:49:00.000'    530.14    2.1204e+05          ''           'winter storm'    
    'NorthEast'    '2004-09-18 05:54:00.000'         0             0          ''           'equipment fault' 
    'MidWest'      '2002-04-20 16:46:00.000'     23141           NaN          ''           'unknown'         
    'NorthEast'    '2004-09-16 19:42:00.000'      4718           NaN          ''           'unknown'         
    'SouthEast'    '2005-09-14 15:45:00.000'    1839.2    3.4144e+05          ''           'severe storm'    
    'SouthEast'    '2004-08-17 17:34:00.000'     624.1    1.7879e+05          ''           'severe storm'    
    'SouthEast'    '2006-01-28 23:13:00.000'    498.78           NaN          ''           'energy emergency'
    'West'         '2003-06-20 18:22:00.000'         0             0          ''           'energy emergency'

Удалите таблицу базы данных outages с помощью функции execute.

sqlstr = "DROP TABLE ";
sqlquery = strcat(sqlstr,tablename);
execute(conn,sqlquery)

Закройте соединение с базой данных.

close(conn)

Входные параметры

свернуть все

Соединение с базой данных, заданное как объект connection, создается с функцией database.

SQL-оператор, заданный как вектор символов или скаляр строки. SQL-оператор может быть любым допустимым SQL-оператором, включая вложенные запросы. SQL-оператор может быть хранимой процедурой, такой как {call sp_name (parm1,parm2,...)}. Для хранимых процедур, которые возвращают один или несколько наборов результатов, используйте функцию fetch. Для процедур, которые возвращают выходные аргументы, используйте runstoredprocedure.

Для получения информации о языке SQL-запроса см. Пример по SQL.

Типы данных: char | string

Настройки импорта базы данных, заданные как объект SQLImportOptions.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: results = fetch(conn,sqlquery,'MaxRows',50,'DataReturnFormat','structure') импортирует 50 строк данных как структура.

Максимальное количество строк, чтобы возвратиться, заданный как пара, разделенная запятой, состоящая из 'MaxRows' и положительного числового скаляра. По умолчанию функция fetch возвращает все строки в выполняемый SQL-запрос. Используйте этот аргумент пары "имя-значение", чтобы ограничить количество строк, импортированных в MATLAB®.

Пример: 'MaxRows',10

Типы данных: double

Данные возвращают формат, заданный как пара, разделенная запятой, состоящая из 'DataReturnFormat' и одно из этих значений:

  • 'table'

  • 'cellarray'

  • 'numeric'

  • 'structure'

Используйте аргумент пары "имя-значение" 'DataReturnFormat', чтобы задать тип данных данных о результате results. Чтобы задать целочисленные классы для числовых данных, используйте входной параметр opts.

Можно задать эти значения с помощью векторов символов или представить скаляры в виде строки.

Пример: 'DataReturnFormat','cellarray' импортирует данные как массив ячеек.

Выходные аргументы

свернуть все

Данные о результате, возвращенные как таблица, массив ячеек, структура или числовая матрица. Данные о результате содержат все строки данных из выполняемого SQL-оператора по умолчанию.

Используйте аргумент пары "имя-значение" 'MaxRows', чтобы задать количество строк данных, чтобы импортировать. Используйте аргумент пары "имя-значение" 'DataReturnFormat', чтобы задать тип данных данных о результате.

Когда выполняемый SQL-оператор не возвращает строк, данные о результате являются пустой таблицей.

Информация о метаданных, возвращенная как таблица с этими переменными.

Имя переменнойОписание переменнойТипы данных переменных

VariableType

Тип данных каждой переменной в импортированных данных

Массив ячеек из символьных векторов

FillValue

Значение недостающих данных для каждой переменной в импортированных данных

Массив ячеек пропавших без вести значений данных

MissingRows

Индексы для каждого вхождения недостающих данных в каждой переменной импортированных данных

Массив ячеек числовых индексов

По умолчанию функция fetch импортирует текстовые данные как вектор символов и числовые данные как двойное. FillValue является пустым символьным массивом (для текстовых данных) или NaN (для числовых данных) по умолчанию. Чтобы изменить недостающее значение данных на другое значение, используйте объект SQLImportOptions.

Свойство RowNames таблицы metadata содержит имена переменных в импортированных данных.

Ограничения

Аргумент пары "имя-значение" 'MaxRows' имеет эти ограничения:

  • Если вы используете Microsoft® Access™, нативный интерфейс ODBC не поддержан.

  • Не вся поддержка драйверов базы данных, определяющая максимальный номер строк перед выполнением запросов. Для неподдерживаемого драйвера измените свой SQL-запрос, чтобы ограничить максимальное количество строк, чтобы возвратиться. Синтаксис SQL меняется в зависимости от драйвера. Для получения дополнительной информации консультируйтесь с документацией драйвера.

Советы

  • Порядок записей в вашей базе данных не остается постоянным. Сортировка данных с помощью SQL команда ORDER BY в операторе sqlquery.

  • Для Microsoft Excel® таблицы в sqlquery являются рабочими листами Excel. По умолчанию некоторые имена рабочего листа включают символ $. Чтобы выбрать данные из рабочего листа с этим форматом имени, используйте SQL-оператор формы SELECT * FROM "Sheet1$" (или 'Sheet1$').

  • Прежде чем вы измените таблицы базы данных, гарантируете, что база данных не открыта для редактирования. При попытке отредактировать базу данных, в то время как это открыто, вы получаете эту ошибку MATLAB:

    [Vendor][ODBC Driver] The database engine could not lock 
    table 'TableName' because it is already in use by 
    another person or process.
  • Система управления базами данных PostgreSQL поддерживает многомерные поля, но сбой операторов SQL SELECT при получении этих полей, если вы не задаете индекс.

  • Некоторые базы данных требуют, чтобы вы включали символ, такой как #, до и после даты в запросе, можно следующим образом:

    execute(conn,'SELECT * FROM mydb WHERE mydate > #03/05/2005#')
  • Выполнение функции fetch с входным параметром opts и набором аргумента пары "имя-значение" 'DataReturnFormat' к значению 'numeric' не имеет никакого эффекта. Соответствующее предупреждающее сообщение появляется в Командном окне.

Альтернативная функциональность

Приложение

Функция fetch импортирует данные с помощью командной строки. Чтобы импортировать данные в интерактивном режиме, используйте приложение Database Explorer.

Вопросы совместимости

развернуть все

Поведение изменяется в R2018b

Поведение изменяется в R2018b

Представленный в R2006b