1. 程式人生 > >SQL實戰:子查詢的應用例項

SQL實戰:子查詢的應用例項

  • 本例項設計到的SQL語法包括:
select ,
delete,
distict,
not exists,
not in,
group by,
having,
min,
max
  • 建立成績表:
CREATE TABLE score(
id INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(100) NOT NULL,
course VARCHAR(40) NOT NULL,
score INT,
PRIMARY KEY ( id )
);
  • 插入資料:
INSERT INTO score 
(NAME,course,score) VALUES
('張三'
,'語文','81'), ('張三','數學','75'), ('李四','語文','56'), ('李四','數學','76'), ('李四','數學','76'), ('王五','語文','89'), ('王五','語文','89'), ('馬六','數學','99') ;
  • 問題1: 用一條SQL 語句,查詢出每門課都大於80分的學生姓名.

答:

1.
SELECT DISTINCT NAME FROM score s WHERE
NOT EXISTS
(SELECT 1 FROM score si WHERE si.score<80 AND si.name=s.name); 
2.
SELECT
DISTINCT NAME FROM score WHERE NAME NOT IN (SELECT DISTINCT NAME FROM score WHERE score<=80);
3. SELECT NAME FROM score GROUP BY NAME HAVING MIN(score)>80;
  • 問題2: 刪除除id不同, 其他都相同的冗餘資訊。

答:
因為MySQL語法規定,在同一語句中,不能先SELECT出同一表中的某些值,再UPDATE這個表(You can NOT specify target TABLE ‘score’ FOR UPDATE IN FROM clause。),因此需要寫兩個子查詢。
用NOT IN或NOT EXISTS都可以達到目的,MIN或MAX函式確定保留冗餘資料中最小或最大的那一條資料。

1.
DELETE FROM score 
WHERE id NOT IN
(
SELECT id FROM
(SELECT MIN(si.id) FROM score si GROUP BY si.name,si.course,si.score) ss
)
;
2.
DELETE s FROM score s
WHERE NOT EXISTS
(
 SELECT idi FROM
 (SELECT MAX(si.id) idi FROM score si GROUP BY si.name,si.course,si.score) ss
 WHERE s.id=ss.idi
)
;

相關推薦

SQL實戰查詢應用例項

本例項設計到的SQL語法包括: select , delete, distict, not exists, not in, group by, having, min, max 建立成績表:

SQL錯誤排查查詢返回的值不止一個。查詢用作表示式時,這種情況是不允許的...

 SELECT OrderID  FROM dbo.Orders   WHERE EmployeeID =(SELECT EmployeeID FROM dbo.Employees  WHERE LastName LIKE N'D%');      訊息 512,級別

查詢應用把子查詢作為某個欄位

select ddmx.xm_id, ddmx.tdzt, ddmx.dd_id, to_char(ddmx.qsrq, 'yyyy-MM-dd HH24:mi

[瘋狂Java]SQL查詢

1. SQL標準對子查詢的定義:     1) 簡單的講就是巢狀select查詢,SQL都支援多層巢狀查詢;     2) 要求記憶體的查詢必須用括號()包起來;     3) 子查詢可以出現的位置:          i. from之後:查詢的實質就是一個臨時的檢視,因此

mysql 複雜sql查詢例項

在我們的實際專案中,有時候需要寫一下資料彙總和查詢,哪麼子查詢就必不可少。 比如我現在有三張表: lch_resource_attribute,idx_lch_resource_category,lch_resource_games 那麼我現在要查詢某個應用的子分類的話,用

SQL server 查詢出現---“查詢返回的值不止一個。當查詢跟隨在 =、!=、<、<=、>、>= 之後,或查詢用作表達式時,這種情況是不允許的。”SQL查詢錯誤解析---

gui 允許 select 查詢語句 一對一 行數 style sql 之前 最近用select進行數據篩選,碰到下面的這個錯誤: ---子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表達式時,這種情況是不

SQL裏的查詢

rom ble 使用 pan tab val clob 子查詢 內部 子查詢必須遵守的規則 子查詢必須位於圓括號內。 除非子查詢裏有多個字段讓子查詢進行比較,否則子查詢的SELECT子句裏只能有一個字段。 子查詢裏不能使用ORDER BY子句。在子查詢裏,我們可以

《MySQL必知必會學習筆記》查詢

簡單的 後繼 復雜 pos clas tty append 靈活 values 子查詢 在開始了解子查詢之前,首先做下準備工作,建立3個表, 一個是customers表,當中包含:客戶名字、客戶ID、客戶Tel等。 一個是orders

MYSQL 學習筆記記錄整理之三查詢

進行 測試 匹配 應該 因此 order 輸出 lec pro 1、利用子查詢進行過濾 eg:假如需要列出訂購物品TNT2的所有客戶,具體步驟: 檢索包含物品TNT2的所有訂單編號 檢索具有前一步驟列出的訂單編號的所有客戶的ID 檢索前一步驟返回的所有客戶ID的客戶信息 上

012查詢和增刪改查

err eat 多個 cal mat 行數 分類 查詢 同時 一. 子查詢 子查詢就是指在一個select語句中嵌套另一個select語句。同時,子查詢必須包含括號。 MySQL 5.6.x 版本之前,MySQL的子查詢性能較差,但是從5.6開始,不存在性能差的問題。

06. SQL 基礎--> 查詢

多列 urn 位置 sel col 分組函數 數據 lar pda 一、子查詢 子查詢就是位於SELECT、UPDATE、或DELETE語句中內部的查詢 二、子查詢的分類 單行子查詢 返回零行或一行 多行子查詢 返回一行或多行 多列子查詢

資料庫SQL實戰MySql練習(下)

文章目錄 31. 獲取select * from employees對應的執行計劃 32. 將employees表的所有員工的last_name和first_name拼接起來作為Name,中間以一個空格區分 33. 建立一個actor表,包含如

資料庫SQL實戰MySql練習(上)

文章目錄 1. 查詢最晚入職員工的所有資訊 2. 查詢入職員工時間排名倒數第三的員工所有資訊 3. 查詢各個部門當前(to_date='9999-01-01')領導當前薪水詳情以及其對應部門編號dept_no 4. 查詢所有已經分配部門

53 Oracle資料庫SQL開發之 查詢——編寫包含查詢的UPDATE和DELETE

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Laravel Query Builder 複雜查詢案例查詢實現分割槽查詢 partition by

案例 案例:[Laravel 在文章列表中附帶上前10條評論?][1],在獲取文章列表時同時把每個文章的前10條評論一同查詢出來。 這是典型分割槽查詢案例,需要根據 comments 表中的 post_id 欄位進行分割槽,同時根據條件進行排序,把符合條件的前 N 條是資料取出來。 在其他資料庫(Ora

資料庫查詢優化技術(二)查詢優化

查詢的基本操作     1選擇操作 對應的是限制條件(格式類似“field<op>consant”, field表示列物件,op是操作符如"="、">"等)。 操作物件是二維表中的行 優化方式: 選擇操作下推 目的: 是儘

二、Kafka基礎實戰消費者和生產者例項

package kafka.consumer.partition; import kafka.api.FetchRequest; import kafka.api.FetchRequestBuilder; import kafka.api.PartitionOffsetRequestInfo;

SQL中的查詢的使用

這篇文章講述了SQL中的子查詢,如有錯誤或者不妥之處,還請各位大佬批評指正。 什麼是子查詢? 把一個查詢的結果在另一個查詢中使用就叫做子查詢 初始資料 有五個表:學生表,老師表,課程表,學院表,課程成績表。 表結構 初始資料 學生

MySQL的bug查詢中使用rand(),上層查詢中rand()的值被重算

  在使用mysql的過程中,發現了一個神奇的bug。   mysql語句如下: select random_val from (select floor(rand()*10) as random_val from Test) b where b.random_val

深入淺出外觀模式(二)外觀模式應用例項

3. 外觀模式應用例項 下面通過一個應用例項來進一步學習和理解外觀模式。 1. 例項說明 某軟體公司欲開發一個可應用於多個軟體的檔案加密模組,該模組可以對檔案中的資料進行加密並將加密之後的資料儲存在一個新檔案中,具體的流程包括三個部分,分別是讀取原始檔、加