1. 程式人生 > 實用技巧 >01、MySQL基礎查詢、條件查詢、排序查詢

01、MySQL基礎查詢、條件查詢、排序查詢

目錄

DQL資料查詢語言

首先匯入外部的一個sql檔案。

輸入SQL檔案的位置,點選執行。匯入成功後,重新整理物件瀏覽器。

會發現多了一個myemployees的資料庫。

認識資料庫中的表

基礎查詢

# 進階一、基礎查詢
/*
語法:
select 查詢列表 from 表名;

1、查詢出來的結果集是一張虛擬表,不是真實存在的;
2、執行順序:①from字句; ②select字句;
3、查詢列表 可以是:欄位、表示式、常量、函式等
*/

-- 1、查詢常量
SELECT 12;

-- 2、查詢表示式
SELECT 100 % 3;
#1

-- 3、查詢單個欄位
SELECT `last_name` FROM `employees`;
#著重號``,代表列名、表名、庫名

-- 4、查詢多個欄位
SELECT `first_name`, `last_name`, `email` FROM `employees`;

-- 5、查詢所有欄位
SELECT * FROM `employees`;

#F12對齊格式

-- 6、查詢函式(呼叫函式,獲取函式的返回值)
SELECT DATABASE();
#myemployees

SELECT VERSION();
#5.7.31-log

SELECT USER();
#root@localhost

-- 7、起別名
-- 7.1、as 別名 as "別名" as '別名' 7.2、空格 別名
SELECT USER() AS "username";

SELECT USER() "user";

-- 8、concat(str1, str2, ...)函式
-- 需求:拼接first_name和last_name組合為一個,以fullname顯示
SELECT CONCAT(first_name, last_name) AS "fullname" FROM `employees`;
#在MySQL中不能使用+運算子來拼接字串,+在MySQL中只有加法運算

-- 9、distinct關鍵字
-- 需求:查詢員工所在的部門有哪些?
SELECT DISTINCT department_id FROM `employees`;
#上一次學distinct是在Stream流中,集合中Employee物件的去重

-- 10、查看錶的結構
DESC `employees`;
SHOW COLUMNS FROM `employees`;

-- 11、ifnull()函式,如果引數一為null,就顯示引數二
SELECT IFNULL(commission_pct, "空") FROM `employees`;

條件查詢

# 進階二、條件查詢
/*
語法:
select 查詢列表 from 表名 where 篩選條件;

1、查詢順序 ①from子句 ②where子句 ③select子句
2、篩選條件分類
2.1、按條件表示式(關係運算符:>、<、>=、<=、=、<>等)
2.2、按邏輯表示式(邏輯運算子:and、or、not)
2.3、模糊查詢:like、in、between...and、is null
*/
-- 1、按條件表示式篩選
#部門編號不是100的員工資訊
SELECT * FROM employees WHERE department_id <> 100;
#工資小於15000的姓名、工資
SELECT CONCAT(first_name, last_name) AS username, salary FROM employees WHERE salary < 15000;

-- 2、按邏輯表示式篩選
#部門編號不是50-100之間的員工姓名、部門編號、郵箱
SELECT last_name, department_id, email FROM employees WHERE department_id < 50 OR department_id > 100;
SELECT last_name, department_id, email FROM employees WHERE NOT (department_id >= 50 AND department_id <= 100);
#獎金率大於0.03或者員工編號在60和110之間的員工資訊
SELECT * FROM employees WHERE commission_pct > 0.03 OR (employee_id >= 60 AND employee_id <= 110);

-- 3、模糊查詢like,一般用於字元型資料的部分匹配,一般和萬用字元搭配使用
#以前學的萬用字元是在Java泛型中Class<?>的?
#常見的萬用字元:_匹配任意單個字元,%匹配任意多個字元[0,無窮)
#last_name中包含字元a的員工資訊
SELECT * FROM employees WHERE last_name LIKE '%a%';
#最後一個字元為e的員工資訊
SELECT * FROM employees WHERE last_name LIKE '%e';
#第一個字元為e的員工資訊
SELECT * FROM employees WHERE last_name LIKE 'e%';
#第三個字元為x的員工資訊
SELECT * FROM employees WHERE last_name LIKE '__x%';
#第二個字元為_的員工資訊
SELECT * FROM employees WHERE last_name LIKE '_\_%';
SELECT * FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';
#宣告$為轉義字元
#包含字元a和e的員工資訊
SELECT * FROM employees
WHERE last_name LIKE '%a%e%' OR '%e%a%';

-- 4、in
/*
用於查詢某欄位的值是否屬於指定的列表之內,in (常量值列表)
not in (常量值列表),不屬於指定的列表之內
*/
#部門編號是30、50、90的員工名和部門編號
SELECT last_name, department_id FROM employees WHERE department_id IN (30, 50, 90);
SELECT last_name, department_id 
FROM employees 
WHERE department_id = 30 OR department_id = 50 OR department_id = 90;
#工種編號不是IT_PROG或ST_CLERK的員工資訊
SELECT * FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK');

-- 5、between...and
/*
判斷某個欄位的值是否在某個區間
not between... and
*/
#部門編號是[30,90]之間的部門編號和員工姓名
SELECT last_name, department_id
FROM employees
WHERE department_id BETWEEN 30 AND 90;
#年薪不是10w-20w之間的員工姓名、工資、年薪
SELECT last_name, salary, (salary * 12 * (1 + IFNULL(commission_pct, 0))) AS "annualSalary"
FROM employees
WHERE (salary * 12 * (1 + IFNULL(commission_pct, 0))) NOT BETWEEN 100000 AND 200000;

-- 6、is null / is not null
#查詢沒有獎金的員工資訊
SELECT * FROM employees WHERE commission_pct IS NULL;
#查詢有獎金的員工姓名、工資和獎金率
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;

排序查詢

# 進階三、排序查詢
/*
語法:
select 查詢列表
from 表名
[where 篩選條件]
order by 排序列表

1、執行順序:①from子句 ②where子句 ③select子句 ④order by子句;
2、排序列表可以是單個欄位、多個欄位、表示式、別名、函式、列數以及以上的組合;
3、升序 asc ,預設
4、降序 desc
*/
-- 1、按單個欄位排序
#員工編號大於120,並按工資升序排列
SELECT * FROM employees WHERE employee_id > 120 ORDER BY salary ASC;
#員工編號小於120,並按工資降序排列
SELECT * FROM employees WHERE employee_id < 120 ORDER BY salary DESC;

-- 2、按表示式排序
#對有獎金率的員工按年薪降序排序
SELECT *, salary * 12 * (1 + IFNULL(commission_pct, 0)) AS annualSalary 
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary * 12 * (1 + IFNULL(commission_pct, 0)) DESC;

-- 3、按別名排序
SELECT *, salary * 12 * (1 + IFNULL(commission_pct, 0)) AS annualSalary 
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY annualSalary DESC;
#where 篩選表示式中不能用別名,原因是執行順序,別名是在select中寫的,所以在where執行時不能用別名

-- 4、按函式的返回值排序
#根據姓名的字元個數排序
SELECT last_name , LENGTH(last_name) len
FROM employees
ORDER BY len ASC;

-- 5、按多個欄位排序
#員工姓名、工資、部門編號,先按工資降序,再按部門編號升序
SELECT last_name, salary, department_id
FROM employees
ORDER BY salary DESC, department_id ASC;

-- 6、按列數排序
#按表中的第二列排序
SELECT * FROM employees ORDER BY 2 ASC;