SQL語言的學習
DQL語言的學習:(查詢)
基本的SELECT語句
進階1:基礎查詢
/*
語法:
select 查詢列表 from 表名;
類似於:System.out.println(列印東西);
特點:
1、查詢列表可以是:表中的欄位、常量值、表示式、函式
2、查詢的結果是一個虛擬的表格
*/
—— —— —— —— —— —— —— —— —— —— —— —— —— —— —— ——
USE myemployees;
- 1.查詢表中的單個欄位
SELECT last_name FROM employees;
-
2.查詢表中的多個欄位
SELECT last_name,salary,email FROM employees; -
3.查詢表中的所有欄位
- 方式一:
SELECT
employee_id
,
first_name
,
last_name
,
phone_number
,
last_name
,
job_id
,
phone_number
,
job_id
,
salary
,
commission_pct
,
manager_id
,
department_id
,
hiredate
FROM
employees ;
*方式二:
SELECT * FROM employees; - 方式一:
-
4.查詢常量值
SELECT 100;
SELECT 'john'; -
5.查詢表示式
SELECT 100%98; -
6.查詢函式
SELECT VERSION();
- 7.起別名
/*
①便於理解
②如果要查詢的欄位有重名的情況,使用別名可以區分開來
*/
-
方式一:使用as
SELECT 100%98 AS 結果;
SELECT last_name AS 姓,first_name AS 名 FROM employees; -
方式二:使用空格
SELECT last_name 姓,first_name 名 FROM employees; -
案例:查詢salary,顯示結果為 out put
SELECT salary AS "out put" FROM employees; -
8.去重
-
案例:查詢員工表中涉及到的所有的部門編號
SELECT DISTINCT department_id FROM employees; -
9.+號的作用
/*
java中的+號:
①運算子,兩個運算元都為數值型
②連線符,只要有一個運算元為字串
mysql中的+號:
僅僅只有一個功能:運算子
select 100+90; 兩個運算元都為數值型,則做加法運算
select '123'+90;只要其中一方為字元型,試圖將字元型數值轉換成數值型
如果轉換成功,則繼續做加法運算
select 'john'+90; 如果轉換失敗,則將字元型數值轉換成0
select null+10; 只要其中一方為null,則結果肯定為null
*/
- 案例:查詢員工名和姓連線成一個欄位,並顯示為 姓名
SELECT CONCAT('a','b','c') AS 結果;
SELECT
CONCAT(last_name,first_name) AS 姓名
FROM
employees;
—— —— —— —— —— —— —— —— —— —— —— —— —— —— —— ——
進階2:條件查詢
/*
語法:(先執行from,後執行where,最後執行select*)
select
查詢列表
from
表名
where //此處的where相當於Java中的if
篩選條件;
—— —— —— —— —— —— —— —— —— —— —— —— —— —— —— ——
-
分類:
一、按條件表示式篩選簡單條件運算子:> < = != <> >= <=
二、按邏輯表示式篩選
邏輯運算子:
作用:用於連線條件表示式
&& || !
and or not&&和and:兩個條件都為true,結果為true,反之為false
||或or: 只要有一個條件為true,結果為true,反之為false
!或not: 如果連線的條件本身為false,結果為true,反之為false三、模糊查詢
like
between and
in
is null
*/
-
一、按條件表示式篩選
- 案例1:查詢工資>12000的員工資訊
SELECT
*
FROM
employees
WHERE
salary>12000;
-
案例2:查詢部門編號不等於90號的員工名和部門編號
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id<>90; -
二、按邏輯表示式篩選
- 案例1:查詢工資z在10000到20000之間的員工名、工資以及獎金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000 AND salary<=20000; - 案例2:查詢部門編號不是在90到110之間,或者工資高於15000的員工資訊
SELECT
- 案例1:查詢工資z在10000到20000之間的員工名、工資以及獎金
FROM
employees
WHERE
NOT(department_id>=90 AND department_id<=110) OR salary>15000;
- 三、模糊查詢
/*
like
between and
in
is null|is not null
*/
-
1.like
/*
特點:
①一般和萬用字元搭配使用
萬用字元:
% 任意多個字元,包含0個字元
_ 任意單個字元
*、 -
案例1:查詢員工名中包含字元a的員工資訊
select
*
from
employees
where
last_name like '%a%';#abc
-
案例2:查詢員工名中第三個字元為e,第五個字元為a的員工名和工資
select
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__n_l%'; -
案例3:查詢員工名中第二個字元為_的員工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_\(_%' ESCAPE '\)';
- 2.between and
/*
①使用between and 可以提高語句的簡潔度
②包含臨界值
③兩個臨界值不要調換順序
*/
- 案例1:查詢員工編號在100到120之間的員工資訊
SELECT
*
FROM
employees
WHERE
employee_id >= 120 AND employee_id<=100;
----------------------
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 120 AND 100;
- 3.in
/*
含義:判斷某欄位的值是否屬於in列表中的某一項
特點:
①使用in提高語句簡潔度
②in列表的值型別必須一致或相容
③in列表中不支援萬用字元
*/
- 案例:查詢員工的工種編號是 IT_PROG、AD_VP、AD_PRES中的一個員工名和工種編號
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';
------------------
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');
4、is null
/
=或<>不能用於判斷null值
is null或is not null 可以判斷null值
*/
- 案例1:查詢沒有獎金的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
* 案例1:查詢有獎金的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
----------以下為×
SELECT
last_name,
commission_pct
FROM
employees
WHERE
salary IS 12000;
安全等於 <=>
* 案例1:查詢沒有獎金的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=>NULL;
- 案例2:查詢工資為12000的員工資訊
SELECT
last_name,
salary
FROM
employees
WHERE
salary <=> 12000;
- is null pk <=>
IS NULL:僅僅可以判斷NULL值,可讀性較高,建議使用
<=> :既可以判斷NULL值,又可以判斷普通的數值,可讀性較低
———————————————————————————————————————————————