1. 程式人生 > >SQL-SELECT-檢索資料(一)

SQL-SELECT-檢索資料(一)

1. 檢索資料

SELECT 從一個或者多個表中檢索資訊

-- 檢索單個列
SELECT prod_name FROM products;

-- 檢索多個列
SELECT prod_id, prod_name, prod_price FROM products;

-- 檢索所有的列
SELECT * FROM products;

-- 檢索不同的值
SELECT DISTINCT vend_id FROM products;

-- 限制結果 (MYSQL)
SELECT prod_name FROM products;
SELECT prod_name FROM products LIMIT 5
;
SELECT prod_name FROM products LIMIT 3 OFFSET 0; -- 從第0行開始,檢索3行 SELECT prod_name FROM products LIMIT 0, 3; -- 從第0行開始,檢索3行

2. 排序檢索資料

使用ORDER BY子句對檢索出的資料進行排序。ORDER BY子句必須是SELECT語句中的最後一條子句。根據需要,可以利用它在一個或者多個列上對資料進行排序。

-- 排序:保證ORDER BY位於查詢語句最後一條子句
SELECT prod_name FROM products ORDER BY prod_name; -- 按照字母表的順序排序 
SELECT prod_name FROM products ORDER BY prod_id; -- 用非檢索資料排序也是合法的 -- 按多個列排序 SELECT prod_id, prod_name, prod_price FROM products ORDER BY prod_price, prod_name; -- 按列位置排序:易混淆,不推薦使用 SELECT prod_id, prod_price, prod_name FROM products ORDER BY 2,3; -- 降序排列:DESC(由於預設為升序排列) SELECT prod_id, prod_price, prod_name FROM
products ORDER BY prod_price DESC;
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name; # 注:由於DESC只作用到直接位於其前面的列名,上例中,只對prod_price列指定的DESC,對prod_name列不指定,因此,prod_price列以降序排列,而prod_name仍以升序排列。

3. 過濾資料

使用 SELECT 語句的 WHERE 子句指定搜尋條件。只檢索所需資料需要指定搜尋條件,搜尋條件也成為過濾條件。

WHERE 子句在表明(FROM子句)之後給出。

SQL過濾與應用過濾:

資料放在應用過濾特別不妥。讓客戶端應用(或開發語言)處理資料庫的工作將會極大地影響應用的效能,並且使所建立的應用完全不具備可伸縮性。此外,在客戶端過濾資料,伺服器不得不通過網路傳送多餘的資料,這樣導致網路頻寬的浪費。因此,應該把過濾好的資料傳送至客戶端。

WHERE 子句操作符:

這裡寫圖片描述

注:並非所有的DBMS都支援這些操作符。想確定你的DBMS支援哪些操作符,請參閱相應的文件。

-- 使用WHERE子句進行相等檢測
SELECT prod_name, prod_price FROM products WHERE prod_price = 3.49;

--  使用WHERE子句進行其他檢測
SELECT prod_name, prod_price FROM products WHERE prod_price < 10;
SELECT prod_name, prod_price FROM products WHERE PROD_PRICE <= 10;

-- 不匹配檢測
SELECT vend_id, prod_name FROM products WHERE vend_id <> 'DLL01';
# 何時使用引號:單引號用來限定字串。如果將值與字串型別的列進行比較,就需要限定引號。

SELECT vend_id, prod_name FROM products WHERE vend_id != 'DLL01';

-- 範圍值檢查:使用BETWEEN操作符(需要兩個值,即範圍的開始值和結束值)
SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;

-- 空值檢查
# NULL 與欄位包含0、空字串或者僅僅包含空格不同。
# SELECT語句有一個特殊的WHERE子句,可用來檢查具有NULL值得列。這個WHERE子句就是IS NULL子句。

SELECT prod_name FROM products WHERE prod_price IS NULL;
SELECT cust_name FROM customers WHERE cust_email IS NULL;
# 這條語句返回所有沒有價格(空prod_price欄位,不是價格為0)

注意:NULL和不匹配

通過過濾選擇不包括指定值的所有行時,有可能希望返回含有NULL值的行。但是這做不到。因為未知(unknown)有特殊的含義,資料庫不知道它們如何匹配,所以在進行匹配過濾或不匹配過濾時,不會返回這些結果。過濾資料時,一定要驗證被過濾列中含NULL的行確實出現在返回的資料中。

4. 高階資料過濾

為了進行更強的過濾控制,SQL允許給出多個 WHERE 子句。

-- AND操作符:可以增加多個過濾條件,每個條件間都要使用AND關鍵字。
SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 'DLL01' AND prod_price <= 4;

-- OR操作符:匹配任一條件而不是同時匹配兩個條件 
SELECT prod_name, prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';
# 第一個條件得到滿足的情況下,就不再計算第二個條件(在第一個條件滿足時,不管第二個是否滿足,相應的行都被檢測出來)

-- AND在求值過程中優先順序更高 
SELECT prod_name, prod_price FROM products WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price >= 10;
# 使用圓括號明確地分組操作符,不要過分的依賴預設求值順序

-- IN操作符:用來指定條件範圍 
SELECT prod_name, prod_price FROM products WHERE vend_id IN('DLL01','BRS01') ORDER BY prod_name;
-- IN操作符完成了與OR相同的功能,但推薦使用IN
SELECT prod_name, prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' ORDER BY prod_name;

-- NOT操作符:用來否定其後條件的關鍵字。NOT從不單獨使用,總是與其他操作符一起使用。
SELECT prod_name FROM products WHERE NOT vend_id = 'DLL01' ORDER BY prod_name;
-- 使用<>操作符來完成
SELECT prod_name FROM products WHERE vend_id <> 'DLL01' ORDER BY prod_name;
SELECT prod_name FROM products WHERE NOT vend_id IN('DLL01', 'BRS01') ORDER BY prod_name;

5. 用萬用字元進行過濾

什麼是萬用字元?

萬用字元(wildcard):用來匹配值的一部分的特殊字元。

搜尋模式(search pattern): 由字面值、萬用字元或者兩組構成的搜尋條件。

如何使用萬用字元?

萬用字元搜尋只能用於文字欄位(串),非文字資料型別欄位不能使用符。

怎樣使用 LIKE 操作符進行匹配搜尋?

  1. 百分號(%)萬用字元
-- 找出所有以詞Fish起頭的產品
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'Fish%';

注:區分大小寫:根據DBMS 的不同及其配置,搜尋可是是區分大小寫。如果區分大小寫,則‘fish%’與 Fish bean bag toy 就不匹配。

-- 使用兩個萬用字元
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '%bean bag%';
-- 搜尋模式‘%bean bag%’表示匹配任何位置上包含文字bean bag的值,不論它之前或之後出現什麼字元

--找到以F起頭,以y結尾的所有產品
SELECT prod_name FROM products WHERE prod_name LIKE 'F%Y';
-- 可以根據郵箱地址的一部本來查詢電子郵箱

相關推薦

SQL-SELECT-檢索資料

1. 檢索資料 SELECT 從一個或者多個表中檢索資訊 -- 檢索單個列 SELECT prod_name FROM products; -- 檢索多個列 SELECT prod_id, prod_name, prod_price FROM produc

探索SQL Server元資料

簡介   在資料庫中,我們除了儲存資料外,還儲存了大量的元資料。它們主要的作用就是描述資料庫怎麼建立、配置、以及各種物件的屬性等。本篇簡單介紹如何使用和查詢元資料,如何更有效的管理SQLServer 資料庫。   對一些有經驗的資料庫開發和管理人員而言,元資料是非常有價值的。下面我會介紹一下簡單的原理,然後

崔華基於oracle的SQL優化讀書筆記如何得到真實的執行計劃

hash mes getting binary oracl only 中文 fun roc ---恢復內容開始--- 得到目標SQL的執行計劃,大致有以下四種方式: 1.explain plan 命令 2.DBMS_XPLAN包 3.SQLPLUS中的autotrace開關

PL/SQL批處理語句BULK COLLECT

數據 使用 for循環 差異 code 基於 name 從表 允許 我們知道PL/SQL程序中運行SQL語句是存在開銷的,因為SQL語句是要提交給SQL引擎處理,這種在PL/SQL引擎和SQL引擎之間的控制轉移叫做上下文卻換,每次卻換時,都有額外的開銷。然而,FORALL和

SQL Server進階T-SQL查詢和編程的背景

.com src 編程 server 分享 bubuko 進階 分享圖片 img SQL Server進階(一)T-SQL查詢和編程的背景

pandas 常用清洗資料

資料來源獲取: https://www.kaggle.com/datasets   1、 Look at the some basic stats for the ‘imdb_score’ column: data.imdb_score.describe() Select a colu

PL/SQL程式設計基礎知識

--PL/SQL變數的宣告和賦值 declare v_ename varchar2(30);--定義變數 begin v_ename:='&請輸入名字';--接受鍵盤輸入 dbms_output.put_line(v_ename); end; --put_line :列印換行

Redtiger SQL註入練習

username shu The 查詢 info format print 多次 ali 感覺會的東西太少了,以後要多練習,多寫博客。要堅持學習,一定不能放棄,為夢想奮鬥。 redtiger 這個平臺早就開始做了,但是才做到第4關。。。。 第一關: 打開題,

使用Tensorflow來讀取訓練自己的資料

本文的程式碼以及思路都是參考別人的,現在只是整理一下思路,做一些解釋,畢竟是小白。   首先本文所使用的圖片資料都是https://www.kaggle.com/下載的,使用的是貓和狗的圖片集,https://www.kaggle.com/c/dogs-vs-cats-redux-ker

k8s中的儲存卷-節點和POD儲存資料

容器的儲存卷 Pod是自己有生命週期的 Pod消失後資料也會消失 所以我們要把資料放在一個容器的外面 docker儲存卷在k8s上只有一定的儲存性,因為k8s是排程的,Pod掛掉之後再啟動不會預設之前的資料位置 脫離節點的儲存裝置才可以解決持久能力 在K8s上Pod刪除,儲存卷也

1 小時 SQL 極速入門

前幾天,我在論壇溜達。看到一個人發帖說 做了6年的企業級開發,總是被網際網路行業的人認為沒技術含量,不就是CRUD麼 先解釋下 CRUD 是什麼。CRUD 就是我們常說的增刪改查(Create,Retrieve,Update,Delete) 其實,對這個問題,我也思考過。我們所有的業務流程,最終

SQL server2008基本操作

SQL server2008基本操作 目錄  1.註冊伺服器 (1)註冊一個本地伺服器S1,測試註冊是否成功,如果成功則儲存該伺服器註冊。步驟: 第1步:開啟SQL Server Management Studio視窗→“檢視” → “

資料清洗- Pandas 清洗“髒”資料

概要 準備工作 檢查資料 處理缺失資料 新增預設值 刪除不完整的行 刪除不完整的列 規範化資料型別 必要的轉換 重新命名列名 儲存結果 更多資源 Pandas 是 Python 中很流行的類庫,使用它可以進行資料科學計算和資料分。他可以聯合其他資料科學計

吳裕雄 python oracle檢索資料2

import cx_Oracle conn = cx_Oracle.connect("scott/[email protected]:1521/orcl")cursor = conn.cursor() sql = "select ascii('Z'),ascii('H'),ascii('D'),

OpenTSDB寫資料

寫在前面 寫入的一些配置和設計會對OpenTSDB資料庫效能產生影響,所以這不單單是簡單的資料輸入,第一部分主要是對資料的寫規入規範。 寫資料(Writing Data) 您可能希望直接進入並開始將資料投入TSD,但要真正利用OpenTSDB的強大功能和靈活性,您可能需

vue 與 json-server 新增資料

列表頁server.vue <!-- 按鈕 --> <div class="tj"> <span class="demonstration">ID</span> <el-input class="int-1" v-mode

Java學習資料——Java書籍

[SEO實戰密碼:60天網站流量提高20倍].影印版.pdf [瘋狂JAVA講義].李剛.高清掃描版.pdf 《Java語言程式設計(一)》串講筆記(完整版).doc 【網易內部資料】深入淺出MySQL資料庫開發、優化與管理維護.pdf 21天學通Java_6.pdf 30天學通Java_Web專案案例開發

SQL Server 到 MySQL :異構資料庫遷移

背景 滬江成立於 2001 年,作為較早期的教育學習網站, 當時技術選型範圍並不大: Java 的版本是 1.2,C# 尚未誕生,MySQL 還沒有被 Sun 收購, 版本號是 3.23。 工程師們選擇了當時最合適的微軟體系,並在日後的歲月裡, 逐步從 ASP 過度到 .net,資料庫也跟隨 SQL Ser

SpringMVC_9_ 處理模型資料之ModelAndView、Map、@SessionAttributes

SpringMVC提供了以下幾種途徑輸出模型資料: ModelAndView:處理方法返回值型別為ModelAndView時,方法體即可通過該物件新增模型資料 Map 及 Model:入參為org.springframework.ui.Model、org.springfra

前端開發中如何解析json資料

    json資料在web開發中,應用很廣泛,尤其是在網路資料傳輸的時候,json資料作為資料傳輸的載體,如何解析Json返回的資料變得尤為重要。那麼我們先來看一下什麼是json資料? JSON(JavaScript Object Notation) 是一種輕量級的資料交