當前位置:
首頁 >
SQL检索语句
發布時間:2024/1/8
34
豆豆
數據庫學習日記
*
第一章 認識數據庫*
1、數據庫的概念
保存有組織的數據庫的容器(通常是一個文件或者是一組文件)2、數據庫管理系統
數據庫軟件應稱之為數據庫管理系統(DBMS)。數據庫是通過DBMS創建和操縱的容器。3.1、表
表是指某種特定類型數據的結構化清單,可以用來存儲某種特定類型的數據。表具有一些特性,這些特性定義了數據在表中如何存儲,包括存儲什么樣的數據,數據如何分解,各部分信息日和命名等信息。描述表的這組信息就是所謂的**模式**,模式可以用來描述數據庫中特定的表,也可以用來描述整個數據庫。3.2 表名
數據庫中的每個表都有唯一的名字來標識自己,這個名字是唯一的,即數據庫中沒有其他表具有相同的名字。4、列和數據類型
* **列**-----列中的一個字段,所有表都是由一個或者多個列組成的。分解數據:正確的將數據分解為多個列極其重要。通過分解這些數據才有可能利用特定列對數據進行分類和過濾。5 、 數據類型
所允許的數據類型,每個表列都有相應的數據類型,它限制該列中存儲的數據。6 、行-----表中的一個記錄
7、 主鍵-----表中的每一行有應該有一列(或幾列)可以唯一的標識自己。
提示:雖然并不總是需要定義主鍵,但多數數據庫設計者都會保證他們創建的每個表都具有一個主鍵,以便于以后的數據操作和管理。 表中的任何列都可以作為主鍵,只要他滿足一下的條件: 1 任意兩行都不具有相同的主鍵值。 2 每一行都必須有主鍵值 3 主鍵值不允許修改或者更新; 4 主鍵值不能重用(如果某行從表中刪除,它的主鍵不能賦值給以后的新行)。8、 外鍵(暫時略過,后續補充)。
SQL(發音為:S-Q-L或者是sequel )是Structured Query Language (結構化查詢語言的縮寫)9 、SQL語句對大小寫不敏感
第二章 檢索數據
2.1 SELECT 語句
關鍵字(keyword)---作為SQL組成部分的**保留字**。2.1.1 檢索單個列
格式: **SELECT 列名(1) FROM 表名(A); #(SQL語句必須以分號結尾,在MySQL中使用‘#’做注釋符) 含義: 表示從 'A'這張表中查詢列名為‘1’的記錄。 注意:查詢結果的排列順序可能與原始數據不同,這是沒有指定對數據進行排序,是正常的。SQL語句的結尾處必須使用分號(英文狀態下的),SQL語句不區分大小寫,但是不意味著表名,列名也不區分,要注意上述句子的含義。在SQL中所用的空格將被忽略,例如下面這個例子: 例1: SELECT 列名 例2: SELECT 列名 FROM 表名;FROM 表名; 例3: select 列名 from 表名; 例4 select 列名 FROM 表名; 例1與例2是完全等價的,但是為了程序閱讀方便,最好將語句分開寫,避免寫在一行,不便于程序的維護。由于SQL語句對大小寫不敏感,所以例3與例4與例1和例2是完全等價的。雖然SQL語句對大小寫不敏感,但是為了程序方便維護,盡量建議對SQL語句進行大寫。2.1.2 檢索多個列
格式: **SELECT 列名1,列名2,列名3··· FROM 表名A; 含義:表示從 A這張表中查詢列名為1,2,3···多列記錄。(每個要查詢的列之間使用英文狀態下的分號分隔) 例如: SELECT prod_id,prod_name,prod_price FROM Products; 表示我從Products 這張表之中查找列為 prod_id ,prod_name,prod_price 這三列的數據(注意:查詢結果是按照查詢語句的順序來顯示的,并非原始的列之間的順序)。2.1.3 檢索所有列
**格式: SELECT * FROM 表名; 使用通配符 * 檢索表中的每一列元素。注意:一般而言,除非你確實需要表中的每一列,否則最好別使用通配符 (*),雖然使用通配符能讓你自己省事,但檢索不需要的列通常會降低檢索和應用程序的性能。使用通配符有一個大優點,由于不明確指定列名,所以能檢索出來名字未知的列。2.1.4 檢索不同的值
如果不想要檢索出來的內容有重復該怎么辦呢?使用**DISTINCT**關鍵字就可以去重。 格式: **SELECT DISTINCT 列名1 FROM 表名A;** 含義,輸出表名A中列名為1的項,但是結果中不會有重復的結果。 注意:不能部分的使用**DISTINCT**DISTINCT 關鍵字作用于所有的列,不僅僅是跟在其后的那一列,例如你指定SELECT DISTINCT vend_id,prod_price,這兩列不完全相同,DISTINCT作用于這兩列。2.1.5 限制結果
SELECT 語句返回指定列表中所有匹配的行,很可能是每一行,如果你只想返回一行或者一定數量的行,該怎么辦呢? 每個數據庫實現的方式并不相同 在**SQL Server和Access**中使用SELECT時,可以使用TOP關鍵字來限制最多返回多少行。 格式:**SELECT TOP 5 列名 FROM 表名;** 含義:使用TOP 5表示結果中最多顯示5行記錄。在DB2,可以使用如下語句來限制輸出結果的行數 **格式: SELECT 列名1 FROM 表名A FETCH 5 ROWS ONLY;在Oracle中,需要基于ROWNUM來計算行,像這樣: **SELECT 列名1 FROM 表名A WHERE ROWUNM <=5; 在MySQL 、MariaDB、PostgreSQL、SQLite中需要使用LIMIT字句。像這樣:**SELECT 列名1 FROM 表名 LIMIT 5;** 可見不同的數據庫管理軟件在實現同一功能的時候可能并不相同,值得我們關注。 上述代碼使用SELECT 語句來檢索單獨的一列數據。LIMIT 5指示MySQL等DBMS返回不超過5行的數據,為了得到后面5行的數據,需要指定從哪開始以及檢索的行數,像這樣: 輸入:**SELECT prod_name FROM Products LIMIT 5 OFFSET 4;**LIMIT 5 OFFSET 4指示MySQL等DBMS返回從第4行開始起的5行數據。第一個數字是檢索的行數,第二個數字是指從哪開始。可以使用更為簡潔的語句,如下所示:**SELECT prod_name FROM Products LIMIT 4,5;**上述代碼與前面的LIMIT 5 OFFSET 4是等價的,他們輸出結果完全相同。**注意:**第一個被檢索的行是第0行而不是第1行,因此LIMIT 1 OFFSET 1 指的是檢索表中的第2行,而不是第一行。2.5.6 使用注釋
SQL程序的開頭處通常都會使用注釋,來說明該程序的功能以及日期或者是作者的聯系方式等。使用注釋通常會使得程序變得更容易閱讀。 在很多DBMS種,都支持各種各樣的 注釋語言,讓我們先來看看行內注釋: SELECT prod_name --這是一條注釋 FROM Products; 分析:注釋使用 -- (兩個連字符)嵌在行內。 -- 之后的文本就是注釋。 下面是另一種形式的注釋: #這是一條注釋 SELECT prod_name FROM Products; 在一行的開始處使用#,這一行都將成為注釋。 當然,你也可以使用多行注釋,如下面這個例子: *****/* SELECT prod_name,vend_id FROM Products; */ SELECT prod_name FROM Products;***** 注釋是從/*開始,到 */結束的,/*和 */之間的內容都是注釋。**第三章 排序檢索數據
3.1 排序數據
上面所使用的的檢索語句輸出結果并沒有特定順序,若要使得輸出結果有序,就必須使用**ORDER BY** 關 鍵字來對檢索的結果進行排序。 **字句:SQL語句有字句構成,有些字句是必須的,有些則是可選的。** 例如下面這個例子: **SELECT prod_name FROM Products ORDER BY prod_name;** 表示對prod_name的列進行升序排序。 注意:ORDER BY 字句的位置在指定一條ORDER BY 字句時,**應該保證它是 SELECT 語句中最后一條字句**,如果它不是最后的子句,將會出現錯誤消息。提示:ORDER BY 子句中使用的列將是為顯示而選擇的列,但是也可是使用不顯示的列作為排序的依據。3.2 按多個列排序
上面顯示的對單個列進行排序,實際上也可以對多個列進行排序。例如下面的這個例子: SELECT prod_id,prod_price,prod_name FROM Products ORDER BY prod_price,prod_name; 理解在按多行排序時,排序的順序完全按規定進行。換句話說,對于上面的例子,僅在多個行具有相同的prod_price值時才對產品按prod_name進行排序。3.3 按列位置進行排序
除了能用列名指出排序順序外,ORDER BY 還支持按相對列的位置進行排序。為理解這一內容,我們來看下面的這個例子: SELECT prod_id,prod_price,prod_name FROM Products ORDER BY 2,3; SELECT清單中指定的是選擇列的相對位置而不是列名。這么做的好處是可以不用重新輸入列名,但壞處是當整個表的結構發生變化時,如果不對上面的相對位置進行改動,那么輸出的結果可能不是你預期的結果。**提示:按非選擇列排序**:顯然,當根據不出現在SELECT清單中的列進行排序時,不能采用這項技術。但是,如有必要,可以混合實際列名與相對位置。如下面這個例子:**SELECT prod_id,prod_price,prod_name FROM Products ORDER BY 2,prod_name;**這也是可行的。3.4 指定排序的方向
數據排序不限于升序排序(從A到Z),這只是默認的排序順序。還可以使用ORDER BY 字句進行降序排序(從Z到A),為了進行降序排列,必須使用**DESC**關鍵字。例如下面的這個例子:SELECT prod_id,prod_price,prod_name FROM Products ORDER BY prod_price DESC;上面的這個例子為按照prod_price的降序對結果進行排序。 如果打算用多個列進行排序該怎么辦? 下面這個例子將很好的闡述如果對多個列進行降序排列:SELECT prod_id,prod_price,prod_name FROM ORDER BY prod_price DESC,prod_name; 上面的這個例子DESC作用于prod_price,對產品價格進行降序排列,在產品價格相同使用,對產品名進行升序排序。警告:如果想要在多個列上降序排列,不許對每一列指定DESC關鍵字。 請注意:DESC是DESCENDING的縮寫,這兩個關鍵字都可以使用。與DESC相對的是ASC(或者是ASCENDING),請在升序時可以指定它。但實際上,ASC沒有多大用處,應為升序時默認的。3.5 小結
這一課學習了如何使用SELECT語句的ORDER BY 字句對檢索的數據進行排序,這個字句必須是SELECT 語句中的最后一條字句,根據需要,可以利用它在一個或多個列對數據進行排序。總結
- 上一篇: #DNS比较(北京联通宽带) @FDDL
- 下一篇: 初识linux之进程