1. 程式人生 > >SQL筆記(二) SQL的查詢的基本結構

SQL筆記(二) SQL的查詢的基本結構

SQL筆記(二) SQL查詢的基本結構

本文中用到的所有資料庫檔案在相關材料下載中可以找到

大學模式

1. 大學資料庫模式


classroom(building, room_number,capacity)
department(dept_name, building, budget)
course(course_id, title, dept_name, credits)
instructor(ID,name,dept_name,salary)
section(course_id,sec_id, semester, year, building, room_number, time_slot_id)
teaches(ID
, course_id, sec_id, semester, year)
student(ID, name, dept_name, tot_cred)
takes(ID, course_id, sec_id, semester, year, grade)
advisor(s_ID, i_ID)
time_slot(time_slot_id, day, start_time, end_time)
prereq(course_id, prereq_id)

SQL查詢的基本結構由三個字句構成:
select, from , where .

單關係查詢

查詢1.找到所有教師的名字
select name
from instrucotr;
查詢2.找出所有教師所在的系名
select dept_name
from instructor;

因為一個系中存在多個教師,所以查詢2中可能出現重複的資料。可以使用distinct強行去重。

distinct 去除重複資料

查詢3.找出所有教師所在的系名
select distinct dept_name
from instructor;

all 不去除重複(預設)

查詢4.找出所有教師所在的系名(等價於查詢2)
select all dept_name
from instructor;

帶有運算子算術表示式的查詢

查詢5.
select ID, name, dept_name, salary*1.1
from instructor;

該操作不會導致instructor關係的任何改變。

where 條件查詢

查詢6.找出所有的在Computer Science系,並且工資超過70 000美元的教師的姓名。
select name
from instructor
where dept_name = 'Comp. Sci.' and salary > 70000;

where子句中的邏輯連詞

邏輯連詞有:andornot
邏輯連詞的運算物件可以是包含比較運算子<><=>=<>的表示式。

多關係查詢

查詢7. 找出所有的教師的姓名,以及他們所在系的名稱和系所在建築的名稱。
select name, instructor.dept_name, building
from instructor, department
where instructor.dept_name = department.dept_name;

注意: dept_name既出現在instructor中,也出現在department中,所以在查詢時,需要指定dept_name的字首。

一個典型的SQL查詢

查詢8.一個典型的SQL查詢
select A1, A2, ... , An
from r1, r2, ... , rn
where P;
  • select 子句:用於列出查詢結果中所需要的屬性。
  • from子句:是一個查詢求值中需要訪問的關係列表。
  • where子句:是一個作用在from子句中關係屬性的謂詞。
    在查詢8中,每個Ai表示一個屬性,每個ri表示一個關係。P是一個謂詞。如果省略where子句,則謂詞Ptrue

運算順序:
1. 為from子句中列出的關係產生笛卡爾積
2. 在步驟1的結果上應用where子句中指定的謂詞。
3. 對於步驟2結果中的每個元組,輸出select子句中指定的屬性(或表示式的結果)。

自然連線 ——natural join

自然連線作用於兩個關係,併產生一個關係作為結果。
自然連線只考慮哪些關係模式中都出現的屬性上取值相同的元組對。

查詢9. 對於大學中所有講授課程的教師,找出他們的姓名以及所講述的所有課程標識。
select name, course_id
from instructor, teaches
where instructor.ID = teaches.ID;
查詢10. 使用自然連線實現查詢9
select name, course_id
from instructor natural join teaches;

查詢9和查詢10的結果一致。

自然連線多個關係

查詢11. 使用自然連線將多個關係連線在一起。
select A1, A2, ... ,An
from r1 natural join r2 natural ... natural join rn
where P;

更為一般的情況,from子句如下:

from E1, E2, ... , En

每個Ei可以是單個關係或一個包含自然連線的表示式。

查詢12. 列出教師名字以及他們所講授課程的名稱。
查詢12.1
select name, title
from instructor natural join teaches, course
where teaches.course_id = course.course_id;
查詢12.2
select name, title
from instructor natural join teaches natural join course

12.1 和12.2 的結果不同。
instructor 和teaches的自然連線包括屬性:
(ID, name, dept_name, salary, course_id, sec_id)

course 包含屬性:
(course_id, title, dept_ name, credits)

兩者自然連線的結果需要滿足:
course_id 相等, dept_name相等

查詢12.2 中會將教師講授的課程不是他所在的系這種情況排除在外。

查詢12.3 join… using…
select name, title
from(instructor natural join teaches) join coures using(course_id);

使用者指定需要相等的屬性。等價於查詢12.1。

相關推薦

SQL筆記 SQL查詢基本結構

SQL筆記(二) SQL查詢的基本結構 本文中用到的所有資料庫檔案在相關材料下載中可以找到 大學模式 1. 大學資料庫模式 classroom(building, room_number,capacity) departmen

SQL 筆記

mysql 其中 rod 順序 clas update 基礎教程 In block 本筆記整理自《SQL 基礎教程》、《MySQL 必知必會》和網上資料。個人筆記不保證正確。 一、復雜查詢 視圖 將 SELECT 查詢包裝成一個虛擬表,該虛擬表就被稱為視圖。(因為只是一

PostgreSQL學習筆記:資料庫基本操作

文章目錄 1. 資料庫基本操作 1.1 登入控制檯 1.1.1 登入控制檯 1.1.2 退出控制檯 1.2 建立/刪除使用者 1.2.1 建立使用者

軟體測試學習筆記軟體測試基本技術

一、簡介 任何工程產品都可以使用白盒測試和黑盒測試兩種方法之一進行測試。 1.1 黑盒測試 黑盒測試:已知產品的功能設計規格和使用者手冊,可以進行測試證明每個功能是否實現、每個實現了的功能是否符合要求,以及產品的效能是否滿足使用者的要求。   軟體的黑盒測試意味著測試要

python3基礎筆記python的基本資料型別與運算子

一、運算子 1.算術運算子 假設變數a的值是10,變數b的值是21,則 - 運算子描述示例+ 加法運算,將運算子兩邊的運算元增加。 a + b = 31 - 減法運算,將運算子左邊的運算元減去右邊的運算元。 a – b = -11 * 乘法運算,將運算子兩邊的運算元相乘 a

MongoDB 學習筆記查詢

最簡單的查詢 個人認為mongoDB是面向物件的吧。 例如最簡單的查詢  整個資料集只有三條資料 第一查詢姓名為張三的  資料 查詢的條件比較好寫 隨意   db.collection.find(查詢條件)   例如 15 得到的結果是這樣  如果你不

JavaScript複習筆記函式與分支結構

1、函式: 封裝一個專門任務的步驟清單的程式碼段叫做函式 使用函式: 宣告 定義 和呼叫 2、宣告和定義函式的幾種方法 函式宣告:function sum(a,b){ return a+b} 函式表示式var sum = function(a,b){return

讀書筆記-計算機網路體系結構

計算機網路體系結構   計算機網路的各層及其協議的集合。換種說法,就是這個計算機網路及其構件所應完成的功能的精確定義。 一、網路協議   為進行網路中的資料交換而建立的規則、標準或約定。這些規則明確規定了所交換的資料的格式以及有關的同步(時序)問題。 三要素 (1)語法,資料

JavaScript複習筆記函式、分支結構和迴圈結構

1、函式: 封裝一個專門任務的步驟清單的程式碼段叫做函式 使用函式: 宣告 定義 和呼叫 2、宣告和定義函式的幾種方法 函式宣告:function sum(a,b){ return a+b} 函式表示式var sum = function(a,b){return a+

筆記 C#sql語句

fun 觸發器 收縮數據庫 bak cti 修改 hang chan ssa SQL語句大全刪除數據庫 drop database databasename SQL語句大全備份 --- 創建備份數據的 device USE master EXEC sp_addumpd

.net core 實踐筆記--EF連接Azure Sql

grand caf info mod soft 去掉 https lin als ** 溫馨提示:如需轉載本文,請註明內容出處。** 本文鏈接:https://www.cnblogs.com/grom/p/9902098.html   筆者使用了常見的三層架構,Api展

.net core 實踐筆記--EF連線Azure Sql

** 溫馨提示:如需轉載本文,請註明內容出處。** 本文連結:https://www.cnblogs.com/grom/p/9902098.html     筆者使用了常見的三層架構,Api展示層注入了Swagger,作為開發測試使用的文件介面,具體搭建教程網上資料很全,不在贅述。

T-SQL基礎之關聯查詢

在上篇博文中介紹了T-SQL查詢的基礎知識,本篇主要介紹稍微複雜的查詢形式。 表運算子 表運算子的作用是把為其提供的表作為輸入,經過邏輯查詢處理,返回一個表結果。SQL Server支援四個表運算子:JOIN、APPLY、PIVOT、UNPIVOT,其中JOIN是標準SQL中的運算子,APPLY、PIVO

SQL入門經典(第5版)學習筆記

1.判斷對錯:個人社會保險號碼,輸入格式為 '1111111111',它可以是下面任何一種資料型別:定長字元、變長字元、數值。錯 不能是數值 引號會轉換為字元 2.判斷對錯:數值型別的標度是指數值的總體長度。對 會自動補全 3.所有的SQL實現都使用同樣的資料型別嗎?不同 按需使用 4.下面定義的有效位

SQL總結連表查詢

目錄 3、外連線 連線查詢包括合併、內連線、外連線和交叉連線,如果涉及多表查詢,瞭解這些連線的特點很重要。 只有真正瞭解它們之間的區別,才能正確使用。 1、Union UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。 UNION 運算

Mybatis步步進階——SQL基本配置與執行

  Mybatis使用過程中,相對於hibernate更為靈活、簡潔之處就在於它利用mybatis封裝的標籤配置sql語句,在程式碼中載入配置檔案執行sql。咱採取“先做,再總結”方針,方便大家理解。

MySQL5.7效能優化系列——SQL語句優化2——子查詢-派生表-檢視--概述

章節內容: 使用Semi-join連線優化子查詢、派生表、檢視 使用Materialization優化子查詢 優化派生表、檢視 使用Exist 策略優化子查詢 概述 in或者any子查詢 MySQL查詢優化器具有不同的策略來評估子查詢。對於IN(

C# SQL封裝

c# sql封裝(二)接 C# SQL封裝(一)開始操作數據庫的測試 :using System;using System.Collections.Generic;using System.Linq;using System.Text;using DBDome.com;using DBDome.model;u

設計模式學習筆記 設計基本原則之【單一職責原則】

code 分享 開發者 實際應用 需要 ret ext file類 tor 單一職責原則(SRP: Single Responsibility Principle) 名詞解釋: 1) 職責:是指類變化的原因。 2) 職責擴散:就是因為某種原因,職責P被分化為粒度更細的職責P

mongodb的基本概念 學習筆記

不能 所有 訪問 數據庫 理解 基本上 其他 mongodb 連接 mongodb的基本概念1.文檔1.1定義:文檔是mongodb的核心概念。多個鍵及其關聯的值有序地放 置在一起便是文檔。 文檔可以理解為關系數據庫總的一行數據。1.2表示方法:{"greeting":"h