https://de.wikipedia.org/w/api.php?action=feedcontributions&feedformat=atom&user=Bluefist Wikipedia - Benutzerbeiträge [de] 2025-11-03T10:55:52Z Benutzerbeiträge MediaWiki 1.45.0-wmf.25 https://de.wikipedia.org/w/index.php?title=Mohammad_Hafeez&diff=183230395 Mohammad Hafeez 2013-12-24T05:12:57Z <p>Bluefist: Reverted edits by Hafeez45 (talk) to last revision by RandomAct (HG)</p> <hr /> <div>{{BLP sources|date=December 2013}}<br /> {{copy edit|for=grammar, style, cohesion, tone, and/or spelling. And capitals, like in &quot;pakistan&quot;. And bullets etc.|date=December 2013}}<br /> {{Use Pakistani English|date=September 2013}}<br /> {{Use dmy dates|date=September 2013}}<br /> {{Infobox cricketer<br /> | name = Mohammad Hafeez<br /> <br /> <br /> | image = Mohammad hafeez.jpg <br /> | country = Pakistan<br /> | fullname = Mohammad Hafeez Cheena<br /> | father's name = Obaid Waheed Abbasi<br /> | nickname = Cheena ,Professor&lt;ref&gt;http://www.espncricinfo.com/magazine/content/story/636133.html&lt;/ref&gt; <br /> | birth_date = {{Birth date and age|1980|10|17|df=yes}}<br /> | birth_place = [[Sargodha]], [[Punjab (Pakistan)|Punjab]], [[Pakistan]]<br /> | heightft = 5<br /> | heightinch = 9<br /> | heightm = 1.75<br /> | batting = Right hand bat<br /> | bowling = Right arm [[off spin|off break]]<br /> | role = [[All-rounder]]<br /> | international = true<br /> | testdebutdate = 20 August<br /> | testdebutyear = 2003<br /> | testdebutagainst = Bangladesh<br /> | testcap = 173<br /> | lasttestdate = 10-14 September<br /> | lasttestyear = 2013<br /> | lasttestagainst = Zimbabwe<br /> | odidebutdate = 3 April<br /> | odidebutyear = 2003<br /> | odidebutagainst = Zimbabwe<br /> | odicap = 144<br /> | lastodidate = 22 December <br /> | lastodiyear = 2013<br /> | lastodiagainst = Sri Lanka <br /> | odishirt = 8<br /> | T20Idebutdate = 28 August <br /> | T20Idebutyear = 2006 <br /> | T20Idebutagainst = England <br /> | T20Icap = 5<br /> | lastT20Idate = 13 December<br /> | lastT20Iyear = 2013<br /> | lastT20Iagainst = Sri Lanka <br /> | columns = 5<br /> | column1 = [[Test cricket|Tests]]<br /> | matches1 = 34<br /> | runs1 = 2061<br /> | bat avg1 = 33.78<br /> | strike rate1 = 53.71<br /> | 100s/50s1 = 5/8<br /> | top score1 = 196<br /> | deliveries1 = 2693<br /> | wickets1 = 34<br /> | bowl avg1 = 33.00<br /> | economy1 = 2.52<br /> | fivefor1 = 0<br /> | tenfor1 = 0<br /> | best bowling1 = 4/16<br /> | catches/stumpings1 = 24/-<br /> | column2 = [[One Day International|ODIs]]<br /> | matches2 = 139 <br /> | runs2 = 3,942 <br /> | bat avg2 = 30.09 <br /> | 100s/50s2 = 8/18<br /> | top score2 = 140[[not out|*]]<br /> | deliveries2 = 5,742 <br /> | wickets2 = 110 <br /> | bowl avg2 = 35.05<br /> | fivefor2 = 0<br /> | tenfor2 = 0<br /> | best bowling2 = 3/17<br /> | catches/stumpings2 = 46/&amp;ndash;<br /> | column3 = [[Twenty20 International|T20I]]<br /> | matches3 = 54 <br /> | runs3 = 1,270 <br /> | bat avg3 = 25.76 <br /> | 100s/50s3 = 0/7 <br /> | top score3 = 86<br /> | deliveries3 = 914 <br /> | wickets3 = 44<br /> | bowl avg3 = 22.90 <br /> | fivefor3 = 0<br /> | tenfor3 = 0<br /> | best bowling3 = 4/10<br /> | catches/stumpings3 = 17/-<br /> | column4 = [[List A cricket|LA]]<br /> | matches4 = 231 <br /> | runs4 = 7,376 <br /> | bat avg4 = 33.68 <br /> | 100s/50s4 = 12/44<br /> | top score4 = 140[[not out|*]]<br /> | deliveries4 = 10,346 <br /> | wickets4 = 204 <br /> | bowl avg4 = 34.17 <br /> | fivefor4 = n/a<br /> | tenfor4 = n/a<br /> | best bowling4 = 4/23<br /> | catches/stumpings4 = 91/&amp;ndash; <br /> | column5 = [[First Class cricket|FC]]<br /> | matches5 = 167<br /> | runs5 = 9,560<br /> | bat avg5 = 34.63<br /> | 100s/50s5 = 20/46<br /> | top score5 = 196<br /> | deliveries5 = 12,761<br /> | wickets5 = 211<br /> | bowl avg5 = 27.06<br /> | fivefor5 = 6<br /> | tenfor5 = 2<br /> | best bowling5 = 8/57<br /> | catches/stumpings5 = 143/&amp;ndash;<br /> | column6 = [[Twenty20 cricket|T20]]<br /> | matches6 = 127<br /> | runs6 = 3,067<br /> | bat avg6 = 27.88<br /> | 100s/50s6 = 2/19<br /> | top score6 = 102[[not out|*]]<br /> | deliveries6 = 2,267<br /> | wickets6 = 113<br /> | bowl avg6 = 21.14<br /> | fivefor6 = 0<br /> | tenfor6 = 0<br /> | best bowling6 = 4/10<br /> | catches/stumpings6 = 48/&amp;ndash;<br /> | date = 23 December <br /> | year = 2013<br /> | source = http://www.cricinfo.com/ci/content/player/41434.html Cricinfo<br /> }}<br /> <br /> '''Mohammad Hafeez''' (born 17 October 1980 in Sargodha, Punjab) is a [[Pakistani_cricket_team|Pakistani cricket player]]. He is currently the captain of [[Pakistan national cricket team]] in the T20 format. He is a right-handed opening batsman and a right-arm offspin bowler. Hafeez usually opens the batting and forms part of the bowling attack. In 2012-2013, he has been ranked as the top all-rounder by the [[ICC Player Rankings]] in T20 format. He is known for his intelligent batting but also for aggressive shot plays when needed.&lt;ref&gt;{{cite web|url=http://www.cricinfo.com/ci/content/player/41434.html |title=Player Profile: Mohammad Hafeez |publisher=[[Cricinfo]] |accessdate=2010-08-12}}&lt;/ref&gt; His batting technique is the same as that of Chris Martin. He was involved in record opening partenrship of 224 runs with Nasir Jamshed. As a player, Hafeez gives the team plenty of options: he usually bats aggressively at the top of the order, but his organised technique also means he can switch to defensive mode if required. He doesn't flight his offbreaks much, but his excellent control over line and length allows the captain to use him at almost any stage of an innings. To be short and precise, he adds a combo mix to the Pakistani side. He is also one of the better fielders in the Pakistan team, especially in the point region.<br /> <br /> He was the fourth international player signed to the [[Caribbean Premier League]] and the first Pakistani player to be named to the new [[Twenty20]] tournament. He is widely regarded as The Professor. &lt;ref&gt;http://cplt20.com/news/pakistan-t20i-captain-mohammad-hafeez-signs-cpl&lt;/ref&gt; The major teams which he played are Pakistan, Faisalabad, Faisalabad Wolves, Guyana Amazon Warriors, Kolkata Knight Riders, Sargodha, Sui Gas Corporation of Pakistan<br /> <br /> ==Early international career: 2003–2006==<br /> Mohammad Hafeez was one of several young all-rounders whom the [[Pakistani cricket team]] turned to in order to revitalize their side after their poor display in 2003 World Cup where Pakistan was out from first round. His form with both bat and ball was inconsistent and in late 2003 he was dropped from the Test squad and subsequently from the ODI side. Following strong domestic performances, as well as display of good form for the Pakistan A side, he remained on the fringes of a recall in 2004. <br /> <br /> Hafeez returned to the ODI side in 2005 and despite poor form with the bat, his bowling performances were impressive. In the 2006 series held in [[Australia]], Hafeez smashed his first century for Pakistan. With Pakistan struggling to find a solid opening pair for the Test side, he was recalled for the tour of [[England]]. His return to Test cricket was made at [[The Oval]] where he scored a fluent 95. Subsequently, Hafeez retained his place in the Test squad for Pakistan's home series against the [[West Indies]] in November of that year. After getting out early despite good starts in the first two Tests, he went on to score his second Test century in the third Test in [[Karachi]]. However his form remained inconsistent and he was unable to command a regular place in either the Test or ODI side over the next 5 years.<br /> <br /> == International recall: 2010==<br /> In 2010 he was recalled for the third [[ICC World Twenty20]] squad. His form was poor scoring only 39 runs and taking only 2 wickets in 6 matches. However he was subsequently selected for the [[T20I]]s and the [[One Day International|ODIs]] on Pakistan's 2010 tour of England. He was the second highest Pakistani run scorer in the ODI series producing some solid opening partnerships with [[Kamran Akmal]]. Following this good form he was included in the squad that was selected to play South Africa in the [[UAE]] and he replaced disgraced skipper [[Salman Butt]] as an opening batsman in both Tests, achieving a batting average 32.50. He played in all 5 ODI matches ending up as the top run scorer and he also topped the bowling averages for the series. At the end of 2010 he was also selected for the party that would tour New Zealand and the [[West Indies]] and this resulted in him establishing himself as a regular in the Test, ODI and T20 teams. In 2011 he won an amazing 10 Man-of-the-Match awards in all forms of international cricket and became only the third player (after [[Sanath Jayasuriya]] and [[Jacques Kallis]]) to score 1000 runs and take 30 wickets in ODI matches within a calendar year. <br /> <br /> Against India on 18 March 2012 in Bangladesh at Shere Bangla National Stadium, Mirpur at the [[2012 Asia Cup]], he scored 105 off 113 balls and was involved in a 224 run partnership with [[Nasir Jamshed]], which is the best opening partnership for Pakistan against India in one day internationals. They eclipsed [[Aamer Sohail]] and [[Saeed Anwar]]'s record of 144 runs which was made in 1996.&lt;ref&gt;{{cite web|last=Purohit|first=Abhishek|title= Hafeez demolished India in record partnership|url=http://www.espncricinfo.com/asia-cup-2012/content/current/story/557744.html|accessdate=18 March 2012}}&lt;/ref&gt; He made his 4th ODI century in March 2012 against Bangladesh at Dhaka. He also made his highest test score of 196 against Sri Lanka in the second Test at Colombo in June 2012. He is currently (2012) ranked number two in the ICC ODI rankings for both bowlers and all-rounders.<br /> <br /> In December 2012, during the tour of [[Pakistani cricket team in India in 2012–13]], he came across as a very different and aggressive batsman and scored so brilliantly and briskely and helped Pakistan to win the first T20I and 2nd ODI with his heroics of brilliant batting and nearly chasing a mountain high target of 191 in the second T20I. His scores were 61 and 55 in first and second T20I respectively and scored 76 runs in the 2nd ODI and sharing an opening stand of 141 with [[Nasir Jamshed]] and also bowled brilliantly as always economically to help Pakistan win their first ODI series in India since 7 years. He is now considered to be the main allrounder of Pakistan Cricket team. He had a great series against Sri Lanka in Dec 2013, where he scored 122 in the first match and 140 in the third match.<br /> <br /> ==Personal records and achievements==<br /> <br /> 1. Has most number of wins in T20Is as Pakistan captain<br /> <br /> 2. First player to score 1,000 T20 runs and take 40 plus wickets<br /> <br /> 3. Leading run scorer for Pakistan in T20Is and eighth overall in T20Is<br /> <br /> 4. The first captain of Pakistan to score three fifties in a row in T20Is <br /> <br /> 5. The third most economical bowler in the history of Pakistan's ODIs (who have taken 100 plus wickets) after the legendary [[Imran Khan]] and [[Wasim Akram]]<br /> <br /> 6. Record holder of most fifties by a Pakistani batsman in T20Is<br /> <br /> 7. Along with Taufeeq Umar he opened the innings more consecutively in Test matches than any other pair in Pakistan cricket history<br /> <br /> 8. PCB &quot;Player-of-the-Year&quot; award in 2012<br /> <br /> 9. Nominated by the ICC for the &quot;Spirit-of-Cricket&quot; award for not claiming a false catch in a Test match vs England in UAE in 2012<br /> <br /> ==T20 captainship==<br /> He was appointed captain of the Pakistan T20 team in May 2012 and vice captain, under [[Misbah-ul-Haq]], of the ODI and Test teams. <br /> <br /> During the T20 World Championship in [[Sri Lanka]] in September 2012, Pakistan reached the semi-finals where they lost to the home side. After the tournament, there was some controversy with veteran all-rounder [[Abdul Razzaq (cricketer)|Abdul Razzaq]] who was critical of his non-selection for a number of matches. Hafeez also came into some conflict with the [[Pakistan Cricket Board|PCB]] over their view that he adopted a rather unilateral and non-consultative approach while making selection decisions. However, he was supported by the coach [[Dav Whatmore]] and both of them emphasised the poor fitness levels of many players. The PCB committee decided that they would subsequently closely monitor Hafeez's performance in this context during the coming tours to India and South Africa.&lt;ref&gt;http://sports.ndtv.com/icc-world-twenty20/news/item/198178-pcb-not-happy-with-mohammad-hafeezs-unilateral-approach&lt;/ref&gt;<br /> As a captain,he led pakistan to victories over south africa,west indies,thet20 champions and zimbabwe .He equalled the records of most wins as a pakistani captain in t20 and most number of away series wins as a pakistani captain<br /> Under his leadership,pakistan managed to move upto the second position in the rankings.<br /> He also became the first pakistani captain to hit three fifties in a row and became pakistans leading run scorer in t20s<br /> '''<br /> == Achievements as a captain ==<br /> As a captain he has the following achievements<br /> <br /> 1.He led SNGPL to their first Quaid-e-Azam trophy<br /> <br /> 2.SNGPL became the first pakistani team to lift the nissar trophy<br /> <br /> 3.SNGPL won the ABN AMRO tournament in 2008<br /> <br /> 4.He has the record of most number of wins as a Pakistani captain in t20<br /> <br /> 5.he has the record of most number of away series win in t20 for pakistan<br /> <br /> 6.he led pakistan to semi finals of the world t20 2012<br /> <br /> 7.pakistan defeated arch rivals india for the first time after 2009 under his leadership in Bangalore and also became the first t20 win for pakistan versus india<br /> <br /> 8.Pakistan whitewashed the world champions west indies and won series against SA,Australia,Zimbabwe<br /> <br /> 9.he lifted the faysal bank t20 cup for lahore lions<br /> <br /> 10. Under his captaincy in 2013, Pakistan whitewashed world champions west indies in t20I<br /> <br /> ==Test centuries==<br /> * In the column '''Runs''', * indicates being '''not out'''<br /> * The column title '''Match''' refers to the '''Match Number''' of the player's career<br /> <br /> {| class=&quot;wikitable&quot;<br /> |+ Mohammad Hafeez's Test centuries<br /> |-<br /> ! width=&quot;40&quot; | !! width=&quot;50&quot; | Runs !! width=&quot;50&quot; | Match !! width=&quot;150&quot; | Against !! width=&quot;200&quot; | City/Country !! width=&quot;200&quot; | Venue !! width=&quot;50&quot; | Year<br /> |-<br /> | '''[1]''' || 102* || 2 || {{cr|BAN}} || [[Peshawar]], Pakistan || [[Arbab Niaz Stadium]] || 2003<br /> |-<br /> | '''[2]''' || 104 || 7 || {{cr|WIN}} || [[Karachi]], Pakistan || [[National Stadium]] || 2006<br /> |-<br /> | '''[3]''' || 119 || 18 || {{cr|ZIM}} || [[Bulawayo]], Zimbabwe || [[Queens Sports Club]] || 2011<br /> |-<br /> | '''[4]''' || 143 || 22 || {{cr|BAN}} || [[Chittagong]], Bangladesh || [[Zahur Ahmed Chowdhury Stadium]] || 2011<br /> |-<br /> | '''[5]''' || 196 || 27 || {{cr|SL}} || [[Colombo]], Sri Lanka || [[Sinhalese Sports Club Ground]] || 2012<br /> |}<br /> <br /> ==One Day International centuries==<br /> * In the column '''Runs''', * indicates being '''not out'''<br /> * The column title '''Match''' refers to the '''Match Number''' of the player's career<br /> <br /> {| class=&quot;wikitable&quot;<br /> |+ Mohammad Hafeez's One Day International centuries<br /> |-<br /> ! width=&quot;40&quot; | !! width=&quot;50&quot; | Runs !! width=&quot;50&quot; | Match !! width=&quot;150&quot; | Against !! width=&quot;200&quot; | City/Country !! width=&quot;200&quot; | Venue !! width=&quot;50&quot; | Year<br /> |-<br /> | '''[1]''' || 115 || 61 || {{cr|NZL}} || [[Christchurch]], New Zealand || [[Lancaster Park|AMI Stadium]] || 2011<br /> |-<br /> | '''[2]''' || 121 || 76 || {{cr|WIN}} || Barbados, [[West Indies]] || [[Kensington Oval]] || 2011<br /> |-<br /> | '''[3]''' || 139* || 81 || {{cr|ZIM}} || [[Harare]], Zimbabwe || [[Harare Sports Club]] || 2011<br /> |-<br /> | '''[4]''' || 105 || 98 || {{cr|IND}} || [[Mirpur Thana]], [[Bangladesh]] || [[Sher-e-Bangla National Stadium]] || 2012<br /> |-<br /> | '''[5]''' || 122* || 117 || {{cr|IRE}} || [[Dublin, Ireland]] || [[Clontarf Cricket Club Ground]] || 2013<br /> |-<br /> | '''[6]''' || 136* || 123 || {{cr|ZIM}} || [[Harare, Zimbabwe]]|| [[Harare Sports Club ]] || 2013<br /> |-<br /> | '''[7]''' || 122 || 137 || {{cr|SL}} || [[Sharjah]], [[UAE]]|| [[Sharjah Cricket Stadium]] || 2013<br /> |-<br /> | '''[8]''' || 140[[not out|*]] || 139 || {{cr|SL}} || [[Sharjah]], [[UAE]]|| [[Sharjah Cricket Stadium]] || 2013<br /> |}<br /> <br /> ==References==<br /> {{Reflist}}<br /> <br /> {{s-start}}<br /> {{succession box|<br /> before= [[Misbah-ul-Haq]]|<br /> title= [[Pakistani national cricket captains|Pakistani national cricket captain]] (T20I)|<br /> years= 2012 – present|<br /> after= '''Incumbent'''<br /> }}<br /> {{s-end}}<br /> <br /> ==External links==<br /> <br /> {{Current national cricket captains}}<br /> {{Pakistan T20I Cricket Captains}}<br /> {{Pakistan Squad 2007 Cricket World Cup}}<br /> {{Pakistan Squad 2007 ICC World Twenty20}}<br /> {{Pakistan Squad 2010 ICC World Twenty20}}<br /> {{Pakistan Squad 2011 Cricket World Cup}}<br /> {{Pakistan Squad 2012 ICC World Twenty20}}<br /> <br /> {{Persondata &lt;!-- Metadata: see [[Wikipedia:Persondata]]. --&gt;<br /> | NAME = Mohammad, Hafeez<br /> | ALTERNATIVE NAMES =<br /> | SHORT DESCRIPTION = Famous all-rounder cricket player from Pakistan<br /> | DATE OF BIRTH = 17 October 1980<br /> | PLACE OF BIRTH = [[Sargodha]], [[Punjab (Pakistani province)|Punjab]]<br /> | DATE OF DEATH =<br /> | PLACE OF DEATH =<br /> }}<br /> {{DEFAULTSORT:Mohammad, Hafeez}}<br /> [[Category:1980 births]]<br /> [[Category:Living people]]<br /> [[Category:Pakistani cricket captains]]<br /> [[Category:Pakistan One Day International cricketers]]<br /> [[Category:Cricketers at the 2007 Cricket World Cup]]<br /> [[Category:Cricketers at the 2011 Cricket World Cup]]<br /> [[Category:Pakistan Test cricketers]]<br /> [[Category:Pakistan Twenty20 International cricketers]]<br /> [[Category:Sargodha cricketers]]<br /> [[Category:Sui Gas Corporation of Pakistan cricketers]]<br /> [[Category:Kolkata Knight Riders cricketers]]<br /> [[Category:People from Sargodha District]]<br /> [[Category:Punjabi people]]<br /> [[Category:Pakistani cricketers]]<br /> [[Category:Faisalabad cricketers]]<br /> [[Category:Faisalabad Wolves cricketers]]<br /> [[Category:Baluchistan Bears cricketers]]<br /> [[Category:Khulna Royal Bengals cricketers]]<br /> [[Category:Wayamba cricketers]]<br /> [[Category:Punjab (Pakistan) cricketers]]</div> Bluefist https://de.wikipedia.org/w/index.php?title=Abstraktion_(Informatik)&diff=131251016 Abstraktion (Informatik) 2013-12-21T07:05:25Z <p>Bluefist: Reverted edits by 27.251.145.5 (talk) to last revision by BG19bot (HG)</p> <hr /> <div>{{Refimprove|date=June 2011}}<br /> In [[computer science]], '''abstraction''' is the process of separating ideas from specific instances of those ideas at work. [[Computational structures]] are defined by their meanings ([[Semantics#Computer_science|semantics]]), while hiding away the details of how they work. Abstraction tries to factor out details from a common pattern so that programmers can work close to the level of human thought, leaving out details which matter in practice, but are exigent to the problem being solved. For example, a system can have several [[abstraction layer]]s whereby different meanings and amounts of detail are exposed to the programmer; [[High and low level|low-level]] abstraction layers expose details of the [[computer hardware]] where the program [[Execution (computing)|run]], while high-level layers deal with the [[business logic]] of the program.<br /> <br /> Abstraction captures only those details about an object that are relevant to the current perspective; in both computing and in mathematics, numbers are concepts in [[programming language]]s. Numbers can be represented in myriad ways in hardware and software, but, irrespective of how this is done, numerical operations will obey identical rules.<br /> <br /> Abstraction can apply to control or to data: '''Control abstraction''' is the abstraction of actions while '''data abstraction''' is that of [[data structures]].<br /> <br /> * Control abstraction involves the use of [[subprogram]]s and related concepts [[control flow]]s<br /> * Data abstraction allows handling data bits in meaningful ways. For example, it is the basic motivation behind [[datatype]].<br /> <br /> One can regard the notion of an [[object (computer science)|object]] (from [[object-oriented programming]]) as an attempt to combine abstractions of data and code.<br /> <br /> The same abstract definition can be used as a common [[Interface (computer science)|interface]] for a family of objects with different implementations and behaviors but which share the same meaning. The [[Inheritance (computer science)|inheritance]] mechanism in object-oriented programming can be used to define an [[Class_(computer_science)#Abstract|abstract class]] as the common interface.<br /> <br /> The recommendation that programmers use abstractions whenever suitable in order to avoid duplication (usually [[code duplication|of code]]) is known as the [[abstraction principle (programming)|abstraction principle]]. The requirement that a programming language provide suitable abstractions is also called the abstraction principle.<br /> <br /> ==Rationale==<br /> Computing mostly operates independently of the concrete world: The hardware implements a [[model of computation]] that is interchangeable with others. The software is structured in [[software architecture|architecture]]s to enable humans to create the enormous systems by concentration on a few issues at a time. These architectures are made of specific choices of abstractions. [[Greenspun's Tenth Rule]] is an [[aphorism]] on how such an architecture is both inevitable and complex.<br /> <br /> A central form of abstraction in computing is language abstraction: new artificial languages are developed to express specific aspects of a system. ''[[Modeling languages]]'' help in planning. ''[[Computer language]]s'' can be processed with a computer. An example of this abstraction process is the generational development of [[programming language]]s from the [[First-generation programming language|machine language]] to the [[Second-generation programming language|assembly language]] and the [[Third-generation programming language|high-level language]]. Each stage can be used as a stepping stone for the next stage. The language abstraction continues for example in [[scripting language]]s and [[domain-specific programming language]]s.<br /> <br /> Within a programming language, some features let the programmer create new abstractions. These include the [[subroutine]], the [[module (programming)|module]], and the [[software component]]. Some other abstractions such as [[software design pattern]]s and [[software architecture#Architecture examples|architectural styles]] remain invisible to a programming language and operate only in the design of a system.<br /> <br /> Some abstractions try to limit the breadth of concepts a programmer needs by completely hiding the abstractions that in turn are built on. The software engineer and writer [[Joel Spolsky]] has criticised these efforts by claiming that all abstractions are ''[[leaky abstraction|leaky]]'' — that they can never completely hide the details below; however this does not negate the usefulness of abstraction. Some abstractions are designed to interoperate with others, for example a programming language may contain a [[foreign function interface]] for making calls to the lower-level language.<br /> Data abstraction is the separation between the specification of data object and its implementation.<br /> <br /> ==Language features==<br /> <br /> ===Programming languages===<br /> {{Main|Programming language}}<br /> <br /> Different programming languages provide different types of abstraction, depending on the intended applications for the language. For example:<br /> <br /> * In [[object-oriented programming language]]s such as [[C++]], [[Object Pascal]], or [[Java (programming language)|Java]], the concept of '''abstraction''' has itself become a declarative statement - using the [[keyword (computer programming)|keyword]]s ''&lt;code&gt;virtual&lt;/code&gt;'' (in [[C++]]) or ''&lt;code&gt;abstract&lt;/code&gt;'' and ''&lt;code&gt;interface&lt;/code&gt;'' (in [[Java (programming language)|Java]]). After such a declaration, it is the responsibility of the programmer to implement a [[Class (computer science)|class]] to instantiate the [[Object (computer science)|object]] of the declaration.<br /> * [[Functional programming language]]s commonly exhibit abstractions related to functions, such as [[lambda abstraction]]s (making a term into a function of some variable), [[higher-order function]]s (parameters are functions), [[bracket abstraction]] (making a term into a function of a variable). &lt;!-- This has to be merged in the following sections. --&gt;<br /> * Modern Lisps such as [[Clojure]], [[Scheme (programming language)|Scheme]] and [[Common Lisp]] support [[Macro (computer science)#Syntactic_macros|macro systems]] to allow syntactic abstraction. This allows a Lisp programmer to eliminate [[boilerplate code]], abstract away tedious function call sequences, implement new [[Control flow|control flow structures]], implement or even build [[Domain-specific language|Domain Specific Languages (DSLs)]], which allow domain-specific concepts to be expressed in some optimised way. All of these, when used correctly, improve both the programmer's efficiency and the clarity of the code by making the intended purpose more explicit. A consequence of syntactic abstraction is also that any Lisp dialect and in fact almost any programming language can, in principle, be implemented in any modern Lisp with significantly reduced (but still non-trivial in some cases) effort when compared to &quot;more traditional&quot; programming languages such as [[Python (programming language)|Python]], [[C (programming language)|C]] or [[Java (programming language)|Java]].<br /> <br /> ===Specification methods===<br /> {{Main|Formal specification}}<br /> <br /> Analysts have developed various methods to formally specify software systems. Some known methods include:<br /> <br /> * Abstract-model based method (VDM, Z);<br /> * Algebraic techniques (Larch, CLEAR, OBJ, ACT ONE, CASL);<br /> * Process-based techniques (LOTOS, SDL, Estelle);<br /> * Trace-based techniques (SPECIAL, TAM);<br /> * Knowledge-based techniques (Refine, Gist).<br /> <br /> ===Specification languages===<br /> {{Main|Specification language}}<br /> <br /> Specification languages generally rely on abstractions of one kind or another, since specifications are typically defined earlier in a project, (and at a more abstract level) than an eventual implementation. The [[Unified Modeling Language|UML]] specification language, for example, allows the definition of ''abstract'' classes, which remain abstract during the architecture and specification phase of the project.<br /> <br /> ==Control abstraction==<br /> {{Main|Control flow}}<br /> <br /> Programming languages offer control abstraction as one of the main purposes of their use. Computer machines understand operations at the very low level such as moving some bits from one location of the memory to another location and producing the sum of two sequences of bits. Programming languages allow this to be done in the higher level. For example, consider this statement written in a [[Pascal (programming language)|Pascal]]-like fashion:<br /> <br /> :&lt;code&gt;a := (1 + 2) * 5&lt;/code&gt;<br /> <br /> To a human, this seems a fairly simple and obvious calculation (''&quot;one plus two is three, times five is fifteen&quot;''). However, the low-level steps necessary to carry out this evaluation, and return the value &quot;15&quot;, and then assign that value to the variable &quot;a&quot;, are actually quite subtle and complex. The values need to be converted to binary representation (often a much more complicated task than one would think) and the calculations decomposed (by the compiler or interpreter) into assembly instructions (again, which are much less intuitive to the programmer: operations such as shifting a binary register left, or adding the binary complement of the contents of one register to another, are simply not how humans think about the abstract arithmetical operations of addition or multiplication). Finally, assigning the resulting value of &quot;15&quot; to the variable labeled &quot;a&quot;, so that &quot;a&quot; can be used later, involves additional 'behind-the-scenes' steps of looking up a variable's label and the resultant location in physical or virtual memory, storing the binary representation of &quot;15&quot; to that memory location, etc.<br /> <br /> Without control abstraction, a programmer would need to specify ''all'' the register/binary-level steps each time she simply wanted to add or multiply a couple of numbers and assign the result to a variable. Such duplication of effort has two serious negative consequences:<br /> <br /> # it forces the programmer to constantly repeat fairly common tasks every time a similar operation is needed<br /> # it forces the programmer to program for the particular hardware and instruction set<br /> <br /> ===Structured programming===<br /> {{Main|Structured programming}}<br /> <br /> Structured programming involves the splitting of complex program tasks into smaller pieces with clear flow-control and interfaces between components, with reduction of the complexity potential for side-effects.<br /> <br /> In a simple program, this may aim to ensure that loops have single or obvious exit points and (where possible) to have single exit points from functions and procedures.<br /> <br /> In a larger system, it may involve breaking down complex tasks into many different modules. Consider a system which handles payroll on ships and at shore offices:<br /> <br /> * The uppermost level may feature a menu of typical end-user operations.<br /> * Within that could be standalone executables or libraries for tasks such as signing on and off employees or printing checks.<br /> * Within each of those standalone components there could be many different source files, each containing the program code to handle a part of the problem, with only selected interfaces available to other parts of the program. A sign on program could have source files for each data entry screen and the database interface (which may itself be a standalone third party library or a statically linked set of library routines).<br /> *Either the database or the payroll application also has to initiate the process of exchanging data with between ship and shore, and that data transfer task will often contain many other components.<br /> <br /> These layers produce the effect of isolating the implementation details of one component and its assorted internal methods from the others. Object-oriented programming embraced and extended this concept.<br /> <br /> ==Data abstraction==<br /> {{Main|Abstract data type}}<br /> <br /> Data abstraction enforces a clear separation between the ''abstract'' properties of a [[data type]] and the ''concrete'' details of its implementation. The abstract properties are those that are visible to client code that makes use of the data type—the ''interface'' to the data type—while the concrete implementation is kept entirely private, and indeed can change, for example to incorporate efficiency improvements over time. The idea is that such changes are not supposed to have any impact on client code, since they involve no difference in the abstract behaviour.<br /> <br /> For example, one could define an [[abstract data type]] called ''lookup table'' which uniquely associates ''keys'' with ''values'', and in which values may be retrieved by specifying their corresponding keys. Such a lookup table may be implemented in various ways: as a [[hash table]], a [[binary search tree]], or even a simple linear [[List (computing)|list]] of (key:value) pairs. As far as client code is concerned, the abstract properties of the type are the same in each case.<br /> <br /> Of course, this all relies on getting the details of the interface right in the first place, since any changes there can have major impacts on client code. As one way to look at this: the interface forms a ''contract'' on agreed behaviour between the data type and client code; anything not spelled out in the contract is subject to change without notice.<br /> <br /> &lt;!-- This makes no sense to me. [[User:TakuyaMurata|Taku]] 07:13, 19 June 2005 (UTC) --&gt;<br /> Languages that implement data abstraction include [[Ada programming language|Ada]] and [[Modula-2]]. [[Object-oriented]] languages are commonly claimed{{By whom|date=March 2009}} to offer data abstraction; however, their [[Inheritance (computer science)|inheritance]] concept tends to put information in the interface that more properly belongs in the implementation; thus, changes to such information ends up impacting client code, leading directly to the [[Fragile binary interface problem]].<br /> <br /> ==Abstraction in object oriented programming==<br /> {{Main|Object (computer science)}}<br /> <br /> In [[object-oriented programming]] theory, '''abstraction''' involves the facility to define objects that represent abstract &quot;actors&quot; that can perform work, report on and change their state, and &quot;communicate&quot; with other objects in the system. The term [[information hiding|encapsulation]] refers to the hiding of [[state (computer science)|state]] details, but extending the concept of ''data type'' from earlier programming languages to associate ''behavior'' most strongly with the data, and standardizing the way that different data types interact, is the beginning of '''abstraction'''. When abstraction proceeds into the operations defined, enabling objects of different types to be substituted, it is called [[polymorphism (computer science)|polymorphism]]. When it proceeds in the opposite direction, inside the types or classes, structuring them to simplify a complex set of relationships, it is called [[Delegation (programming)|delegation]] or [[Inheritance (computer science)|inheritance]].<br /> <br /> Various object-oriented programming languages offer similar facilities for abstraction, all to support a general strategy of [[polymorphism (computer science)|polymorphism]] in object-oriented programming, which includes the substitution of one [[type in object-oriented programming|type]] for another in the same or similar role. Although not as generally supported, a [[configuration in object-oriented programming|configuration]] or image or package may predetermine a great many of these [[name binding|bindings]] at [[compile-time]], [[link-time]], or [[loadtime]]. This would leave only a minimum of such bindings to change at [[Run time (program lifecycle phase)|run-time]].<br /> <br /> [[Common Lisp Object System]] or [[Self (programming language)|Self]], for example, feature less of a class-instance distinction and more use of delegation for [[polymorphism in object-oriented programming|polymorphism]]. Individual objects and functions are abstracted more flexibly to better fit with a shared functional heritage from [[Lisp programming language|Lisp]].<br /> <br /> C++ exemplifies another extreme: it relies heavily on [[generic programming|templates]] and [[method overloading|overloading]] and other static bindings at compile-time, which in turn has certain flexibility problems.<br /> <br /> Although these examples offer alternate strategies for achieving the same abstraction, they do not fundamentally alter the need to support abstract nouns in code - all programming relies on an ability to abstract verbs as functions, nouns as data structures, and either as processes.<br /> <br /> Consider for example a sample [[Java (programming language)|Java]] fragment to represent some common farm &quot;animals&quot; to a level of abstraction suitable to model simple aspects of their hunger and feeding. It defines an &lt;code&gt;Animal&lt;/code&gt; class to represent both the state of the animal and its functions:<br /> <br /> &lt;source lang=java&gt;<br /> public class Animal extends LivingThing<br /> {<br /> private Location loc;<br /> private double energyReserves;<br /> <br /> public boolean isHungry() {<br /> return energyReserves &lt; 2.5;<br /> }<br /> public void eat(Food food) {<br /> // Consume food<br /> energyReserves += food.getCalories();<br /> }<br /> public void moveTo(Location location) {<br /> // Move to new location<br /> this.loc = location;<br /> }<br /> }<br /> &lt;/source&gt;<br /> With the above definition, one could create objects of type &lt;tt&gt;Animal&lt;/tt&gt; and call their methods like this:<br /> <br /> &lt;source lang=java&gt;<br /> thePig = new Animal();<br /> theCow = new Animal();<br /> if (thePig.isHungry()) {<br /> thePig.eat(tableScraps);<br /> }<br /> if (theCow.isHungry()) {<br /> theCow.eat(grass);<br /> }<br /> theCow.moveTo(theBarn);<br /> &lt;/source&gt;<br /> In the above example, the class ''&lt;code&gt;Animal&lt;/code&gt;'' is an abstraction used in place of an actual animal, ''&lt;code&gt;LivingThing&lt;/code&gt;'' is a further abstraction (in this case a generalisation) of ''&lt;code&gt;Animal&lt;/code&gt;''.<br /> <br /> If one requires a more differentiated hierarchy of animals — to differentiate, say, those who provide milk from those who provide nothing except meat at the end of their lives — that is an intermediary level of abstraction, probably DairyAnimal (cows, goats) who would eat foods suitable to giving good milk, and MeatAnimal (pigs, steers) who would eat foods to give the best meat-quality.<br /> <br /> Such an abstraction could remove the need for the application coder to specify the type of food, so s/he could concentrate instead on the feeding schedule. The two classes could be related using [[Inheritance (computer science)|inheritance]] or stand alone, and the programmer could define varying degrees of [[polymorphism (computer science)|polymorphism]] between the two types. These facilities tend to vary drastically between languages, but in general each can achieve anything that is possible with any of the others. A great many operation overloads, data type by data type, can have the same effect at compile-time as any degree of inheritance or other means to achieve polymorphism. The class notation is simply a coder's convenience.<br /> <br /> ===Object-oriented design===<br /> {{Main|Object-oriented design}}<br /> <br /> Decisions regarding what to abstract and what to keep under the control of the coder become the major concern of object-oriented design and [[domain analysis]]&amp;mdash;actually determining the relevant relationships in the real world is the concern of [[object-oriented analysis]] or [[legacy analysis]].<br /> <br /> In general, to determine appropriate abstraction, one must make many small decisions about scope (domain analysis), determine what other systems one must cooperate with (legacy analysis), then perform a detailed object-oriented analysis which is expressed within project time and budget constraints as an object-oriented design. In our simple example, the domain is the barnyard, the live pigs and cows and their eating habits are the legacy constraints, the detailed analysis is that coders must have the flexibility to feed the animals what is available and thus there is no reason to code the type of food into the class itself, and the design is a single simple Animal class of which pigs and cows are instances with the same functions. A decision to differentiate DairyAnimal would change the detailed analysis but the domain and legacy analysis would be unchanged&amp;mdash;thus it is entirely under the control of the programmer, and we refer to abstraction in object-oriented programming as distinct from abstraction in domain or legacy analysis.<br /> <br /> ==Considerations==<br /> When discussing [[formal semantics of programming languages]], [[formal methods]] or [[abstract interpretation]], '''abstraction''' refers to the act of considering a less detailed, but safe, definition of the observed program behaviors. For instance, one may observe only the final result of program executions instead of considering all the intermediate steps of executions. Abstraction is defined to a '''concrete''' (more precise) model of execution.<br /> <br /> Abstraction may be '''exact''' or '''faithful''' with respect to a property if one can answer a question about the property equally well on the concrete or abstract model. For instance, if we wish to know what the result of the evaluation of a mathematical expression involving only integers +, -, ×, is worth [[modular arithmetic|modulo]] ''n'', we need only perform all operations modulo ''n'' (a familiar form of this abstraction is [[casting out nines]]).<br /> <br /> Abstractions, however, though not necessarily '''exact''', should be '''sound'''. That is, it should be possible to get sound answers from them&amp;mdash;even though the abstraction may simply yield a result of [[undecidable problem|undecidability]]. For instance, we may abstract the students in a class by their minimal and maximal ages; if one asks whether a certain person belongs to that class, one may simply compare that person's age with the minimal and maximal ages; if his age lies outside the range, one may safely answer that the person does not belong to the class; if it does not, one may only answer &quot;I don't know&quot;.<br /> <br /> The level of abstraction included in a programming language can influence its overall [[usability]]. The [[Cognitive dimensions]] framework includes the concept of ''abstraction gradient'' in a formalism. This framework allows the designer of a programming language to study the trade-offs between abstraction and other characteristics of the design, and how changes in abstraction influence the language usability.<br /> <br /> Abstractions can prove useful when dealing with computer programs, because non-trivial properties of computer programs are essentially [[undecidable problem|undecidable]] (see [[Rice's theorem]]). As a consequence, automatic methods for deriving information on the behavior of computer programs either have to drop termination (on some occasions, they may fail, crash or never yield out a result), soundness (they may provide false information), or precision (they may answer &quot;I don't know&quot; to some questions).<br /> <br /> Abstraction is the core concept of [[abstract interpretation]]. [[Model checking]] generally takes place on abstract versions of the studied systems.<br /> <br /> ==Levels of abstraction==<br /> {{Main|Abstraction layer}}<br /> <br /> Computer science commonly presents ''levels'' (or, less commonly, ''layers'') of abstraction, wherein each level represents a different model of the same information and processes, but uses a system of expression involving a unique set of objects and compositions that apply only to a particular domain.<br /> &lt;ref&gt;[[Luciano Floridi]], [http://www.philosophyofinformation.net/pdf/latmoa.pdf ''Levellism and the Method of Abstraction'']<br /> IEG – Research Report 22.11.04&lt;/ref&gt;<br /> Each relatively abstract, &quot;higher&quot; level builds on a relatively concrete, &quot;lower&quot; level, which tends to provide an increasingly &quot;granular&quot; representation. For example, gates build on electronic circuits, binary on gates, machine language on binary, programming language on machine language, applications and operating systems on programming languages. Each level is embodied, but not determined, by the level beneath it, making it a language of description that is somewhat self-contained.<br /> <br /> ===Database systems===<br /> {{Main|Database management system}}<br /> <br /> Since many users of database systems lack in-depth familiarity with computer data-structures, database developers often hide complexity through the following levels:<br /> <br /> [[Image:Data abstraction levels.png|thumb|Data abstraction levels of a database system]]<br /> <br /> '''Physical level:''' The lowest level of abstraction describes ''how'' a system actually stores data. The physical level describes complex low-level data structures in detail.<br /> <br /> '''Logical level:''' The next higher level of abstraction describes ''what'' data the database stores, and what relationships exist among those data. The logical level thus describes an entire database in terms of a small number of relatively simple structures. Although implementation of the simple structures at the logical level may involve complex physical level structures, the user of the logical level does not need to be aware of this complexity. This referred to as [[Physical Data Independence]]. [[Database administrator]]s, who must decide what information to keep in a database, use the logical level of abstraction.<br /> <br /> '''View level:''' The highest level of abstraction describes only part of the entire database. Even though the logical level uses simpler structures, complexity remains because of the variety of information stored in a large database. Many users of a database system do not need all this information; instead, they need to access only a part of the database. The view level of abstraction exists to simplify their interaction with the system. The system may provide many [[view (database)|view]]s for the same database.<br /> <br /> ===Layered architecture===<br /> The ability to provide a [[design]] of different levels of abstraction can<br /> <br /> * simplify the design considerably<br /> * enable different role players to effectively work at various levels of abstraction<br /> * support the portability of software artefacts (model-based ideally)<br /> <br /> [[Systems design]] and [[Business process modeling|business process design]] can both use this. Some [[Software modeling|design processes]] specifically generate designs that contain various levels of abstraction.<br /> <br /> Layered architecture partitions the concerns of the application into stacked groups (layers).<br /> It is a technique used in designing computer software, hardware, and communications in which system or network components are isolated in layers so that changes can be made in one layer without affecting the others.<br /> <br /> ==See also==<br /> * [[Abstraction principle (computer programming)]]<br /> * [[Abstraction inversion]] for an anti-pattern of one danger in abstraction<br /> * [[Abstract data type]] for an abstract description of a set of data<br /> * [[Algorithm]] for an abstract description of a computational procedure<br /> * [[Bracket abstraction]] for making a term into a function of a variable<br /> * [[Data modeling]] for structuring data independent of the processes that use it<br /> * [[Encapsulation (object-oriented programming)|Encapsulation]] for the categorical dual (other side) of abstraction<br /> * [[Greenspun's Tenth Rule]] for an aphorism about an (the?) optimum point in the space of abstractions<br /> * [[Higher-order function]] for abstraction where functions produce or consume other functions<br /> * [[Lambda abstraction]] for making a term into a function of some variable<br /> * [[Program refinement|Refinement]] for the opposite of abstraction in computing<br /> * [[Substitution (algebra)|Substitution]] for the categorical left adjoint (inverse) of abstraction.<br /> <br /> ==References==<br /> {{Reflist}}<br /> {{FOLDOC}}<br /> <br /> ==Further reading==<br /> {{refbegin}}<br /> * {{cite book|author1=Harold Abelson|author2=Gerald Jay Sussman|author3=Julie Sussman|title=Structure and Interpretation of Computer Programs|url=http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html|accessdate=22 June 2012|edition=2|date=25 July 1996|publisher=MIT Press|isbn=978-0-262-01153-2}}<br /> * {{cite book|author1=Lorenza Saitta|author2=Jean-Daniel Zucker|title=Abstraction in Artificial Intelligence and Complex Systems|url=http://link.springer.com/book/10.1007%2F978-1-4614-7052-6|edition=1|date=2013|publisher=Springer-Verlag|isbn=978-1-4614-7051-9}}<br /> * {{cite web|last=Spolsky|first=Joel|title=The Law of Leaky Abstractions|url=http://www.joelonsoftware.com/articles/LeakyAbstractions.html|work=Joel on Software|date=11 November 2002}}<br /> * [http://www.cs.cornell.edu/courses/cs211/2006sp/Lectures/L08-abstraction/08_abstraction.html Abstraction/information hiding] - CS211 course, Cornell University.<br /> * {{cite web|last=Gorodinski|first=Lev|title=Abstractions|url=http://gorodinski.com/blog/2012/05/31/abstractions/|date=31 May 2012}}<br /> {{refend}}<br /> <br /> ==External links==<br /> * [https://sites.google.com/site/simulationarchitecture/ SimArch] example of layered architecture for distributed simulation systems. <br /> <br /> {{Use dmy dates|date=June 2011}}<br /> <br /> {{DEFAULTSORT:Abstraction (computer science)}}<br /> [[Category:Data management]]<br /> [[Category:Programming paradigms]]<br /> [[Category:Articles with example Java code]]<br /> [[Category:Abstraction]]</div> Bluefist https://de.wikipedia.org/w/index.php?title=Join_(SQL)&diff=168791126 Join (SQL) 2012-08-14T02:38:08Z <p>Bluefist: Reverted edits by 137.166.4.42 (talk) to last revision by ClueBot NG (HG)</p> <hr /> <div>An [[SQL]] '''join''' clause combines [[Row (database)|records]] from two or more [[table (database)|tables]] in a [[database]]. It creates a set that can be saved as a table or used as is. A &lt;code&gt;JOIN&lt;/code&gt; is a means for combining [[Field (computer science)|fields]] from two tables by using values common to each. ANSI standard SQL specifies four types of &lt;code&gt;JOIN&lt;/code&gt;: &lt;code&gt;INNER&lt;/code&gt;, &lt;code&gt;OUTER&lt;/code&gt;, &lt;code&gt;LEFT&lt;/code&gt;, and &lt;code&gt;RIGHT&lt;/code&gt;. As a special case, a table (base table, [[View (database)|view]], or joined table) can &lt;code&gt;JOIN&lt;/code&gt; to itself in a ''self-join''.<br /> <br /> A programmer writes a &lt;code&gt;JOIN&lt;/code&gt; [[Branch predication|predicate]] to identify the records for joining. If the evaluated predicate is true, the combined record is then produced in the expected format, a record set or a temporary table.<br /> <br /> ==Sample tables==<br /> Relational databases are often [[Database normalization|normalized]] to eliminate duplication of information when objects may have one-to-many relationships. For example, a Department may be associated with many different Employees. Joining two tables effectively creates another table which combines information from both tables. This is at some expense in terms of the time it takes to compute the join. While it is also possible to simply maintain a [[Denormalization|denormalized]] table if speed is important, duplicate information may take extra space, and add the expense and complexity of maintaining data integrity if data which is duplicated later changes.<br /> <br /> All subsequent explanations on join types in this article make use of the following two tables. The rows in these tables serve to illustrate the effect of different types of joins and join-predicates. In the following tables the &lt;code&gt;DepartmentID&lt;/code&gt; [[Column (database)|column]] of the &lt;code&gt;Department&lt;/code&gt; table (which can be designated as &lt;code&gt;Department.DepartmentID&lt;/code&gt;) is the [[primary key]], while &lt;code&gt;Employee.DepartmentID&lt;/code&gt; is a [[foreign key]].<br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center; float:left; margin-right:5px&quot;<br /> |+Employee table<br /> |-<br /> ! LastName !! DepartmentID<br /> |-<br /> | Rafferty ||31<br /> |-<br /> | Jones || 33<br /> |-<br /> | Steinberg || 33<br /> |-<br /> | Robinson || 34<br /> |-<br /> | Smith|| 34<br /> |-<br /> | John || {{null result}}<br /> |}<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center; float:left; margin-left:5px&quot;<br /> |+Department table<br /> |-<br /> ! DepartmentID !! DepartmentName<br /> |-<br /> | 31 || Sales<br /> |-<br /> | 33 || Engineering<br /> |-<br /> | 34 || Clerical<br /> |-<br /> | 35 || Marketing<br /> |}<br /> <br /> &lt;br clear=&quot;all&quot; /&gt;<br /> <br /> Note: In the Employee table above, the employee &quot;John&quot; has not been assigned to any department yet. Also, note that no employees are assigned to the &quot;Marketing&quot; department.<br /> <br /> This is the SQL to create the aforementioned tables.<br /> &lt;source lang=sql&gt;<br /> CREATE TABLE department<br /> (<br /> DepartmentID INT,<br /> DepartmentName VARCHAR(20)<br /> );<br /> <br /> CREATE TABLE employee<br /> (<br /> LastName VARCHAR(20),<br /> DepartmentID INT<br /> );<br /> <br /> INSERT INTO department(DepartmentID, DepartmentName) VALUES(31, 'Sales');<br /> INSERT INTO department(DepartmentID, DepartmentName) VALUES(33, 'Engineering');<br /> INSERT INTO department(DepartmentID, DepartmentName) VALUES(34, 'Clerical');<br /> INSERT INTO department(DepartmentID, DepartmentName) VALUES(35, 'Marketing');<br /> <br /> INSERT INTO employee(LastName, DepartmentID) VALUES('Rafferty', 31);<br /> INSERT INTO employee(LastName, DepartmentID) VALUES('Jones', 33);<br /> INSERT INTO employee(LastName, DepartmentID) VALUES('Steinberg', 33);<br /> INSERT INTO employee(LastName, DepartmentID) VALUES('Robinson', 34);<br /> INSERT INTO employee(LastName, DepartmentID) VALUES('Smith', 34);<br /> INSERT INTO employee(LastName, DepartmentID) VALUES('John', NULL);<br /> &lt;/source&gt;<br /> <br /> ==Inner join==<br /> An '''inner join''' is the most common join operation used in [[Application software|applications]] and can be regarded as the default join-type. Inner join creates a new result table by combining column values of two tables (A and B) based upon the join-predicate. The query compares each row of A with each row of B to find all pairs of rows which satisfy the join-predicate. When the join-predicate is satisfied, column values for each matched pair of rows of A and B are combined into a result row. The result of the join can be defined as the outcome of first taking the [[Cartesian product]] (or [[#Cross join|Cross join]]) of all records in the tables (combining every record in table A with every record in table B)—then return all records which satisfy the join predicate. Actual SQL implementations normally use other approaches like a [[hash join]] or a [[sort-merge join]] where possible, since computing the Cartesian product is very inefficient.<br /> <br /> SQL specifies two different syntactical ways to express joins: &quot;explicit join notation&quot; and &quot;implicit join notation&quot;.<br /> <br /> The &quot;explicit join notation&quot; uses the '''&lt;code&gt;JOIN&lt;/code&gt;''' keyword to specify the table to join, and the '''&lt;code&gt;ON&lt;/code&gt;''' keyword to specify the predicates for the join, as in the following example:<br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee<br /> INNER JOIN department ON employee.DepartmentID = department.DepartmentID;<br /> &lt;/source&gt;<br /> <br /> The &quot;implicit join notation&quot; simply lists the tables for joining, in the &lt;code&gt;FROM&lt;/code&gt; clause of the &lt;code&gt;SELECT&lt;/code&gt; statement, using commas to separate them. Thus it specifies a [[#Cross join|cross join]], and the &lt;code&gt;WHERE&lt;/code&gt; clause may apply additional filter-predicates (which function comparably to the join-predicates in the explicit notation).<br /> <br /> The following example is equivalent to the previous one, but this time using implicit join notation:<br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee, department<br /> WHERE employee.DepartmentID = department.DepartmentID;<br /> &lt;/source&gt;<br /> <br /> The queries given in the examples above will join the Employee and Department tables using the DepartmentID column of both tables. Where the DepartmentID of these tables match (i.e. the join-predicate is satisfied), the query will combine the ''LastName'', ''DepartmentID'' and ''DepartmentName'' columns from the two tables into a result row. Where the DepartmentID does not match, no result row is generated.<br /> <br /> Thus the result of the [[Query plan|execution]] of either of the two queries above will be:<br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center&quot;<br /> |-<br /> ! Employee.LastName !! Employee.DepartmentID !! Department.DepartmentName !! Department.DepartmentID<br /> |-<br /> | Robinson || 34 || Clerical || 34<br /> |-<br /> | Jones || 33 || Engineering || 33<br /> |-<br /> | Smith || 34 || Clerical || 34<br /> |-<br /> | Steinberg || 33 || Engineering || 33<br /> |-<br /> | Rafferty || 31 || Sales || 31<br /> |-<br /> |}<br /> <br /> '''Note:''' Programmers should take special care when joining tables on columns that can contain [[Null (SQL)|NULL]] values, since NULL will never match any other value (not even NULL itself), unless the join condition explicitly uses the &lt;code&gt;IS NULL&lt;/code&gt; or &lt;code&gt;IS NOT NULL&lt;/code&gt; predicates.<br /> <br /> Notice that the employee &quot;John&quot; and the department &quot;Marketing&quot; do not appear in the query execution results. Neither of these has any matching records in the other respective table: &quot;John&quot; has no associated department, and no employee has the department ID 35 (&quot;Marketing&quot;). Depending on the desired results, this behavior may be a subtle bug, which can be avoided with an [[#Outer joins|outer join]].<br /> <br /> One can further classify inner joins as equi-joins, as natural joins, or as cross-joins.<br /> <br /> ===Equi-join===<br /> An '''equi-join''' is a specific type of comparator-based join, or ''theta join'', that uses only [[equality (mathematics)|equality]] comparisons in the join-predicate. Using other comparison operators (such as &lt;code&gt;&amp;lt;&lt;/code&gt;) disqualifies a join as an equi-join. The query shown above has already provided an example of an equi-join:<br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee<br /> JOIN department ON employee.DepartmentID = department.DepartmentID;<br /> &lt;/source&gt;<br /> <br /> We can write equi-join as below,<br /> <br /> &lt;source lang=sql&gt;<br /> SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID;<br /> &lt;/source&gt;<br /> <br /> If columns in an equijoin have the same name, [[SQL/92]] provides an optional shorthand notation for expressing equi-joins, by way of the &lt;code&gt;USING&lt;/code&gt; construct&lt;ref&gt;[http://www.java2s.com/Tutorial/Oracle/0140__Table-Joins/SimplifyingJoinswiththeUSINGKeyword.htm Simplifying Joins with the USING Keyword]&lt;/ref&gt;:<br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee<br /> INNER JOIN department USING (DepartmentID);<br /> &lt;/source&gt;<br /> <br /> The &lt;code&gt;USING&lt;/code&gt; construct is more than mere [[syntactic sugar]], however, since the result set differs from the result set of the version with the explicit predicate. Specifically, any columns mentioned in the &lt;code&gt;USING&lt;/code&gt; list will appear only once, with an unqualified name, rather than once for each table in the join. In the above case, there will be a single &lt;code&gt;DepartmentID&lt;/code&gt; column and no &lt;code&gt;employee.DepartmentID&lt;/code&gt; or &lt;code&gt;department.DepartmentID&lt;/code&gt;.<br /> <br /> The &lt;code&gt;USING&lt;/code&gt; clause is not supported by SQL Server and Sybase.<br /> <br /> ====Natural join====<br /> A [[natural join]] is a type of equi-join where the join predicate arises implicitly by comparing all columns in both tables that have the same column-names in the joined tables. The resulting joined table contains only one column for each pair of equally named columns.<br /> <br /> Most experts agree that NATURAL JOINs are dangerous and therefore strongly discourage their use.&lt;ref&gt;[http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:13430766143199 Ask Tom &quot;Oracle support of ANSI joins.&quot;] [http://awads.net/wp/2006/03/20/back-to-basics-inner-joins/#comment-2837 Back to basics: inner joins » Eddie Awad's Blog]&lt;/ref&gt; The danger comes from inadvertently adding a new column, named the same as another column in the other table. An existing natural join might then &quot;naturally&quot; use the new column for comparisons, making comparisons/matches using different criteria (from different columns) than before. Thus an existing query could produce different results, even though the data in the tables have not been changed, but only augmented.<br /> <br /> The above sample query for inner joins can be expressed as a natural join in the following way:<br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee<br /> NATURAL JOIN department;<br /> &lt;/source&gt;<br /> <br /> As with the explicit &lt;code&gt;USING&lt;/code&gt; clause, only one DepartmentID column occurs in the joined table, with no qualifier:<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center&quot;<br /> |-<br /> ! DepartmentID !! Employee.LastName !! Department.DepartmentName<br /> |-<br /> | 34 || Smith || Clerical<br /> |-<br /> | 33 || Jones || Engineering<br /> |-<br /> | 34 || Robinson || Clerical<br /> |-<br /> | 33 || Steinberg || Engineering<br /> |-<br /> | 31 || Rafferty || Sales<br /> |}<br /> <br /> PostgreSQL, MySQL and Oracle support natural joins, but not Microsoft T-SQL or IBM DB2. The columns used in the join are implicit so the join code does not show which columns are expected, and a change in column names may change the results. An INNER JOIN performed on 2 tables having the same field name has the same effect.&lt;ref&gt;[http://database.blogs.webucator.com/2010/03/31/why-sql-server-doesnt-support-natural-join-syntax/ Why SQL Server Doesn’t Support Natural Join Syntax]&lt;/ref&gt;<br /> <br /> ====Cross join====<br /> CROSS JOIN returns the [[Cartesian product]] of rows from tables in the join. In other words, it will produce rows which combine each row from the first table with each row from the second table.&lt;ref&gt;[http://www.sqlguides.com/sql_cross_join.php SQL CROSS JOIN]&lt;/ref&gt;<br /> <br /> Example of an explicit cross join:<br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee<br /> CROSS JOIN department;<br /> &lt;/source&gt;<br /> <br /> Example of an implicit cross join:<br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee, department;<br /> &lt;/source&gt;<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center&quot;<br /> |-<br /> ! Employee.LastName !! Employee.DepartmentID !! Department.DepartmentName !! Department.DepartmentID<br /> |-<br /> | Rafferty || 31 || Sales || 31<br /> |-<br /> | Jones || 33 || Sales || 31<br /> |-<br /> | Steinberg || 33 || Sales || 31<br /> |-<br /> | Smith || 34 || Sales || 31<br /> |-<br /> | Robinson || 34 || Sales || 31<br /> |-<br /> | John || {{null result}} || Sales || 31<br /> |-<br /> | Rafferty || 31 || Engineering || 33<br /> |-<br /> | Jones || 33 || Engineering || 33<br /> |-<br /> | Steinberg || 33 || Engineering || 33<br /> |-<br /> | Smith || 34 || Engineering || 33<br /> |-<br /> | Robinson || 34 || Engineering || 33<br /> |-<br /> | John || {{null result}} || Engineering || 33<br /> |-<br /> | Rafferty || 31 || Clerical || 34<br /> |-<br /> | Jones || 33 || Clerical || 34<br /> |-<br /> | Steinberg || 33 || Clerical || 34<br /> |-<br /> | Smith || 34 || Clerical || 34<br /> |-<br /> | Robinson || 34 || Clerical || 34<br /> |-<br /> | John || {{null result}} || Clerical || 34<br /> |-<br /> | Rafferty || 31 || Marketing || 35<br /> |-<br /> | Jones || 33 || Marketing || 35<br /> |-<br /> | Steinberg || 33 || Marketing || 35<br /> |-<br /> | Smith || 34 || Marketing || 35<br /> |-<br /> | Robinson || 34 || Marketing || 35<br /> |-<br /> | John || {{null result}} || Marketing || 35<br /> |}<br /> <br /> The cross join does not apply any predicate to filter records from the joined table. Programmers can further filter the results of a cross join by using a &lt;code&gt;WHERE&lt;/code&gt; clause.<br /> <br /> ==Outer joins==<br /> An '''outer join''' does not require each record in the two joined tables to have a matching record. The joined table retains each record—even if no other matching record exists. Outer joins subdivide further into left outer joins, right outer joins, and full outer joins, depending on which table's rows are retained (left, right, or both).<br /> <br /> (In this case ''left'' and ''right'' refer to the two sides of the &lt;code&gt;JOIN&lt;/code&gt; keyword.)<br /> <br /> No implicit join-notation for outer joins exists in standard SQL.<br /> <br /> ===Left outer join===<br /> The result of a ''left outer join'' (or simply '''left join''') for table A and B always contains all records of the &quot;left&quot; table (A), even if the join-condition does not find any matching record in the &quot;right&quot; table (B). This means that if the &lt;code&gt;ON&lt;/code&gt; clause matches 0 (zero) records in B (for a given record in A), the join will still return a row in the result (for that record)—but with NULL in each column from B. A '''left outer join''' returns all the values from an inner join plus all values in the left table that do not match to the right table. From Oracle 9i onwards the LEFT OUTER JOIN statement can be used as well as Oracle's older (+) syntax.&lt;ref&gt;{{cite web |last=Oracle Left Outer Join |title=Oracle Left Outer Join |url=http://www.dba-oracle.com/tips_oracle_left_outer_join.htm |work=Oracle Tips |publisher=Burleson Consulting |accessdate=15 July 2011 }}&lt;/ref&gt;<br /> <br /> For example, this allows us to find an employee's department, but still shows the employee(s) even when they have not been assigned to a department (contrary to the inner-join example above, where unassigned employees were excluded from the result).<br /> <br /> Example of a left outer join, with the additional result row (compared with the inner join) italicized:<br /> <br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee<br /> LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;<br /> &lt;/source&gt;<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center&quot;<br /> ! Employee.LastName !! Employee.DepartmentID !! Department.DepartmentName !! Department.DepartmentID<br /> |-<br /> | Jones || 33 || Engineering || 33<br /> |-<br /> | Rafferty || 31 || Sales || 31<br /> |-<br /> | Robinson || 34 || Clerical || 34<br /> |-<br /> | Smith || 34 || Clerical || 34<br /> |-<br /> | ''John'' || {{null result}} || {{null result}} || {{null result}}<br /> |-<br /> | Steinberg || 33 || Engineering || 33<br /> |}<br /> <br /> Oracle supports the alternate syntax:<br /> &lt;source lang=sql&gt;<br /> SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID(+)<br /> &lt;/source&gt;<br /> Sybase supports the alternate syntax:<br /> &lt;source lang=sql&gt;<br /> SELECT * FROM employee, department WHERE employee.DepartmentID *= department.DepartmentID<br /> &lt;/source&gt;<br /> <br /> ===Right outer join===<br /> A '''right outer join''' (or '''right join''') closely resembles a left outer join, except with the treatment of the tables reversed. Every row from the &quot;right&quot; table (B) will appear in the joined table at least once. If no matching row from the &quot;left&quot; table (A) exists, NULL will appear in columns from A for those records that have no match in B.<br /> <br /> A right outer join returns all the values from the right table and matched values from the left table (NULL in case of no matching join predicate). For example, this allows us to find each employee and his or her department, but still show departments that have no employees.<br /> <br /> Below is an example of a right outer join, with the additional result row italicized:<br /> <br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee<br /> RIGHT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;<br /> &lt;/source&gt;<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center&quot;<br /> ! Employee.LastName !! Employee.DepartmentID !! Department.DepartmentName !! Department.DepartmentID<br /> |-<br /> | Smith || 34 || Clerical || 34<br /> |-<br /> | Jones || 33 || Engineering || 33<br /> |-<br /> | Robinson || 34 || Clerical || 34<br /> |-<br /> | Steinberg || 33 || Engineering || 33<br /> |-<br /> | Rafferty || 31 || Sales || 31<br /> |-<br /> | {{null result}} || {{null result}} || ''Marketing'' || ''35''<br /> |}<br /> <br /> Oracle supports the alternate syntax:<br /> &lt;source lang=sql&gt;<br /> SELECT * FROM employee, department WHERE employee.DepartmentID(+) = department.DepartmentID<br /> &lt;/source&gt;<br /> <br /> Right and left outer joins are functionally equivalent. Neither provides any functionality that the other does not, so right and left outer joins may replace each other as long as the table order is switched.<br /> <br /> ===Full outer join===<br /> Conceptually, a '''full outer join''' combines the effect of applying both left and right outer joins. Where records in the FULL OUTER JOINed tables do not match, the result set will have NULL values for every column of the table that lacks a matching row. For those records that do match, a single row will be produced in the result set (containing fields populated from both tables).<br /> <br /> For example, this allows us to see each employee who is in a department and each department that has an employee, but also see each employee who is not part of a department and each department which doesn't have an employee.<br /> <br /> Example full outer join:<br /> <br /> &lt;source lang=sql&gt;<br /> SELECT *<br /> FROM employee<br /> FULL OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;<br /> &lt;/source&gt;<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center&quot;<br /> ! Employee.LastName !! Employee.DepartmentID !! Department.DepartmentName !! Department.DepartmentID<br /> |-<br /> | Smith || 34 || Clerical || 34<br /> |-<br /> | Jones || 33 || Engineering || 33<br /> |-<br /> | Robinson || 34 || Clerical || 34<br /> |-<br /> | ''John'' || {{null result}} || {{null result}} || {{null result}}<br /> |-<br /> | Steinberg || 33 || Engineering || 33<br /> |-<br /> | Rafferty || 31 || Sales || 31<br /> |-<br /> | {{null result}} || {{null result}} || ''Marketing'' || ''35''<br /> |}<br /> <br /> Some database systems do not support the full outer join functionality directly, but they can emulate it through the use of an inner join and UNION ALL selects of the &quot;single table rows&quot; from left and right tables respectively. The same example can appear as follows:<br /> &lt;source lang=sql&gt;<br /> SELECT employee.LastName, employee.DepartmentID, department.DepartmentName, department.DepartmentID<br /> FROM employee<br /> INNER JOIN department ON employee.DepartmentID = department.DepartmentID<br /> <br /> UNION ALL<br /> <br /> SELECT employee.LastName, employee.DepartmentID, cast(NULL as varchar(20)), cast(NULL as integer)<br /> FROM employee<br /> WHERE NOT EXISTS (SELECT * FROM department WHERE employee.DepartmentID = department.DepartmentID)<br /> <br /> UNION ALL<br /> <br /> SELECT cast(NULL as varchar(20)), cast(NULL as integer),<br /> department.DepartmentName, department.DepartmentID<br /> FROM department<br /> WHERE NOT EXISTS (SELECT * FROM employee WHERE employee.DepartmentID = department.DepartmentID)<br /> &lt;/source&gt;<br /> <br /> ==Self-join==<br /> A self-join is joining a table to itself.&lt;ref&gt;{{Harvnb|Shah|2005|p=165}}&lt;/ref&gt;<br /> <br /> ===Example===<br /> A query to find all pairings of two employees in the same country is desired. If there were two separate tables for employees and a query which requested employees in the first table having the same country as employees in the second table, a normal join operation could be used to find the answer table. However, all the employee information is contained within a single large table.&lt;ref&gt;Adapted from {{harvnb|Pratt|2005|pp=115–6}}&lt;/ref&gt;<br /> <br /> Consider a modified &lt;code&gt;Employee&lt;/code&gt; table such as the following:<br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center; float:left; margin-right:5px&quot;<br /> |+Employee Table<br /> |-<br /> ! EmployeeID !! LastName !! Country !! DepartmentID<br /> |-<br /> | 123 || Rafferty || Australia || 31<br /> |-<br /> | 124 || Jones || Australia || 33<br /> |-<br /> | 145 || Steinberg || Australia || 33<br /> |-<br /> | 201 || Robinson || United States || 34<br /> |-<br /> | 305 || Smith || Germany || 34<br /> |-<br /> | 306 || John || Germany || {{null result}}<br /> |}<br /> &lt;br clear=&quot;all&quot; /&gt;<br /> <br /> An example solution query could be as follows:<br /> <br /> &lt;source lang=sql&gt;<br /> SELECT F.EmployeeID, F.LastName, S.EmployeeID, S.LastName, F.Country<br /> FROM Employee F<br /> INNER JOIN Employee S ON F.Country = S.Country<br /> WHERE F.EmployeeID &lt; S.EmployeeID<br /> ORDER BY F.EmployeeID, S.EmployeeID;<br /> &lt;/source&gt;<br /> <br /> Which results in the following table being generated.<br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center; float:left; margin-right:5px&quot;<br /> |+Employee Table after Self-join by Country<br /> |-<br /> ! EmployeeID !! LastName !! EmployeeID !! LastName !! Country<br /> |-<br /> | 123 || Rafferty || 124 || Jones || Australia<br /> |-<br /> | 123 || Rafferty || 145 || Steinberg || Australia<br /> |-<br /> | 124 || Jones || 145 || Steinberg || Australia<br /> |-<br /> | 305 || Smith || 306 || John || Germany<br /> |}<br /> &lt;br clear=&quot;all&quot; /&gt;<br /> For this example:<br /> * &lt;code&gt;F&lt;/code&gt; and &lt;code&gt;S&lt;/code&gt; are [[alias (SQL)|aliases]] for the first and second copies of the employee table.<br /> * The condition &lt;code&gt;F.Country = S.Country&lt;/code&gt; excludes pairings between employees in different countries. The example question only wanted pairs of employees in the same country.<br /> * The condition &lt;code&gt;F.EmployeeID &lt; S.EmployeeID&lt;/code&gt; excludes pairings where the &lt;code&gt;EmployeeID&lt;/code&gt; of the first employee is greater than or equal to the &lt;code&gt;EmployeeID&lt;/code&gt; of the second employee. In other words, the effect of this condition is to exclude duplicate pairings and self-pairings. Without it, the following less useful table would be generated (the table below displays only the &quot;Germany&quot; portion of the result):<br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center; float:left; margin-right:5px&quot;<br /> ! EmployeeID !! LastName !! EmployeeID !! LastName !! Country<br /> |-<br /> | 305 || Smith || 305 || Smith || Germany<br /> |-<br /> | 305 || Smith || 306 || John || Germany<br /> |-<br /> | 306 || John || 305 || Smith || Germany<br /> |-<br /> | 306 || John || 306 || John || Germany<br /> |}<br /> &lt;br clear=&quot;all&quot; /&gt;<br /> Only one of the two middle pairings is needed to satisfy the original question, and the topmost and bottommost are of no interest at all in this example.<br /> <br /> ==Merge rows==<br /> To be able to do a select so as to merge multiple rows into 1 row : &quot;group_concat notation&quot;.<br /> <br /> [[MySQL]] and [[CUBRID]] use the &lt;code&gt;group_concat&lt;/code&gt; keyword to achieve that goal, and [[PostgreSQL]] 9.0 has the &lt;code&gt;string_agg&lt;/code&gt; function. Versions before 9.0 required the use of something like<br /> array_to_string(array_agg(value),', ')<br /> or the creation of an aggregate function.<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center; float:left; margin-right:5px&quot;<br /> |+Using the Employee Table:<br /> |-<br /> ! LastName !! DepartmentID<br /> |-<br /> | Rafferty ||31<br /> |-<br /> | Jones || 33<br /> |-<br /> | Steinberg || 33<br /> |-<br /> | Robinson || 34<br /> |-<br /> | Smith|| 34<br /> |-<br /> | John || {{null result}}<br /> |}<br /> <br /> {| class=&quot;wikitable&quot; style=&quot;text-align:center; float:left; margin-left:5px&quot;<br /> |+ to achieve the following results Table<br /> |-<br /> ! DepartmentID !! LastNames<br /> |-<br /> | {{null result}} || John<br /> |-<br /> | 31 || Rafferty<br /> |-<br /> | 33 || Jones, Steinberg<br /> |-<br /> | 34 || Robinson, Smith<br /> |}<br /> <br /> &lt;br clear=&quot;all&quot; /&gt;<br /> <br /> ===MySQL===<br /> &lt;source lang=sql&gt;<br /> SELECT DepartmentID, group_concat(LastName) as LastNames<br /> FROM employee<br /> GROUP BY DepartmentID;<br /> &lt;/source&gt;<br /> <br /> ===Oracle 11g R2===<br /> &lt;source lang=sql&gt;<br /> SELECT DepartmentID,<br /> listagg(LastName, ', ') WITHIN GROUP (ORDER BY LastName) as LastNames<br /> FROM employee<br /> GROUP BY DepartmentID;<br /> &lt;/source&gt;<br /> <br /> ===CUBRID===<br /> &lt;source lang=sql&gt;<br /> SELECT DepartmentID, GROUP_CONCAT(LastName ORDER BY LastName SEPARATOR ',') as LastNames<br /> FROM employee<br /> GROUP BY DepartmentID;<br /> &lt;/source&gt;<br /> <br /> ===PostgreSQL===<br /> {{Off-topic|date=May 2012}}<br /> First the function _group_concat and aggregate group_concat need to be created before that query can be possible.<br /> &lt;source lang=sql&gt;<br /> CREATE OR REPLACE FUNCTION _group_concat(text, text)<br /> RETURNS text AS $$<br /> SELECT CASE<br /> WHEN $2 IS NULL THEN $1<br /> WHEN $1 IS NULL THEN $2<br /> ELSE $1 operator(pg_catalog.||) ', ' operator(pg_catalog.||) $2<br /> END<br /> $$ IMMUTABLE LANGUAGE SQL;<br /> <br /> error// Join SQL<br /> CREATE AGGREGATE group_concat (<br /> BASETYPE = text,<br /> SFUNC = _group_concat,<br /> STYPE = text<br /> );<br /> <br /> SELECT DepartmentID, group_concat(LastName) as LastNames<br /> FROM employee<br /> GROUP BY DepartmentID;<br /> &lt;/source&gt;<br /> <br /> As for version 9.0:<br /> &lt;source lang=sql&gt;<br /> SELECT DepartmentID, string_agg(LastName, ', ') as LastNames<br /> FROM employee<br /> GROUP BY DepartmentID;<br /> &lt;/source&gt;<br /> <br /> ===Microsoft T-SQL===<br /> {{Off-topic|date=May 2012}}<br /> For versions prior to Microsoft SQL Server 2005, the function group_concat must be created as a user-defined aggregate function before that query can be possible, shown here in C#.<br /> &lt;source lang=csharp&gt;<br /> using System;<br /> using System.Collections.Generic;<br /> using System.Data.SqlTypes;<br /> using System.IO;<br /> using Microsoft.SqlServer.Server;<br /> <br /> [Serializable]<br /> [SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize=8000)]<br /> public struct group_concat : IBinarySerialize{<br /> private List values;<br /> <br /> public void Init() {<br /> this.values = new List();<br /> }<br /> <br /> public void Accumulate(SqlString value) {<br /> this.values.Add(value.Value);<br /> }<br /> <br /> public void Merge(strconcat value) {<br /> this.values.AddRange(value.values.ToArray());<br /> }<br /> <br /> public SqlString Terminate() {<br /> return new SqlString(string.Join(&quot;, &quot;, this.values.ToArray()));<br /> }<br /> <br /> public void Read(BinaryReader r) {<br /> int itemCount = r.ReadInt32();<br /> this.values = new List(itemCount);<br /> for (int i = 0; i &lt; itemCount; i++) {<br /> this.values.Add(r.ReadString());<br /> }<br /> }<br /> <br /> public void Write(BinaryWriter w) {<br /> w.Write(this.values.Count);<br /> foreach (string s in this.values) {<br /> w.Write(s);<br /> }<br /> }<br /> }<br /> &lt;/source&gt;<br /> Then you can use the following query:<br /> &lt;source lang=sql&gt;<br /> SELECT DepartmentID, dbo.group_concat(LastName) as LastNames<br /> FROM employee<br /> GROUP BY DepartmentID;<br /> &lt;/source&gt;<br /> <br /> From version 2005, one can accomplish this task using FOR XML PATH:<br /> <br /> &lt;source lang=sql&gt;<br /> SELECT DepartmentID,<br /> STUFF(<br /> (SELECT<br /> ',' + LastName<br /> FROM (<br /> SELECT LastName<br /> FROM employee e2<br /> WHERE e1.DepartmentID=e2.DepartmentID OR<br /> (e1.DepartmentID IS NULL AND e2.DepartmentID IS NULL)<br /> ) t1<br /> ORDER BY LastName<br /> FOR XML PATH('')<br /> )<br /> ,1,1, ''<br /> ) AS LastNames<br /> FROM employee e1<br /> GROUP BY DepartmentID<br /> &lt;/source&gt;<br /> &lt;br clear=&quot;all&quot; /&gt;<br /> <br /> ==Alternatives==<br /> The effect of an outer join can also be obtained using a UNION ALL between an INNER JOIN and a SELECT of the rows in the &quot;main&quot; table that do not fulfill the join condition. For example<br /> <br /> &lt;source lang=sql&gt;<br /> SELECT employee.LastName, employee.DepartmentID, department.DepartmentName<br /> FROM employee<br /> LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;<br /> &lt;/source&gt;<br /> <br /> can also be written as<br /> <br /> &lt;source lang=sql&gt;<br /> SELECT employee.LastName, employee.DepartmentID, department.DepartmentName<br /> FROM employee<br /> INNER JOIN department ON employee.DepartmentID = department.DepartmentID<br /> <br /> UNION ALL<br /> <br /> SELECT employee.LastName, employee.DepartmentID, cast(NULL as varchar(20))<br /> FROM employee<br /> WHERE NOT EXISTS (SELECT * FROM department WHERE employee.DepartmentID = department.DepartmentID)<br /> &lt;/source&gt;<br /> <br /> ==Implementation==<br /> Much work in database-systems has aimed at efficient implementation of joins, because relational systems commonly call for joins, yet face difficulties in optimising their efficient execution. The problem arises because inner joins operate both [[commutative]]ly and [[associative]]ly. In practice, this means that the user merely supplies the list of tables for joining and the join conditions to use, and the database system has the task of determining the most efficient way to perform the operation. A [[query optimizer]] determines how to execute a query containing joins. A query optimizer has two basic freedoms:<br /> <br /> # '''Join order''': Because it joins functions commutatively and associatively, the order in which the system joins tables does not change the final result-set of the query. However, join-order '''could''' have an enormous impact on the cost of the join operation, so choosing the best join order becomes very important.<br /> # '''Join method''': Given two tables and a join condition, multiple [[algorithm]]s can produce the result-set of the join. Which algorithm runs most efficiently depends on the sizes of the input tables, the number of rows from each table that match the join condition, and the operations required by the rest of the query.<br /> <br /> Many join-algorithms treat their inputs differently. One can refer to the inputs to a join as the &quot;outer&quot; and &quot;inner&quot; join operands, or &quot;left&quot; and &quot;right&quot;, respectively. In the case of nested loops, for example, the database system will scan the entire inner relation for each row of the outer relation.<br /> <br /> One can classify query-plans involving joins as follows:&lt;ref name=Yu1998&gt;{{Harvnb|Yu|Meng|1998|p=213}}<br /> &lt;/ref&gt;<br /> <br /> ; left-deep : using a base table (rather than another join) as the inner operand of each join in the plan<br /> ; right-deep : using a base table as the outer operand of each join in the plan<br /> ; bushy : neither left-deep nor right-deep; both inputs to a join may themselves result from joins<br /> <br /> These names derive from the appearance of the [[query plan]] if drawn as a [[Tree data structure|tree]], with the outer join relation on the left and the inner relation on the right (as convention dictates).<br /> <br /> ===Join algorithms===<br /> Three fundamental algorithms for performing a join operation are known: [[Nested loop join]], [[Sort-merge join]] and [[Hash join]].<br /> <br /> ===Join Indexes===<br /> Join indexes are [[database index]]es that facilitate the processing of join queries in [[data warehouse]]s: they are currently (2012) available in implementations by [[Oracle]]&lt;ref&gt;Oracle Bitmap Join Index. URL: http://www.dba-oracle.com/art_builder_bitmap_join_idx.htm&lt;/ref&gt; and [[Teradata]].&lt;ref&gt;Teradata Join Indexes. http://www.coffingdw.com/sql/tdsqlutp/join_index.htm&lt;/ref&gt;<br /> <br /> In the Teradata implementation, specified columns, aggregate functions on columns, or components of date columns from one or more tables are specified using a syntax similar to the definition of a [[database view]]: up to 64 columns/column expressions can be specified in a single join index. Optionally, a column that defines the [[primary key]] of the composite data may also be specified: on parallel hardware, the column values are used to partition the index's contents across multiple disks. When the source tables are updated interactively by users, the contents of the join index are automatically updated. Any query whose [[Where (SQL)|WHERE clause]] specifies any combination of columns or column expressions that are an exact subset of those defined in a join index (a so-called &quot;covering query&quot; will cause the join index, rather than the original tables and their indexes, to be consulted during query execution.<br /> <br /> The Oracle implementation limits itself to using [[bitmap index]]es. A ''bitmap join index'' is used for low-cardinality columns (i.e., columns containing less than 300 distinct values, according to the Oracle documentation): it combines low-cardinality columns from multiple related tables. The example Oracle uses is that of an inventory system, where different suppliers provide different parts. The schema has three linked tables: two &quot;master tables&quot;, Part and Supplier, and a &quot;detail table&quot;, Inventory. The last is a many-to-many table linking Supplier to Part, and contains the most rows. Every part has a Part Type, and every supplier is based in the USA, and has a State column. There are not more than 60 states+territories in the USA, and not more than 300 Part Types. The bitmap join index is defined using a standard three-table join on the above three tables, and specifying the Part_Type and Supplier_State columns for the index. However, it is defined on the Inventory table, even though the columns Part_Type and Supplier_State are &quot;borrowed&quot; from Supplier and Part respectively.<br /> <br /> As for Teradata, an Oracle bitmap join index is only utilized to answer a query when the query's [[Where (SQL)|WHERE clause]] specifies columns limited to those that are included in the join index.<br /> <br /> ==See also==<br /> * [[Join (relational algebra)]]<br /> <br /> ==Notes==<br /> {{reflist|2}}<br /> <br /> ==References==<br /> {{More footnotes|date=April 2009}}<br /> * {{citation<br /> |last= Pratt<br /> |first= Phillip J<br /> |title= A Guide To SQL, Seventh Edition<br /> |publisher= Thomson Course Technology<br /> |year= 2005<br /> |isbn= 978-0-619-21674-0<br /> }}<br /> * {{citation<br /> |last=Shah<br /> |first= Nilesh<br /> |title= Database Systems Using Oracle - A Simplified Guide to SQL and PL/SQL Second Edition<br /> |edition= International<br /> |publisher= Pearson Education International<br /> |origyear= 2002<br /> |year= 2005<br /> |isbn= 0-13-191180-5<br /> }}<br /> * {{citation<br /> |url= http://books.google.com/?id=aBHRDhrrehYC<br /> |accessdate= 2009-03-03<br /> |title= Principles of Database Query Processing for Advanced Applications<br /> |last = Yu<br /> |first= Clement T.<br /> |last2= Meng<br /> |first2= Weiyi<br /> |year= 1998<br /> |publisher= Morgan Kaufmann<br /> |isbn= 978-1-55860-434-6<br /> }}<br /> <br /> ==External links==<br /> * Specific to products<br /> ** [http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug138.htm Sybase ASE 15 Joins]<br /> ** [http://dev.mysql.com/doc/refman/5.5/en/join.html MySQL 5.5 Joins]<br /> ** [http://www.postgresqlguide.com/retrieving-data-from-multiple-tables-by-using-sql-join.aspx PostgreSQL Join with Query Explain]<br /> ** [http://www.postgresql.org/docs/8.3/static/tutorial-join.html PostgreSQL 8.3 Joins]<br /> ** [http://msdn2.microsoft.com/en-us/library/ms191517.aspx Joins in Microsoft SQL Server]<br /> ** [http://maxdb.sap.com/currentdoc/45/f31c38e95511d5995d00508b5d5211/content.htm Joins in MaxDB 7.6]<br /> ** [http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/queries006.htm Joins in Oracle 11g]<br /> * General<br /> ** [http://www.codinghorror.com/blog/archives/000976.html A Visual Explanation of SQL Joins]<br /> ** [http://www.halfgaar.net/sql-joins-are-easy Another visual explanation of SQL joins, along with some set theory]<br /> ** [http://www.gplivna.eu/papers/sql_join_types.htm SQL join types classified with examples]<br /> ** [http://weblogs.sqlteam.com/jeffs/archive/2007/04/19/Full-Outer-Joins.aspx An alternative strategy to using FULL OUTER JOIN]<br /> {{SQL}}<br /> <br /> {{DEFAULTSORT:Join (Sql)}}<br /> [[Category:SQL keywords]]<br /> [[Category:Articles with example SQL code]]<br /> <br /> [[cs:JOIN]]<br /> [[de:Join]]<br /> [[es:Join]]<br /> [[fr:Jointure (informatique)]]<br /> [[it:Join (SQL)]]<br /> [[he:Join (SQL)]]<br /> [[no:Join (SQL)]]<br /> [[pl:Join (SQL)]]<br /> [[ru:Join (SQL)]]<br /> [[uk:Join (SQL)]]<br /> [[vi:Join (SQL)]]<br /> [[zh:连接 (SQL)]]</div> Bluefist https://de.wikipedia.org/w/index.php?title=English_breakfast_tea&diff=179544750 English breakfast tea 2011-10-12T23:32:19Z <p>Bluefist: Reverted edits by 70.111.3.147 (talk) to last revision by 218.231.55.245 (HG)</p> <hr /> <div>{{advert}}<br /> <br /> [[Image:Breakfast Tea.JPG|thumb|300px|A packet of English Breakfast tea]]<br /> This tea is a traditional blend of select teas originating from Assam, Ceylon and Kenya. It is one of the most popular blended teas. Folklore suggests that, despite its name, English Breakfast tea was developed by Scottish Tea Master Drysdale in Edinburgh over 100 years ago. It was initially known simply as Breakfast Tea, and was popularised by Queen Victoria, who, having tasted it during a stay at Balmoral Castle, brought a personal supply back to London. English tea shops realised its potential and decided to rename and sell it as English Breakfast Tea.<br /> <br /> '''English breakfast tea''' is a [[black tea]] blend usually described as full-bodied, robust, and/or rich, and blended to go well with [[milk]] and [[sugar]], in a style traditionally associated with a hearty [[Full breakfast|English breakfast]].<br /> <br /> The black teas included in the blend vary, with [[Assam tea|Assam]], [[Ceylon tea (black)|Ceylon]] and Kenyan teas predominating, and [[Keemun tea|Keemun]] sometimes included in more expensive blends. Common brands of English breakfast tea include [[Typhoo]], [[Twinings]], [[Dilmah]] and many [[own brand]]s.<br /> <br /> The name &quot;[[England|English]] breakfast&quot; can be misleading to British nationals staying in North America, since many of the most popular brands of English tea bags (including [[Tetley]], [[PG Tips]] and [[Yorkshire Tea]]) do not contain fermented teas (like [[Pouchong]]) and are more often a mixture of Indian or African leaves (often tips) that might be labelled as &quot;Orange Pekoe&quot; in North America.<br /> <br /> == Origins ==<br /> Accounts of its origins vary. Drinking a blend of black teas for breakfast is indeed a longstanding British custom. The practice of referring to such a blend as &quot;English breakfast tea&quot; appears to have originated not in England but America, as far back as Colonial times.&lt;ref&gt;{{cite web|author=ZoeAnn Holmes |url=http://food.oregonstate.edu/glossary/e/englishbreakfasttea.html |title=English Breakfast Tea - Food Resource - Oregon State University |publisher=Food.oregonstate.edu |date= |accessdate=2010-12-07}}&lt;/ref&gt; An additional account (referencing a period-era &quot;Journal of Commerce&quot; article) dates the blend to 1843 and a tea merchant named Richard Davies in [[New York City]]. Davies, an [[English American|English immigrant]], started with a base of [[Congou]] and added a bit of [[Pekoe]] and [[Pouchong]]. It sold for 50 cents a pound, and its success led to imitators, helping to popularize the name.&lt;ref&gt;{{cite web|url=http://www.logoi.com/notes/english_breakfast_tea.html |title=History of the English Breakfast Tea |publisher=Logoi.com |date= |accessdate=2009-03-12}}&lt;/ref&gt;<br /> <br /> <br /> == See also ==<br /> <br /> * [[Irish breakfast tea]]<br /> * [[Full breakfast]]<br /> <br /> == References ==<br /> <br /> {{refs}}<br /> <br /> {{teas}}<br /> <br /> [[Category:Blended tea]]<br /> [[Category:English cuisine]]<br /> <br /> [[cs:English Breakfast]]<br /> [[es:English Breakfast]]<br /> [[ko:잉글리시 브렉퍼스트]]<br /> [[id:Teh sarapan Inggris]]<br /> [[mk:Англиски појадок (чај)]]<br /> [[sv:English Breakfast tea]]</div> Bluefist https://de.wikipedia.org/w/index.php?title=Henry_H._Neff&diff=124653933 Henry H. Neff 2011-06-09T22:04:59Z <p>Bluefist: Reverted edits by 99.62.136.192 (talk) to last revision by ClueBot NG (HG)</p> <hr /> <div>{{BLP sources|date=March 2011}}<br /> '''Henry H. Neff''' is the [[author]]&lt;ref&gt;{{cite news|url=http://www.post-gazette.com/pg/09027/944642-42.stm|title='The Graveyard Book,' 'Second Siege' cast macabre, magic spells|last=Eberhardt|first=Ian|date=27 January 2009|work=[[Pittsburgh Post-Gazette]]|accessdate=19 March 2011}}&lt;/ref&gt; and [[illustrator]] of ''the Tapestry'',&lt;ref&gt;{{cite news|url=http://www.reporternews.com/news/2009/jul/08/muggles-can-party-potter/|title=Muggles can party with Potter|last=Ellis|first=Anne|coauthors=Janet West|date=8 July 2009|work=[[Abilene Reporter-News]]|accessdate=19 March 2011}}&lt;/ref&gt; a fantasy fiction series that follows the life of a boy named Max McDaniels. The series comprises four [[novel]]s of which three have been published and nominated for a number of awards. In addition to compelling characters and an epic story, the books are notable for combining a range of [[genre]]s, including fantasy, history, mythology, folklore, and [[science fiction]]. Henry H. Neff both writes and illustrates the books. <br /> <br /> The Hound of Rowan was nominated for the 2009-10 Texas Bluebonnet Award.&lt;ref&gt;{{cite web|url=http://www.txla.org/sites/tla/files/pdf/TBA%202009-10.pdf|title=Texas Bluebonnet Award: 2009-2010 Master List|publisher=Texas Library Association|accessdate=19 March 2011}}&lt;/ref&gt;<br /> <br /> Before becoming an author, Henry H. Neff was a consultant for McKinsey &amp; Company and a teacher at [[Stuart Hall High School]] in San Francisco. He is a graduate of New Trier High School&lt;ref&gt;{{cite news|url=http://nl.newsbank.com/nl-search/we/Archives?p_product=PGHB&amp;p_multi=GLNB&amp;p_theme=pghb&amp;p_action=search&amp;p_maxdocs=200&amp;p_topdoc=1&amp;p_text_direct-0=1206D687EC03B340&amp;p_field_direct-0=document_id&amp;p_perpage=10&amp;p_sort=YMD_date:D&amp;s_trackval=GooglePM|title=Harper, New Trier grad student discusses book|last=Johnson|first=Eric|date=24 April 2008|work=[[NewsBank]]|accessdate=19 March 2011}}&lt;/ref&gt; in [[Winnetka, Illinois]] and [[Cornell University]] in [[Ithaca, New York]]. He currently lives and writes in Brooklyn, New York.<br /> <br /> ==Tapestry Novels==<br /> # ''[[The Hound Of Rowan]]'' (2007)<br /> # ''[[The Second Siege]]'' (2008)<br /> # ''[[The Fiend And The Forge]]'' (2010)<br /> # ''[[The Maelstrom]]'' (2012)<br /> <br /> ==References==<br /> {{Reflist}}<br /> <br /> ==External links==<br /> {{Portal|Biography}}<br /> * [http://www.henryhneff.com Henry H. Neff website]<br /> * [http://www.randomhouse.com/author/results.pperl?authorid=79949&amp;view=full_sptlght Author spotlight], Random House, Inc.<br /> * [http://www.fantasticfiction.co.uk/n/henry-neff/ Fantastic Fiction Author Page]<br /> <br /> {{Persondata &lt;!-- Metadata: see [[Wikipedia:Persondata]]. --&gt;<br /> | NAME =Neff, Henry H<br /> | ALTERNATIVE NAMES =<br /> | SHORT DESCRIPTION =<br /> | DATE OF BIRTH =<br /> | PLACE OF BIRTH =<br /> | DATE OF DEATH =<br /> | PLACE OF DEATH =<br /> }}<br /> {{DEFAULTSORT:Neff, Henry H}}<br /> [[Category:Living people]]<br /> [[Category:American writers]]<br /> <br /> <br /> {{US-writer-stub}}<br /> <br /> [[nl:Henry H. Neff]]<br /> [[pt:Henry H. Neff]]</div> Bluefist https://de.wikipedia.org/w/index.php?title=Nigahiga&diff=106259875 Nigahiga 2011-06-08T02:19:07Z <p>Bluefist: Reverted edits by 67.175.139.119 (talk) unexplained removal of content (HG)</p> <hr /> <div>{{infobox weblog<br /> |image = Ryan Higa 10.jpg<br /> |imagesize = 69px<br /> |caption = Ryan Higa in 2010<br /> | othernames = <br /> | known = {{unbulleted list|&quot;How to be&quot; series|Advertisement spoofs series|&quot;Movies in Minutes&quot; series|&quot;Skitzo&quot; series|''Ninja Melk''|''Ryan and Sean's Not So Excellent Adventure''|''Dear Ryan''|''Off The Pill''|''Agents of Secret Stuff''}}<br /> | author = {{unbulleted list|Ryan Higa|Sean Fujiyoshi}}<br /> | years = July 20, 2006–present<br /> | website = [http://www.youtube.com/nigahiga Official YouTube Channel]<br /> [http://higatv.com/ Official Website]<br /> }}<br /> '''Nigahiga''' is a popular [[YouTube]] channel created by [[Japanese-American]] friends Ryan Higa, Sean Fujiyoshi, Tim Enos and Tarynn Nago (known collectively as &quot;The Yabo Crew&quot;). Since relocating to Las Vegas to study filmmaking at [[UNLV]],&lt;ref&gt;{{cite web|url=http://www.westhawaiitoday.com/articles/2008/05/25/sports/local_sports/sports04.txt |title=from archives &gt; hi1,500 |publisher=West Hawaii Today |date=May 25, 2008 |accessdate=July 13, 2010}}&lt;/ref&gt; Higa's videos are usually solo efforts except during school breaks when he sometimes visits Hilo and collaborates with the Yabo Crew.&lt;ref&gt;{{cite web|author=AsianWeek |url=http://www.asianweek.com/2008/11/17/daily-dose-111708/ |title=Just another WordPress site |publisher=AsianWeek |date= |accessdate=July 13, 2010}}&lt;/ref&gt; They are known for their [[YouTube]] comedy videos, which have been viewed over 800 million times.&lt;ref name=&quot;Youtube views page&quot;&gt;{{cite web|url=http://www.youtube.com/user/nigahiga|title=nigahiga's Channel|publisher=[[YouTube]]|accessdate=May 2, 2011}}&lt;/ref&gt; As of June 2011, Higa's YouTube channel, nigahiga, has over 3.74 million subscribers and is the most subscribed YouTube channel of all time ahead of such prominent YouTube users as [[Smosh]], [[Ray William Johnson]], and [[ShaneDawsonTV]].&lt;ref&gt;{{cite web|url=http://finance.yahoo.com/tech-ticker/meet-the-youtube-stars-making-100000-plus-per-year-535349.html?tickers=goog,^ixic,qqqq|title=Meet The YouTube Stars Making $100,000 Plus Per Year|publisher=Yahoo! Finance|date=August 19, 2010|accessdate=August 20, 2010}}&lt;/ref&gt;<br /> <br /> ==Content==<br /> Ryan Higa and Sean Fujiyoshi started posting [[YouTube]] videos of themselves [[lip-synch]]ing to songs in mid 2006 while attending [[Waiakea High School]].&lt;ref&gt;{{cite news | title = Hilo teens become a Web video sensation. Higa and Fujiyoshi have made numorous amounts of videos like rants, lip singing, and short films | url=http://the.honoluluadvertiser.com/article/2008/Jul/27/il/hawaii807270330.html | publisher = The Honolulu Advertiser | date = July 27, 2008 | accessdate = August 21, 2009}}&lt;/ref&gt; They quickly expanded beyond songs, with a variety of other comedic pieces. Occasional guest appearances are made by Tim Enos, Ryan Villaruel, Kyle Chun, and Tarynn Nago, collectively known as the &quot;Yabo Crew&quot;.&lt;ref&gt;{{cite web|url=http://archives.starbulletin.com/2008/01/11/features/screentime.html |title=starbulletin.com &amp;#124; Features &amp;#124; /2008/01/11/ |publisher=Archives.starbulletin.com |date=January 11, 2008 |accessdate=July 13, 2010}}&lt;/ref&gt;<br /> <br /> On Christmas Eve of 2008, Higa and Fujiyoshi's two most popular videos, ''How to be gangster'' and ''How to be Emo'', were removed due to copyright violations.&lt;ref name=&quot;copyrighted&quot;&gt;{{cite web|url=http://www.youtube.com/watch?v=FCTAqdDfL58&amp;feature=player_embedded|title=Copyrighted|last=Higa|first=Ryan|date=February 23, 2009|publisher=[[YouTube]]|'''accessdate=December 11, 2009}}&lt;/ref&gt; On January 21, 2009, nigahiga's account was temporarily suspended and he was told to remove more copyrighted videos. Because of this, nigahiga's lip synching videos were all removed (with the exception of ''You're Beautiful'', which was audio swapped&lt;ref name=&quot;yourebeautiful&quot;&gt;{{cite web|url=http://www.youtube.com/watch?v=PhlvZuwl_pc|title=You're Beautiful|last=Higa|first=Ryan|date=June 27, 2008|publisher=[[YouTube]]|accessdate=November 29, 2009}}&lt;/ref&gt;), and so were most of his videos that include copyrighted music. As of now, all the music that is being played in nigahiga's videos is music Higa composed himself. ''How to be Gangster'' and ''How to be Emo'' were put back on nigahiga's channel in late August 2009, only to be removed a few days later, along with ''How to be Ninja'' and ''How to be Nerd''. In spring 2010, ''How to be Ninja'', ''How to be Gangster'' and ''How to be Emo'' were made public once more.&lt;ref name=&quot;uploads&quot;&gt;{{cite web|url=http://www.youtube.com/user/nigahiga?blend=1&amp;ob=4#g/u|title=Uploads|last=Higa|first=Ryan|publisher=[[YouTube]]|accessdate=November 29, 2009}}&lt;/ref&gt; He created a second channel recently, where he posts vlogs and behind the scenes movies. His second account is under the name of &quot;HigaTV&quot;.<br /> <br /> ===Films===<br /> <br /> In 2008, Los Angeles producer Richard Van Vleet offered to help them create their first feature-length film. The resulting film, ''Ryan and Sean's Not So Excellent Adventure'', was directed by [[Richard Van Vleet]] and released on November 14, 2008.&lt;ref name=&quot;imbdmovie&quot;&gt;{{cite web|url=http://www.imdb.com/title/tt1270113/|title=Ryan and Sean's Not So Excellent Adventure|publisher=[[imbd]]|accessdate=November 15, 2009}}&lt;/ref&gt;&lt;ref name=&quot;zap2it&quot;&gt;{{cite web|url=http://movies.zap2it.com/movies/ryan-and-seans-not-so-excellent-adventure/190268|title=Ryan and Sean's Not So Excellent Adventure|publisher=zap2it.com|accessdate=November 15, 2009}}&lt;/ref&gt; It was shown in sold out theaters in [[Hawaii]] and [[California]].{{citation needed|date=April 2011}}&lt;ref name=&quot;Herald&quot;&gt;{{cite web|author=Associated Press |url=http://www.dailyherald.com/story/?id=249477 |title=YouTube was very good to this pair |publisher=Daily Herald |date= |accessdate=September 19, 2010}}&lt;/ref&gt; The DVD was released on July 14, 2009 in the USA.&lt;ref name=&quot;amazonDVD&quot;&gt;{{cite web|url=http://www.amazon.com/Ryan-Seans-Not-Excellent-Adventure/dp/B00208EXN0|title=Ryan and Sean's Not So Excellent Adventure (2008)|publisher=[[Amazon.com]]|accessdate=November 15, 2009}}&lt;/ref&gt;<br /> <br /> ''Ryan and Sean's Not So Excellent Adventure'' is about a down on his luck movie producer, played by [[Michael Buckley (Internet celebrity)|Michael Buckley]], who is seeking out famous [[celebrities]] in order to make a hit movie in 30 days or risk being fired. He chooses Ryan Higa and Sean Fujiyoshi after discovering the popularity of their YouTube videos. He invites them to [[Hollywood]] to make a movie. They accept the offer, and run into some amusing situations on the way.&lt;ref name=&quot;adventureplot&quot;&gt;{{cite web|url=http://www.infoplease.com/movies/ryan-and-seans-not-so-excellent-adventure/68012|title=Ryan and Sean's Not So Excellent Adventure|publisher=infoplease.com|accessdate=November 15, 2009}}&lt;/ref&gt;<br /> <br /> ''Ninja Melk'', a 26 minute short film about ninjas, was released in August 2009. The plot revolves around a ninja master named Master Ching Ching sending his student Lapchung (played by Bryson Murata) to find a replacement, finding Ryan and Sean to catch the evil Bokchoy (played by Tim Enos) and his henchwoman, Gina (played by Tarynn Nago).&lt;ref name=&quot;ninjamelk&quot;&gt;{{cite web|url=http://www.youtube.com/watch?v=uIz3cb_igD4|title=Ninja Melk|last=Higa|first=Ryan|coauthors=Fujiyoshi, Sean|date=August 24, 2009|work=Video|publisher=[[YouTube]]|accessdate=November 29, 2009}}&lt;/ref&gt;<br /> <br /> A new independent 35 minute film he created with [[Wong Fu Productions]] called &quot;Agents of Secret Stuff&quot; was uploaded on Ryan's channel on November 24, 2010. It features some other popular YouTube users as well as actors such as [[Aki Aleong]]. &quot;Agents of Secret Stuff&quot; is about a teenage A.S.S. ('''A'''gent of '''S'''ecret '''S'''tuff) (Higa) who is sent undercover to a high school to protect one of the students, a girl named Taylor ([[Arden Cho]]) from the A.S.S.'s enemy, the S.I.N.S('''S'''ociety '''I'''nvolving '''N'''ot-So-Good '''S'''tuff). It included guest appearences from Ian and Anthony of [[Smosh]].<br /> <br /> Ryan Higa's and Sean Fujiyoshi's YouTube channel, nigahiga, was created on July 20, 2006. By December 21, 2010, it had reached 3,000,000 subscribers, the first channel to do so.&lt;ref name=&quot;HA&quot;&gt;{{cite web|url=http://the.honoluluadvertiser.com/article/2008/Jul/27/il/hawaii807270330.html |title=Hilo teens become a Web video sensation &amp;#124; The Honolulu Advertiser &amp;#124; Hawaii's Newspaper |publisher=The Honolulu Advertiser |date=July 27, 2008 |accessdate=July 13, 2010}}&lt;/ref&gt; By November 2010, their videos had been viewed over 630 million times.&lt;ref&gt;{{cite web|author=nigahiga|url=http://www.youtube.com/nigahiga |title=nigahiga's YouTube channe |date= |accessdate=November 26, 2010}}&lt;/ref&gt;<br /> <br /> ==Videography==<br /> &lt;ref name=&quot;uploads&quot;/&gt;<br /> {{multicol}}<br /> <br /> ;Advertisement spoofs<br /> *''The iPod Human''<br /> *''The ShamWOOHOO!''<br /> *''ChildrensBop!''<br /> *''The Portobello Mushroom Burger''<br /> *''The Big Bouncing Inflatable Green Ball!''<br /> *''Hook on Fonik''<br /> *''I broke my Nexus One!''<br /> *''The Snuggo''<br /> *''The iNavigator''<br /> <br /> ;Dear Ryan<br /> *''Defeating a Ninja''<br /> *''Superhero''<br /> *''Makeup Guru''<br /> *''Basketball-Tubing Weather Lamp''<br /> *''Are you a liar?''<br /> *''Extreme''<br /> <br /> ;&quot;How to be&quot; series<br /> *''How to be Ninja''<br /> *''How to be Gangster''<br /> *''How to be Emo''<br /> *''How to be Nerd'' (removed)<br /> *''How to be UFC Fighter'' (removed)<br /> *''How to be at the Premiere''<br /> *''How to be a YouTube Celebrity''<br /> <br /> ;Lip-synced songs<br /> *''You're Beautiful'' (audio swapped)<br /> *''Circle Circle Dot Dot''<br /> *''I'm a Gangster'' (removed)<br /> *''Wannabe'' (removed)<br /> *''Fergalicious'' (removed)<br /> *''Savin' Me'' (removed)<br /> *''My Heart Will Go On'' (removed)<br /> *''Destiny's Angels'' (removed)<br /> *''Milk and Cereal'' (removed)<br /> *''Numa Numa'' (removed)<br /> *''Irreplaceable'' (removed)<br /> *''London Bridges'' (removed)<br /> *''Barbie Girl'' (removed)<br /> *''I Love Them Hoes'' (removed)<br /> *''Promiscuous'' (removed)<br /> *''I Just Want You To Know'' (removed)<br /> *''Sukiyaki'' (private)<br /> <br /> ;Movies in Minutes series<br /> *''Titanic''<br /> *''[[The Grudge]]''<br /> *''Twilight''<br /> *''Harry Potter''<br /> *''X-Men Origins: Wolverine''<br /> *''Transformers: Revenge of the Household Objects''<br /> *''Saw 12''<br /> *''Twilight: New Moon''<br /> *''Facebook the Movie''<br /> *''Never Say Never''<br /> <br /> {{multicol-break}}<br /> <br /> ;Nigahiga songs<br /> *''Yank Dat Cameltoe'' (Crank Dat)<br /> *''Sorry Fans, Blame My ADD''<br /> *''So Damn Stupid!''<br /> *''I Miss You Soulja Boy''<br /> *''The Ninja Glare'' (In the Ayer)<br /> *''Tweet Whore''<br /> *''I'm a Chingstah!''<br /> *''Like a Good Boy'' (Like A G6)<br /> *''Shed a Tear'' (Rocketeer)<br /> *''I'm Hardcore'' featuring [[David Choi]] and [[JR Aquino]]<br /> *''Nice Guys'' featuring [[Chester See]] and [[KevJumba]]<br /> <br /> ;Best Crew<br /> *''Best Dance Crew''<br /> *''BEST CREW vs [[Poreotics|POREOTICS]]''<br /> *''BEST CREW -The Audition''<br /> <br /> ;[[Ninja Melk]]<br /> *''Ninja Melk Preview''<br /> *''Ninja Melk Trailer''<br /> *''Ninja Melk''<br /> <br /> ;Off the Pill<br /> *''Off The Pill: Stink People''<br /> *''Off The Pill: Farts''<br /> *''Off The Pill: Nosy People''<br /> *''Off The Pill: 2009''<br /> *''Off The Pill: [[Justin Bieber|BIEBER FEVER]]''<br /> *''Off The Pill: Weird People''<br /> *''Off The Pill: [[Rebecca Black]] ([[Friday (Rebecca Black song)|Friday]])''<br /> <br /> ;Rants<br /> *''Rant on Bullying''<br /> *''Ranting about Music'' (removed)<br /> *''Rant on Liars'' (removed)<br /> *''Rant on Comments'' (removed)<br /> *''Rant on Nosy People'' (removed)<br /> *''Rant on Stink People'' (removed)<br /> *''Rant on ADD'' (removed)<br /> *''Violence'' (removed)<br /> *''Rant on Asian Dramas''<br /> *''Rant on Music (Remade)''<br /> <br /> ;Ryan and Sean's Not So Excellent Adventure<br /> *''The Super Secret!''<br /> *''Ryan and Sean's NSEA''<br /> <br /> ;Skitzo<br /> *''Introductions''<br /> *''The Halloween Story''<br /> *''The PSA''<br /> *''Valentine's Day''<br /> *''[[Despicable Me]]''<br /> <br /> ;TV Program Spoofs<br /> *''House''<br /> *''Dude vs. Wild&amp;nbsp;– The Desert''<br /> <br /> {{multicol-break}}<br /> <br /> ;The Ryan Higa Show<br /> *''The Ryan Higa Show: Helga Fawntinilla''<br /> *''The Ryan Higa Show: [[Milo Ventimiglia]]''<br /> <br /> ;Word of the Day<br /> *''Word of the Day – [[Pwned]]''<br /> *''Word of the Day – [[Bromance]] (featuring [[Jay Park]])''<br /> <br /> ;Agents of Secret Stuff<br /> *''NEW NIGAHIGA MOVIE (TEASER)''<br /> *''Agents of Secret Stuff Trailer (Official)''<br /> *''Agents of Secret Stuff''<br /> <br /> ;Million Subscribers Celebrations<br /> *''1,000,000 Subscribers''<br /> *''2,000,000 Subscribers!''<br /> *''3,000,000 Subscribers!''<br /> <br /> ;Fundraisers<br /> *''Honk For Japan''<br /> <br /> ;Daily Life of<br /> *''Daily Life of [[Justin Bieber|Rustin Hieber]]''<br /> *''Daily Life of NinjaHinja''<br /> <br /> ;HigaTV<br /> *''[[Australia]] Trip''<br /> *''Freedumb''<br /> *''Nice Guys (BEHIND THE SCENES)''<br /> <br /> ;Other<br /> *''Adjusting the Sails'' (private)<br /> *''The Number 21'' (private)<br /> *''Beautiful Girls [Ghetto Style]'' (private)<br /> *''Mind Geek'' (private)<br /> *''Munky Tag'' (private)<br /> *''The Stalking Mangina Preview''<br /> *''Subliminal Messaging'' (private)<br /> *''Hilo Puppets''<br /> *''Romantic Valentines Day Story''<br /> *''Vote for REVO''<br /> *''A Message to All Haters''<br /> *''Sean Returns!''<br /> *''YouTube Live – WTH is a VLog''<br /> *''Thanksgving Campaign''<br /> *''Copyrighted''<br /> *''Nigahiga Tee-Shirts'' (private)<br /> *''Why Chris Brown Beat Rihanna''<br /> *''Will Ferrell Calling me out?'' (private)<br /> *''I wanna play a game'' (private)<br /> *''braces?!'' (private)<br /> *''Things I Like'' (private)<br /> *''REVO'' (private)<br /> *''sponsored'' (private)<br /> *''5 Nigahiga facts'' (private)<br /> *''Asians Wrestle'' (private)<br /> *''FedUp''<br /> *''[[Wedding of Prince William, Duke of Cambridge, and Catherine Middleton|Royal Wedding]] Reaction Video''<br /> *''The Announcement''<br /> {{multicol-end}}<br /> <br /> ==References==<br /> {{Reflist|colwidth=30em}}<br /> <br /> ==External links==<br /> * Official Site [http://www.HigaTV.com www.HigaTV.com]<br /> * {{YouTube|user=nigahiga|nigahiga}}<br /> * [http://www.ryanandseansmovie.com/ Official homepage of ''Ryan and Sean's Not So Excellent Adventure'']<br /> *{{imdb title|1270113|Ryan and Sean's Not So Excellent Adventure}}<br /> <br /> {{s-start}}<br /> {{s-hon}}<br /> {{s-bef | before = [[Fred Figglehorn|Fred]]}}<br /> {{s-ttl | title = Most subscribed channel on [[YouTube]] | years = August 2009—present}}<br /> {{S-inc}}<br /> {{s-new|First}}<br /> {{s-ttl | title = Top Subscribed Channel on [[YouTube]] | years = Ranked first as of May 2011}}<br /> {{s-aft | after = [[Ray William Johnson|RayWilliamJohnson]]}}<br /> {{s-end}}<br /> <br /> &lt;!-- Metadata: see [[Wikipedia:Persondata]] --&gt;<br /> {{Persondata<br /> |NAME= Higa, Ryan<br /> |ALTERNATIVE NAMES=Nigahiga<br /> |SHORT DESCRIPTION=[[Japanese-American]] [[YouTube]] comedian from [[Hilo, Hawaii]]<br /> |DATE OF BIRTH=June 6, 1990<br /> |PLACE OF BIRTH=<br /> |DATE OF DEATH=<br /> |PLACE OF DEATH=<br /> }}<br /> [[Category:Living people]]<br /> [[Category:American Internet personalities]]<br /> [[Category:American people of Japanese descent]]<br /> [[Category:1990 births]]<br /> [[Category:Internet memes]]<br /> <br /> [[da:Nigahiga]]<br /> [[eo:Nigahiga]]<br /> [[fr:Nigahiga]]<br /> [[ja:ライアン・ヒガ]]<br /> [[fi:Nigahiga]]<br /> [[sv:Nigahiga]]</div> Bluefist https://de.wikipedia.org/w/index.php?title=Benutzer:Bluefist&diff=86666340 Benutzer:Bluefist 2011-03-19T20:31:54Z <p>Bluefist: AZ: Die Seite wurde neu angelegt: Hallo, ich spreche kein Deutsch, aber ich nehme eine Deutchklasse. ~~~~</p> <hr /> <div>Hallo, ich spreche kein Deutsch, aber ich nehme eine Deutchklasse. [[Benutzer:Bluefist|Bluefist]] 21:31, 19. Mär. 2011 (CET)</div> Bluefist