SELECT 語句的作用是從資料庫中返回信息一、SELECT基本語句的編寫
1.SELECT 語句作用
列選擇(投影操作) :能夠使用 SELECT 語句的列選擇功能選擇表中的列,這些列是我們想要用查詢返回 的。當我們查詢時,可在選擇查詢的表中指定的列。
行選擇(選擇操作):能夠使用 SELECT 語句的行選擇功能選擇表中的行,這些行是我們想要用查詢返回 的。能夠使用不同的標準限制所看見的行。
連接(多表操作):能夠使用 SELECT 語句的連接功能來集合數據,這些數據雖然被存儲在不同的表中, 但是我們可以通過連接查詢到該數據。
2.SELECT 語句基本結構
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table; SELECT 確定哪些列。FROM 確定哪張表。
例如,在command window窗口下輸入命令:
select *from departments;用來查找表departments下所有的列;select departments_name from departments;用來查看表departments中的列departments_name;
基本 SELECT 語句: 在最簡單的形式中,SELECT 語句必須包含下面的內容: 一個 SELECT 子句,指定被顯示的列。
一個 FROM 子句,指定表,該表包含 SELECT 子句中的欄位列表 。
在語法中:SELECT 是一個或多個欄位的列表
* 選擇所有的列
DISTINCT 關鍵字表示禁止重複
column|expression 選擇指定的欄位或表達式
alias 給所選擇的列不同的標題
FROM table 指定包含列的表
3.選擇操作(投影操作)
選擇所有列:SELECT * FROM table;
選擇指定的列: SELECT columnName,columnName FROM table;
4.SQL語句語法要求
SQL 語句對大小寫不敏感
SQL 語句可以寫成一行或多行
關鍵字不能簡寫或分開折行
子句通常放在不同的行
縮進用於增強可讀性
二、SELECT語句的算術表達式
用算術運算符創建數字和日期數據的表達式。
注意:如果對日期進行計算,我們只能對 DATE 和 TIMESTAMP 數據類型使用加和減操作。
1.優先級:
乘法和除法比加法和減法的優先級高
相同優先級的運算符從左到右計算
圓括號用於強制優先計算,並且使語句更清晰
2.例子:
計算 employees 表中的員工全年薪水加 100 以後的薪水是多少?
select employee_id , first_name ,salary *12 +100 from employees;
計算 employees 表中的員工薪水加 100 以後的全年薪水是多少?
select employee_id,first_name ,(salary+100)*12 from employees;
三、定義空值
空值是一個未分配的、未知的,或不適用的值。
空值不是 0,也不是空格。
如果一行中的某個列缺少數據值,該值被置為空值。空值和 0 或者空格不相同。0 是 一個數字,而空格是一個字符。任何數據類型的列都可以包含空值。可是,某些約束,如, NOT NULL 和 PRIMARY KEY,防止在列中使用空。
包含空值的算術表達式計算結果為空。
例如:在利用佣金計算年薪時,部分沒有佣金的員工的年薪返回為空值:
select last_name ,12*salary*commission_pct from employees;
四、定義列別名
列別名:
改變列標題的名字
緊跟在列名後面 – 在列名和別名之間可以有選項 AS 關鍵字
如果別名中包含有空格、或者特殊字符、或者大小寫敏感,要求用雙引號
在 SELECT 列表中的列名後面指定別名,列名和別名之間用空格分開。默認情況下, 別名標題用大寫字母顯示。如果別名中包含空格或者特殊字符(例如 # 或 &),或者 大小寫敏感,將別名放在雙引號 (「」) 中。
舉例:
查詢 employees 表中的 last_name,commission_pct 並將佣金列名改為 comm。
方式一:select last_name ,commission_pct as comm from employees; 將要改的名字用as連接。方式二:select last_name name ,commission_pct comm from employees;直接把名字跟在列名後面,用空格隔開;其中不同的列用逗號隔開。
計算所有員工的全年薪水,將列名修改」Annual Salary」。
方 式 一 :select last_name name ,12*salary as "Annual Salary" from employees; 方式二:select last_name name ,12*salary "Annual Salary" from employees;
五、連字運算符
連字運算符:
連接列或者字符串到其它的列
用兩個豎線表示 (||)
構造一個字符表達式的合成列
我們能夠用連字運算符 (||) ,進行列與列之間、列與算術表達式之間或者列與常數值 之間的連接,來創建一個字符表達式。連字運算符兩邊的列被合併成一個單個的輸出列。
舉例:
將 employees 表中的 LAST_NAME 和 JOB_ID 合併到一個單個的輸出列中,並且指定 列別名 Employees。
select last_name || job_id as "Employee" from employees;
六、文字字符串
文字字符串是包含在 SELECT 列表中的一個字符串,一個數字或者一個日期
日期和字符的文字字符串值必須用單引號括起來
每個文字字符串在每行輸出一次
文字字符串不是列名或別名。對每個返回行列印一次。任意格式文本的文字字符串能夠 被包含在查詢結果中,並且作為 SELECT 列表中的列處理。日期和字符文字 必須 放在單 但引號 (' ') 中;數字不需要。
舉例:
顯示所有僱員的名字和工作代碼,使用 is a 連結查詢結果。列標題用 Employee Details。
select last_name || ' is a ' || job_id as "Employee Details" from employees;
七、去除重複行
在 SELECT 語句中用 DISTINCT 關鍵字除去相同的行。為了在結果中除去相同的行, 在 SELECT 子句中的 SELECT 關鍵字後面緊跟 DISTINCT 關鍵字。
舉例:
在 Employees 表中查詢 department_id 並去除重複數據。
select distinct department_id from employees;
八、select語句練習題
1.在下面的語句中有 4 個編碼錯誤,你能找出他們嗎?SELECT employee_id, last_name sal x 12 ANNUAL SALARY FROM employees;
答案:1 在 employees 表中沒有 sal 列,應該是 salary。
2 乘法運算符是「*」而不是「x」。
3 如果別名中包含空格,則需要在別名兩側添加雙引號。
4 在 last_name 後少一個逗號。
2.顯示 DEPARTMENTS 表的結構。選擇表中的所有數據。
答案:顯示錶結構: desc departments;
查詢所有數據:select * from departments;
3.創建一個查詢,顯示每個僱員的 last name, job code, hire date, 和 employee 號,employee 號顯示在第一列, 給 HIRE_DATE 列指定一個別名 STARTDATE 。
答案:select employee_id ,last_name,job_id, hire_date startdate from employees;
4.創建一個查詢從 EMPLOYEES 表中顯示唯一的工作 代碼。
答案:select distinct job_id from employees;
5.顯示 last_name,用 job_ID 連接,用逗號和空格分開, 用 Employee and Title 作為列名。
答案:select last_name || ', ' ||job_id 「Employee and Title」 from employees;