Java 8---SELECT簡單查詢
阿新 • • 發佈:2018-12-22
導讀
1.簡單單表查詢
2.查詢子句之ORDER BY:排序
3.查詢子句之WHERE:條件子句
資料庫指令碼檔案: 字尾:sql 註釋:-- 可以把各個物件的建立(表,序列等),以及資料的新增放到一個指令碼中 執行指令碼: 方式1:start 指令碼路徑 注意:start後面要跟一個空格 方式2:@指令碼路徑 注意:@後面不需要空格 從指令碼的上面到下面逐行執行,一行出錯,後面繼續執行 如果執行指令碼錯誤,建議先刪除使用者,重新建立後再執行指令碼 管理員刪除使用者:DROP USER 使用者名稱 CASCADE;
簡單單表查詢
語法:
1)SELECT 列名1,列名2,...,列名n
FROM 表名;
從某張表查詢指定的列
注意:
1.執行流程
FROM,確定資料來源-->SELECT,確定哪些列
2.如果查詢的是一個表的全部列,可以用*代替,
查詢出來的列順序與定義時一直,可讀性不高,不建議使用
3.查詢時,數值型,日期型可以做算術運算,+,-,*,/
eg3:查詢每個員工如果加薪1000後的薪資
SELECT id,salary+1000
FROM s_emp;
4.關於空值:代表的是未知的,不確定的,沒有值 空值運算後結果還是空值 空值轉換函式: 數值型列:NVL(列,數值) :如果這個列值為空,則用這個數值代替 文字型列:NVL(列,'文字'):如果這個列值為空,則用這個文字代替
eg4:求每個員工包含提成後的月工資總額
SELECT id,salary*(1+NVL(commission_pct,0)/100)
FROM s_emp;
5.查詢時可以給查詢的列或表示式取別名
SELECT 列名 [AS] 別名,列名...
FROM 表名;
別名如果需要保持原來的大小寫,或者別名中包含一些特殊字元,比如空格可以用雙引號括起來
eg5:求每個員工包含提成後的月工資總額,取別名為sal SELECT id,salary*(1+NVL(commission_pct,0)/100) AS sal FROM s_emp; SELECT id,salary*(1+NVL(commission_pct,0)/100) AS "sal" FROM s_emp;
6.查詢某個列時,查詢去重後的結果,distinct
eg6:查詢公司的所有部門名,相同的只保留一份
SELECT DISTINCT name
FROM s_dept;
查詢補充:
可以直接查詢一個常量或者常量表達式:
SELECT 1+2 FROM dual;(查詢結果就是1+2的結果3)
此時,為了滿足SELECT...FROM...,FROM 後面跟的dual,可以稱它為虛表
SELECT sysdate FROM dual;
sysdate:當前系統時間,date型別
所以dual的作用就是查詢某些表示式的結果或者某些函式的作用
查詢子句之ORDER BY:排序
語法:
SELECT ...
FROM ...
ORDER BY 列名 ASC|DESC,列名 ASC|DESC ...;
注意:
1.執行流程:FROM->SELECT,此時確定了結果集->ORDER BY把資料改變位置,排序
2.ASC:升序,DESC:降序,省略預設是升序
3.按照多列排序,首先先按照第一列排序,如果第一列相等再按第二列排序...
4.null值預設為最大
5.ORDER BY子句永遠在查詢的最後,排序永遠是最後執行
eg1:查詢每個員工的編號,名字,部門編號,並按照部門編號升序排序
SELECT id,first_name,dept_id
FROM s_emp
ORDER BY dept_id ASC;
SELECT id,first_name,dept_id
FROM s_emp
ORDER BY dept_id DESC;
SELECT id,first_name,dept_id
FROM s_emp
ORDER BY dept_id;
eg2:查詢每個員工的編號,名字,部門編號,薪資,要求按照部門編號升序排序,
如果部門相同,則按照薪資降序排序
SELECT id,first_name,dept_id,salary
FROM s_emp
ORDER BY dept_id ASC,salary DESC;
查詢子句之WHERE:條件子句
語法:
SELECT
FROM
WHERE 條件
ORDER BY;
注意:
1.執行流程:FROM,確定表->WHERE,確定表的行->SELECT,確定列,結果集確定->ORDER BY,排序
2.WHERE子句緊跟在FROM子句之後
3.WHERE篩選,逐行判斷,如果當前行條件滿足,則結果集中包含,否則不包含
4.條件中的運算子:
比較運算子:
>,>=,<,<=,=(等於),!=,<>(不等於)
BETWEEN...AND...:在...和...之間, 閉區間
IN, IN(點值1,點值2,...)
IS NULL:是空的,空代表未知的,不確定的,不能用=判斷
LIKE:用來模糊查詢的
萬用字元:
%:可以代表任意的0個或多個字元
_:可以代表任意1個字元
如果需要%,_表示原本的含義,可以利用escape指定轉義字元
eg:查詢以_a開頭的名字
SELECT first_name
FROM s_emp
WHERE first_name LIKE '\_a%' escape '\';(表示以_a開頭的名字,轉義字元只對其後緊挨著的一個字元有效)
NOT BWTWEEN...AND...:不在...和...之間
NOT IN
IS NOT NULL:不是空的
NOT LIKE
邏輯運算子:
NOT:非 取反
AND:與,都成立,結果才成立
OR:或,只要有一個成立,結果就成立
優先順序:NOT>AND>OR
拼接:||
eg1:查詢出所有薪資高於1200的員工編號,薪資
SELECT id,salary
FROM s_emp
WHERE salary>1200;
eg2:查詢薪資在1100到1450之間的所有員工編號,名字,薪資
SELECT id,first_name,salary
FROM s_emp
WHERE salary BETWEEN 1100 AND 1450;
eg3:查詢部門編號為41或44或45的所有員工編號,部門編號
SELECT id,dept_id
FROM s_emp
WHERE dept_id IN(41,44,45);
eg4:查詢沒有提成的員工的編號,名字
SELECT id,first_name
FROM s_emp
WHERE commission_pct IS NULL;
eg5:查詢以a結尾的名字
SELECT id,first_name
FROM s_emp
WHERE first_name LIKE '%a';
'B%':以B開頭的
'%b%':包含b的
'_b%':第二個字元是b
'_b':長度是2,第二個字元是b
eg6:查詢薪資低於1000或者薪資高於1500的所有員工id,薪資
SELECT id,salary
FROM s_emp
WHERE salary<1000 OR salary>1500;
eg7:查詢在41或44號部門,並且薪資高於1100的員工id,薪資
SELECT id,dept_id,salary
FROM s_emp
WHERE (dept_id=41 OR dept_id=44) AND salary>1100;
eg8:查詢每個員工的姓名,顯示的格式為:名,姓
SELECT first_name||','||last_name
FROM s_emp;