/ / Czy obowiązkowe jest, aby tabele były w związku z wnioskiem Dołącz do nich? - serwer SQL

Czy dołączanie do nich jest obowiązkowe, aby tabele były w związku? - serwer sql

Czy obowiązkowe jest, aby tabele były w związku, aby zastosować Dołącz do nich? Jeśli tak, to Opracuj z przykładem Jeśli nie, to Opracuj z Przykładem .. Dziękujemy

Odpowiedzi:

0 dla odpowiedzi № 1

Wcale nie dla sql-Server. Tabele nie potrzebują powiązania kluczowego, aby mogły zostać ze sobą połączone.

Oto przykład:

SELECT * FROM
Table1 INNER JOIN Table2 ON Table1.Id = Table2.Id

Kolumna Id tabeli 1 nie musi być kluczowana do kolumny Id tabeli 2, aby to wykonać.


0 dla odpowiedzi nr 2

W MS SQL Server? Nie, tabele nie muszą mieć żadnych formalnych relacji, aby można je było zastosować w dowolnym rodzaju złączenia.

Ponieważ pytasz o przykład, rozważLiczby lub tablica wyników. Zasadniczo jest to tabela z jedną kolumną, której liczba rośnie wraz ze wzrostem wartości. (tzn. pierwszy rząd to 1, drugi rząd to 2 itd.) Jest to przydatne do wielu obliczeń, w tym do generowania zakresów dat, takich jak wszystkie dni, w których ktoś podróżował:

-- Assume a table "Numbers exists with one column, "num":
CREATE TABLE [dbo].[Numbers](
[Num] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Numbers] PRIMARY KEY CLUSTERED
(
[Num] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

Możemy następnie użyć tego, łącząc go z całkowicie niepowiązaną tabelą z zakresami dat. Chcemy wymienić wszystkie daty w dowolnym zakresie dat:

if OBJECT_ID("tempdb..#source") is not null drop table #source
go

create table #source(
id int,
startdate date,
enddate date
)
go

insert into #source values (1, "2013-12-28", "2014-01-12")
insert into #source values (1, "2014-01-10", "2014-01-22")
insert into #source values (2, "2014-12-22", null)
insert into #source values (2, "2014-12-01", "2015-01-10")
go
--  */

declare @earlydate date, @latedate date

-- Start and end dates of the range we"re trying to evaluate within
set @earlydate = "2014-01-01"
set @latedate = "2014-12-31"

;with fixed as (
select
id,
(select max (start_date) from (values (#source.startdate), (@earlydate)) as sd(start_date)) as startdate, -- calculate the LATER of the start dates
(select min (end_date) from (values (coalesce(enddate, cast(CURRENT_TIMESTAMP as date))), (@latedate)) as ed(end_date)) as enddate -- calculate the EARLIER of the end dates
from #source
)
select
id,
DateAdd(dd, num-1, startdate)
from fixed
cross apply Numbers
where DateAdd(dd, num, startdate) between startdate and dateadd(dd, 1, enddate)
order by 1,2

0 dla odpowiedzi № 3

Nie, nie jest obowiązkowe, aby dwie tabele były w relacjach, aby zastosować na nich łączenie.

Kiedy myślisz o słowie „Dołącz” w swoim umyśle, tyw rzeczywistości zbliżają dwie rzeczy do wspólnej płaszczyzny, warstwy, interfejsu itp. Tak długo, jak twoje dwie tabele mają wspólną wartość wiersza, możesz połączyć te dwie wartości z tymi wspólnymi wartościami / wartościami. Powiedzmy, że masz tabelę A, B. A masz trzy (lub cokolwiek) kolumnę a1, a2, a3. Podobnie B ma 5 (lub cokolwiek) liczbę kolumn. JEŻELI dowolna kolumna w A ma taką samą wartość jak dowolna kolumna w B w dowolnym wierszu, można użyć tej wspólnej wartości do połączenia. Przykład: wybierz nazwę kolumny z lewego połączenia A (lub zewnętrznego lub wewnętrznego) B na A.column = B.column

Związek jest bardziej specyficznym przypadkiemcelowo wprowadzając wartości wspólne dla dwóch tabel. Przykład: klucz obcy, klucz podstawowy. Zmuszasz tabelę zawierającą klucz obcy do posiadania takich samych wartości jak tabela z kluczem podstawowym.