文章目錄
SQL語法之DQL
DQL:Data Query Language,數據查詢語言,算是SQL的入門級語言,也是最常用到的SQL語言。
基礎查詢
語法
SELECT
查詢列表
FROM
表名;
特點
- 查詢列表可以是:表中的字段、常量值、表達式、函數。
- 查詢結果是一個虛擬的表格。
實戰
# 選擇要操作的表
USE myemployees;
1.查詢表中的單個字段
SELECT
last_name
FROM
employees;
2.查詢表中的多個字段
SELECT
`last_name`,
#``着重號,作用區分字段與關鍵字
email,
salary
FROM
employees;
3.查詢表中的所有字段
SELECT
*
FROM
employees;
4.查詢常量值(SQL是不區分字符和字符串)
SELECT
100;
SELECT
'tom';
說明: 字符型和日期類型的常量值必須用單引號引起來。
5.查詢表達式
SELECT
100 % 98;
6.查詢函數
SELECT
VERSION();
7.起別名
起別名的好處:
- 便於理解。
- 如果要查詢的字段有重名情況,使用別名可以區分開來。
說明: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.去重(DISTINCT)
#案例:查詢員工表中涉及到的所有的部門編號
SELECT DISTINCT
department_id
FROM
employees;
9.“+”的作用
- 在SQL中只能當作運算符,不能當作連接符。
- 兩個操作數都爲數值型,則作加法運算,如
SELECT 100 + 90;
- 其中一方爲字符型,試圖將字符型數值轉換成數值型,如果轉換成功則繼續作加法運算,如
SELECT '100' + 90;
- 如果轉換失敗則將字符型數值轉換爲0,再進行加法運算,如
SELECT 'tomato' + 90;
- 只要其中一方爲null,則結果比爲null,如
SELECT null + 90;
10.字符串的拼接(CONCAT(字符1,字符2,…)函數)
#案例:查詢員工名和姓連接成一個字段,並顯示爲 姓名
SELECT
CONCAT(last_name, " ", first_name) AS 姓名
FROM
employees;
注意: 拼接字段時,有一個字段值爲NULL,結果即爲NULL。因此,我們需要引入IFNULL(字符,指定的值)函數解決這一問題。
SELECT
CONCAT(
employee_id,
",",
first_name,
",",
email,
",",
IFNULL(commission_pct, 0)
) AS "out put"
FROM
employees;
補充: ISNULL(字符)函數,判斷某字段或表達式是否爲null,如果是返回1,否則返回0。
條件查詢
語法
SELECT 3
查詢列表
FROM 1
表名
WHERE 2
篩選條件;
補充: SQL語句的執行順序並不一定是按照從上到下依次執行的。
分類
1. 按條件表達式篩選
條件運算符:>、<、=、!=/<>(兩種符號都標識不等於,推薦使用後者,後者爲SQL標準符號)、>=、<=、<=>(安全等於)
2. 按邏輯表達式篩選
作用:用於連接條件表達式
邏輯運算符:&&/AND、||/OR、!/NOT,(斜槓前後的符號含義完全相同,但均推薦後者,原因同上,不再贅述。)
3. 模糊查詢(也屬於條件表達式)
模糊查詢的運算符:LIKE、BETWEEN AND、IN、IS NULL、IS NOT NULL
實戰
1. 按條件表達式篩選
- 案例1:查詢工資大於12000的員工信息
SELECT
*
FROM
employees
WHERE
salary > 12000;
- 案例2:查詢部門編號不等於90的員工名和部門編號
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id <> 90;
- 案例3:查詢工資爲12000的員工信息
SELECT
*
FROM
employees
WHERE
salary <=> 12000;
2.按邏輯表達式篩選
- 案例1:查詢工資在10000到20000之間的員工名、工資以及獎金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary >= 10000
AND salary <= 20000;
- 案例2:查詢部門編號不在90到110之間的,或者工資高於15000的員工信息
SELECT
*
FROM
employees
WHERE
department_id < 90
OR department_id > 110
OR salary > 15000;
SELECT
*
FROM
employees
WHERE
NOT (
department_id >= 90
AND department_id <= 110
)
OR salary > 15000;
3.模糊查詢(也屬於條件表達式)
LIKE
特點:一般和通配符搭配使用,不僅限於字符型,也適用於數值類型。
通配符說明:
% 任意多個字符,包含0個字符。
_ 任意單個字符。
- 案例1:查詢員工名中包含字符a的員工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE "%a%";
- 案例2:查詢員工名中第三個字符爲c,第五個字符爲h的員工名和工資
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE "__c_h%";
- 案例3:查詢員工名中第二個字符爲_的員工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_\_%';
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';
說明: 當SQL語句中需要使用特殊字符時,可以使用“\”進行轉義;也可以使用自定義符號配合ESCAPE達到這一需求。(推薦使用後者)
BETWEEN AND
特點:
1.使用BETWEEN AND可以提高語句的簡潔度。
2.包含臨界值。
3.兩個臨界值不能調換順序。
- 案例1:查詢員工編號在100到120之間的員工信息
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100
AND 120;
IN
含義:判斷某字段的值是否屬於IN列表中的某一項。
特點:
1.使用IN提供語句簡潔度。
2.IN列表的值類型必須一致或兼容。
- 案例1:查詢工種編號是IT_PROG、AD_VP、AD_RES中的員工的名稱、工種編號
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROG'
OR job_id = 'AD_VP'
OR job_id = 'AD_RES';
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN ('IT_PROG', 'AD_VP', 'AD_RES');
IS NULL,IS NOT NULL
說明:=或<>不能用於判斷NULL值,IS NULL或IS NOT NULL可以判斷NULL值。
- 案例1:查詢沒有獎金的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
- 案例2:查詢有獎金的員工名和獎金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
對比一下:IS NULL和<=>
- IS NULL 僅僅可以判斷NULL值,但是可讀性較高,建議使用。
- <=> 既可以判斷null值,又可以判斷普通數值,但是可讀性較低。
《帶你走進MySQL》專題
目錄:
最新更新(每天二十三點前更新):
關聯文章:
參考資料:
-
視頻資料:
MySQL基礎+高級篇-尚硅谷 P1~P15
P1—P15《第一章 初識MySQL》、P16—P36《第二章 SQL語法之DQL》 -
網絡資料:
Markdown語法圖文全面詳解(10分鐘學會)