2016-10-02 4 views
0

Возьмите образец table_name = MyBooks,
если мы должны выбрать все книги запрос будет какВ чем разница между этими запросами и их работой?

select * from mybooks; 

Так что, когда и почему мы должны альясинга и сделать запрос как

select books.* from mybooks books; 

Я не понимаю, как это работает и его использование

+0

два запроса эквивалентен .. во втором у вас есть псевдоним для имени таблицы и полезно, если вам нужны все колонки из таблицы (но необходимость столбец alsio для другого столбца) – scaisEdge

+0

@scaisEdge «нужна колонка также для другой колонки», пожалуйста, объясните? –

+0

. Есть ошибка, которую я имею в виду и для других таблиц. Вторая нотация используется, например, для выбора книг. *, U. * Из моих книг, поскольку книги присоединяются к пользователю как u на books.key = u.key .. (но это не ваш случай) – scaisEdge

ответ

2

Псевдоним, как переименование этого конкретного использования таблицы, а также причины, чтобы использовать один являются:

  1. Просто используйте короткий дескриптор
  2. использовать ту же таблицу несколько раз в запросе (вам нужно что-то отличить их)

Если вы используете только одну таблицу, вам не нужен псевдоним, но ничто не мешает вам использовать его.

Примеры:

  1. Одна таблица, не добавляет ценности, но вы можете пойти с любым из них:

    SELECT * 
    FROM LongTableName 
    
    -- Only if you enjoy typing 
    SELECT LongTableName.* 
    FROM LongTableName 
    
    SELECT * 
    FROM LongTableName t 
    
    SELECT t.* 
    FROM LongTableName t 
    
  2. С более чем одной таблицы:

    -- Cartesian join or cross join, at least one of the instances requires an alias 
    SELECT * 
    FROM LongTableName, LongTableName l 
    
    -- You are forced to use the full name to refer to an "un-aliased" table 
    SELECT LongTableName.Field, l.Field 
    FROM LongTableName, LongTableName l 
    
    -- For any other join, if only one table has an alias, like in the previous case, 
    -- you will have to use the full name to refer to the other instance 
    SELECT * 
    FROM LongTableName 
    INNER JOIN LongTableName l ON LongTableName.Field = l.Field 
    
    -- Normally you simply use a short alias for both, like this 
    SELECT * 
    FROM LongTableName l1 
    INNER JOIN LongTableName l2 ON l1.Field = l2.Field 
    
    -- Only selecting some fields 
    SELECT l1.PrimaryKey, l1.Field, l2.PrimaryKey, l2.Field 
    FROM LongTableName l1 
    INNER JOIN LongTableName l2 ON l1.Field = l2.Field 
    

Если в SELECT вы хотите, чтобы все поля из всех используемых таблиц, вы можете просто использовать *, и все готово. Но если вам нужно выбрать определенные поля из нескольких таблиц, вы действительно оцените наличие псевдонимов.

0

Когда у вас есть соединения в вашем запросе, простая * приведет ко всем полям всех таблиц, включенных в объединение. При использовании книг. * Результат будет содержать только все поля таблицы книг.

Это не имеет ничего общего с псевдонимом, это еще одна концепция, в которой вы даете таблице псевдоним, чтобы вы могли различать две таблицы с тем же именем.

Обе концепции имеют смысл только тогда, когда у вас более сложные запросы с более чем одной таблицей.

+0

У меня нет таблицы книг .... все еще этот запрос работает в oracle .... Мне нужно сделать это таким образом, чтобы передать его классу ResultSet в Java EE ... так как иначе он преобразует его в формат только для чтения –

+0

Во втором заявлении, которое вы представили, вы дали псевдоним «книги» в таблицу под названием «mybooks». Это означает, что вы можете использовать «книги» или «книги» для доступа к таблице, первоначально названной mybooks. – usterdev

+0

ok .... если можно получить доступ к «книгам» из «книг» .... тогда это должно сработать, выбрать * из книг; ..... и зачем мне нужен псевдоним? –

2

Вы смешиваете две вещи. У вас уже есть несколько хороших ответов об использовании псевдонима. Однако это не единственный способ написать select * по-другому.

Без псевдонима можно сказать select mybooks.* ... - используя имя таблицы, а не псевдоним для него.

В некоторых случаях вам не нужно имя таблицы, и вы можете просто использовать select *. Однако, если вам нужно добавить другие столбцы - например, SYSDATE as DT, вы не сможете сделать это после select *. Вы должны использовать select mybooks.*, SYSDATE as DT ... - нет необходимости в псевдониме, но вы должны префикс * с именем таблицы, даже если запрос относится только к одной таблице.

Чаще это будет происходить с аналитическими функциями, как row_number() over ...

Смежные вопросы