How it works a mysql query with alias?

前端 未结 4 774
旧时难觅i
旧时难觅i 2021-01-28 10:17

I\'m new in this comunnity and I need to work with a query that get data from a mysql database, I have this query, but I need to add a new table and I don\'t understand why the

4条回答
  •  执念已碎
    2021-01-28 10:43

    Tables don't have to have aliases, unless you want to use the same table more than once, but it can make things shorter to type if the tables have columns named the same.

    Instead of having to write

    SELECT myfulltable1name.id, myfulltable2name.id
    

    You can write

    SELECT t1.id, t2.id
    

    (If you've aliased your tables as t1 and t2)

    Here's an example query where we use the same table more than once and need an alias to separate them:

    SELECT
      workAddresses.City as WorkCity,
      homeAddresses.City as HomeCity
    FROM
      Addresses workAddresses
      INNER JOIN
      Addresses homeAddresses
      ON 
        workAddresses.UserID = homeAddresses.UserID
    WHERE
      workAddresses.type = 'work' AND
      homeAddresses.type = 'home'
    

    Here the Addresses table stores work and home addresses for our users, with a type column to differentiate them. We want a result where tThe work and home address is on the same row, so we have to join the addresses table in twice, we give them sensible aliases so we can tell which is which, and we use where clause to make sure our workAddress table alias only refers to those records with type 'work'

    You'll notice I also put an alias on the column names selected, so you can know which is the work City and which is the home city

    Sometimes you MUST use an alias, like if you make a subquery, then the result must be aliased in order to be usable:

    SELECT
      workAddresses.City as WorkCity,
      homeAddresses.City as HomeCity
    FROM
      (SELECT * FROM Addresses WHERE type ='work') workAddresses
      INNER JOIN
      (SELECT * FROM Addresses WHERE type ='home') homeAddresses
      ON 
        workAddresses.UserID = homeAddresses.UserID
    

    Here we got information from the addresses tables by subquery, and the bracketed sql statements must have aliases

    Aliases are always declared at the first point that the object being aliased is brought into the query. For tables, this is in the FROM section, for columns this is in the SELECT section

    It might help you to consider it as if the database actually does the from section first, connecting all the tables together, then it does the where, to filter the rows, finally it does the select, to pull just the columns you want. C# has a built in query language called LINQ, that presents things in this more logical way, FROM table WHERE something = something SELECT somecolumns - makes it easier to say "things are aliased when they are first introduced, like variable naming". SQL is what it is, has been for years. You get used to it

提交回复
热议问题