01、MySQL基礎查詢、條件查詢、排序查詢
阿新 • • 發佈:2020-07-22
目錄
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;