SQL語法之DQL


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》專題

目錄:

最新更新(每天二十三點前更新):

關聯文章:

參考資料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章