{"id":55000097,"date":"2012-02-01T00:00:00","date_gmt":"2020-01-24T15:58:04","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=97"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"SQL_SELECTAbfragen_Teil_II","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html","title":{"rendered":"SQL: SELECT-Abfragen, Teil II"},"content":{"rendered":"<p class='introduction'>Im ersten Teil dieser Artikelreihe haben Sie erfahren, wie Sie SELECT-Abfrage grunds&auml;tzlich aufbauen und wie Sie die gew&uuml;nschten Felder zur Abfrage hinzuf&uuml;gen. Im zweiten Teil k&uuml;mmern wir uns um die andere M&ouml;glichkeit, die angezeigten Daten einzuschr&auml;nken: n&auml;mlich durch das Filtern der Datens&auml;tze mit entsprechenden Bedingungen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1201_SQLBedingungen.mdb<\/b>.<\/p>\n<h2>Bedingungen in Abfragen<\/h2>\n<p>In der Entwurfsansicht von Abfragen stellen Sie Kriterien ganz einfach ein, indem Sie festlegen, f&uuml;r welches Feld das Kriterium gelten soll und den Vergleichswert unten in der Zeile <b>Kriterium <\/b>der entsprechenden Spalte eintragen (siehe Bild 1).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_97_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_97_001.png\" alt=\"Eingeben von Abfragekriterien in der Entwurfsansicht einer Abfrage\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Eingeben von Abfragekriterien in der Entwurfsansicht einer Abfrage<\/p>\n<p>Wenn Sie Kriterien f&uuml;r verschiedene Spalten festlegen m&ouml;chten, tragen Sie diese einfach in die gew&uuml;nschten Spalten ein, und wenn Sie mehrere Kriterien durch <b>AND <\/b>oder <b>OR <\/b>verkn&uuml;pfen m&ouml;chten, bietet die Entwurfsansicht auch hierf&uuml;r eine M&ouml;glichkeit.<\/p>\n<p>Unter SQL ist das kaum komplizierter, und das beste ist: Wenn Sie sich einmal nicht sicher sind, wie ein SQL-Ausdruck mit einer Bedingung aussehen soll, dann stellen Sie die entsprechende Abfrage einfach in der Entwurfsansicht zusammen und wechseln dann in die SQL-Ansicht &#8211; dort finden Sie dann den passenden Ausdruck vor.<\/p>\n<p>Leider gelingt dies nicht mit allen m&ouml;glichen Bedingungen: Wenn Sie beispielsweise eine verschachtelte und mit <b>AND<\/b> und <b>OR <\/b>versehene Bedingung formulieren m&ouml;chten, m&uuml;ssen Sie diese auch in der Entwurfsansicht einer Abfrage manuell eintragen.<\/p>\n<h2>Das WHERE-Schl&uuml;sselwort<\/h2>\n<p>Das wichtigste Element beim Zusammenstellen von <b>SELECT<\/b>-Abfragen mit Bedingungen hei&szlig;t <b>WHERE<\/b>. Es leitet den Teil des SQL-Ausdrucks ein, der die Bedingungen enth&auml;lt. Die SQL-Ansicht f&uuml;r die Abfrage aus der Abbildung liefert beispielsweise folgenden Ausdruck:<\/p>\n<pre>SELECT tblArtikel.ArtikelID, tblArtikel.Artikelname\r\nFROM tblArtikel\r\nWHERE (((tblArtikel.Artikelname)=\"Chai\"));<\/pre>\n<p>Wie Sie bereits erfahren haben, kann es nie schaden, den Tabellennamen bei der Auflistung der anzuzeigenden Felder mit anzugeben &#8211; auf diese Weise verhindern Sie Fehler, wenn beispielsweise ein Feldname in mehreren per Abfrage verkn&uuml;pften Tabellen vorkommt und nicht eindeutig zugeordnet werden kann. In der <b>WHERE<\/b>-Bedingung ist Access jedoch etwas &uuml;bervorsichtig. Zwar schaden &uuml;berz&auml;hlige Klammern-Paare nicht, jedoch f&uuml;hren diese auch leicht zu Fehlern. Aus dem Ausdruck <\/p>\n<pre>WHERE (((tblArtikel.Artikelname)=\"Chai\"));<\/pre>\n<p>k&ouml;nnen Sie auch leicht den folgenden machen, indem Sie einige Klammern entfernen:<\/p>\n<pre>WHERE tblArtikel.Artikelname=\"Chai\";<\/pre>\n<p>Und wenn Sie, was bei einer Abfrage mit nur einer Herkunftstabelle leicht m&ouml;glich ist, noch die Tabellenbezeichnung weglassen, erhalten Sie schlie&szlig;lich diese Abfrage als eine der einfachsten Varianten einer Auswahlabfrage mit Kriterium:<\/p>\n<pre>SELECT ArtikelID, Artikelname\r\nFROM tblArtikel\r\nWHERE Artikelname=\"Chai\";<\/pre>\n<h2>Fehlerquelle Zeichenkette<\/h2>\n<p>Hier ist gleich ein wichtiger Aspekt und eine h&auml;ufige Fehlerquelle bei der Zusammenstellung von SQL-Abfragen sichtbar: Der Vergleichsausdruck wird in Anf&uuml;hrungszeichen eingefasst. In der Entwurfsansicht einer Abfrage nimmt Access einem die Arbeit ab: Es nimmt Vergleichsausdr&uuml;cke wie <b>Chai <\/b>f&uuml;r das Feld <b>Artikelname <\/b>klaglos entgegen, wandelt es dann aber in <b>&#8222;Chai&#8220; <\/b>um. Wenn Sie beispielsweise einen Zahlenwert als Kriterium f&uuml;r das Feld <b>ArtikelID <\/b>eingeben, geschieht dies nicht &#8211; die Zahl wird so beibehalten, und auch in der SQL-Ansicht erscheinen keine Anf&uuml;hrungszeichen:<\/p>\n<pre>SELECT ArtikelID, Artikelname\r\nFROM tblArtikel\r\nWHERE ArtikelID=1;<\/pre>\n<p>Access pr&uuml;ft hier automatisch, welchen Datentyp das Feld hat, f&uuml;r das Sie die Bedingung anlegen, und f&uuml;gt im Falle des Datentyps <b>Text<\/b> automatisch Anf&uuml;hrungszeichen hinzu. Zuvor pr&uuml;ft es jedoch, ob der angegebene Ausdruck eventuell einem Funktionsnamen oder Feldnamen entspricht. Wenn Sie einen fixen Vergleichsausdruck f&uuml;r ein Textfeld festlegen, m&uuml;ssen Sie Anf&uuml;hrungszeichen verwenden. Am besten noch einfache Anf&uuml;hrungszeichen, dann k&ouml;nnen Sie einen solchen SQL-Ausdruck sp&auml;ter besser in VBA verwenden:<\/p>\n<pre>SELECT ArtikelID, Artikelname\r\nFROM tblArtikel\r\nWHERE Artikelname='Chai';<\/pre>\n<h2>Vergleichsausdruck zusammenstellen<\/h2>\n<p>Der Platz f&uuml;r die <b>WHERE<\/b>-Klausel ist immer direkt hinter der Auflistung der beteiligten Tabellen. Die <b>WHERE<\/b>-Klausel besteht aus einem oder mehreren Ausdr&uuml;cken der Art <b><Vergleichswert 1> <Vergleichsoperator> <Vergleichswert 2><\/b>. Der Ausdruck <b><Vergleichswert 1><\/b> enth&auml;lt meist den Feldwert, <b><Vergleichsoperator><\/b> einen Ausdruck wie zum Beispiel <b>=<\/b>, <b>><\/b>, <b>>=<\/b>, <b><<\/b>, <b><=<\/b>, <b><><\/b> oder <b>LIKE <\/b>und <b><Vergleichswert 2><\/b> den statischen oder dynamischen Vergleichswert wie einen Zahlenwert, eine Zeichenkette oder auch einen Verweis auf ein anderes Feld der Datenherkunft der Abfrage. Unter Access k&ouml;nnen Sie sogar Verweise auf Inhalte von Steuerelementen in Formularen oder Funktionen angeben &#8211; sowohl eingebaute als auch benutzerdefinierte Funktionen sind dabei zul&auml;ssig. Je nach dem Felddatentyp und dem verwendeten Vergleichsoperator sind verschiedene Vergleichsoperatoren m&ouml;glich &#8211; mehr dazu weiter unten.<\/p>\n<h2>Vergleichsausdr&uuml;cke mit OR oder AND verkn&uuml;pfen<\/h2>\n<p>Wenn Sie gleich mehrere Vergleichsausdr&uuml;cke angeben, m&uuml;ssen Sie sich entscheiden, ob die Abfrage alle Ergebnisse zur&uuml;ckgibt, f&uuml;r die mindestens einer der Ausdr&uuml;cke wahr ist oder ob alle Ausdr&uuml;cke wahr sein m&uuml;ssen &#8211; und gelegentlich werden Sie sogar Mischformen verwenden.<\/p>\n<p>Wenn Sie beispielsweise alle Bestellungen ermitteln m&ouml;chten, die durch die Kunden mit dem Wert <b>1 <\/b>oder <b>2 <\/b>im Feld <b>KundeID <\/b>get&auml;tigt wurden, verwenden Sie etwa folgende Abfrage:<\/p>\n<pre>SELECT BestellungID, KundeID\r\nFROM tblBestellungen\r\nWHERE KundeID=1 OR KundeID=2;<\/pre>\n<p>Wenn Sie einen Kunden ermitteln m&ouml;chten, dessen <b>Firma<\/b> mit <b>A <\/b>und dessen Postleitzahl mit <b>1 <\/b>beginnt und die Abfrage alle Felder zur&uuml;ckliefern soll, verwenden Sie etwa folgenden Ausdruck:<\/p>\n<pre>SELECT *\r\nFROM tblKunden\r\nWHERE Firma Like 'A*' AND PLZ Like '1*';<\/pre>\n<h2>Klammernsetzung<\/h2>\n<p>Gelegentlich werden Sie Kombinationen aus mit <b>AND <\/b>und\/oder <b>OR <\/b>verkn&uuml;pften Bedingungen auswerten. Die Abfrage aus Bild 2 etwa soll alle Artikel liefern, deren Artikelname mit dem Buchstaben <b>C <\/b>beginnt und deren Feld <b>LieferantID <\/b>den Wert <b>1 <\/b>oder <b>2 <\/b>besitzt. Bei der Notation in der Abbildung setzt Access im SQL-Ausdruck automatisch <b>LieferantID = 1 OR LieferantID = 2 <\/b>in Klammern und wertet diesen Ausdruck aus, bevor die Bedingung f&uuml;r den Artikelnamen hinzukommt.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_97_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_97_004.png\" alt=\"AND und OR in einer einzigen Abfrage\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: AND und OR in einer einzigen Abfrage<\/p>\n<pre>SELECT tblArtikel.ArtikelID, tblArtikel.Artikelname, \r\ntblArtikel.LieferantID\r\nFROM tblArtikel\r\nWHERE tblArtikel.Artikelname Like 'C*' AND \r\n(tblArtikel.LieferantID = 1 OR \r\ntblArtikel.LieferantID = 2);<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000097\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000097?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000097\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8d63f6cbe9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im ersten Teil dieser Artikelreihe haben Sie erfahren, wie Sie SELECT-Abfrage grunds&auml;tzlich aufbauen und wie Sie die gew&uuml;nschten Felder zur Abfrage hinzuf&uuml;gen. Im zweiten Teil k&uuml;mmern wir uns um die andere M&ouml;glichkeit, die angezeigten Daten einzuschr&auml;nken: n&auml;mlich durch das Filtern der Datens&auml;tze mit entsprechenden Bedingungen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012012,662012,44000019],"tags":[],"class_list":["post-55000097","post","type-post","status-publish","format-standard","hentry","category-66012012","category-662012","category-SQLGrundlagen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SQL: SELECT-Abfragen, Teil II - Access [basics]<\/title>\n<meta name=\"description\" content=\"Im ersten Teil dieser Artikelreihe haben Sie erfahren, wie Sie SELECT-Abfrage grunds\u00e4tzlich aufbauen und wie Sie die gew\u00fcnschten Felder zur Abfrage hinzuf\u00fcgen. Im zweiten Teil k\u00fcmmern wir uns um die andere M\u00f6glichkeit, die angezeigten Daten einzuschr\u00e4nken: n\u00e4mlich durch das Filtern der Datens\u00e4tze mit entsprechenden Bedingungen.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL: SELECT-Abfragen, Teil II - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Im ersten Teil dieser Artikelreihe haben Sie erfahren, wie Sie SELECT-Abfrage grunds\u00e4tzlich aufbauen und wie Sie die gew\u00fcnschten Felder zur Abfrage hinzuf\u00fcgen. Im zweiten Teil k\u00fcmmern wir uns um die andere M\u00f6glichkeit, die angezeigten Daten einzuschr\u00e4nken: n\u00e4mlich durch das Filtern der Datens\u00e4tze mit entsprechenden Bedingungen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:58:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_97_001.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"11\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_97_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html\",\"name\":\"SQL: SELECT-Abfragen, Teil II - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:58:04+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Im ersten Teil dieser Artikelreihe haben Sie erfahren, wie Sie SELECT-Abfrage grunds\\u00e4tzlich aufbauen und wie Sie die gew\\u00fcnschten Felder zur Abfrage hinzuf\\u00fcgen. Im zweiten Teil k\\u00fcmmern wir uns um die andere M\\u00f6glichkeit, die angezeigten Daten einzuschr\\u00e4nken: n\\u00e4mlich durch das Filtern der Datens\\u00e4tze mit entsprechenden Bedingungen.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/SQL_SELECTAbfragen_Teil_II.html\",\"name\":\"SQL: SELECT-Abfragen, Teil II\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000097"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000097\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}