04 mysql DQL語句 基礎篇
DQL
DQL(Data Query Language):資料查詢語言,用來查詢資料庫中的資料,不會對資料庫中的資料進行改變。
select 欄位名1 as 別名,欄位名2 as 別名,欄位名3 as 別名 FROM 表名 [WHERE –> GROUP BY –>HAVING–> ORDER BY];
[]中括號中的內容是一些過濾條件或者操作,
欄位名可以使用數學表示式,
as的作用是將查詢的欄位或者表示式重新命名,as可省略,用空格將欄位名和別名隔開即可,欄位名也可以使用中文字元(需用單引號引出)
簡單查詢:
從表中查詢欄位
select 欄位1,欄位2 from 表名;
如果要查詢全部欄位,使用*號表示所有欄位,如下
select * from 表名;
注意:不建議使用*,因為會先將其編譯成欄位,然後再去查詢,影響效能
as關鍵字 ,可以給欄位起別名,用as 或者省略as 都可以
select 欄位1 別名1,欄位2 as 別名2,欄位3*12 as 別名3 from 表名;
示例:
先建立好表,如圖所示
進行簡單查詢示例:
-- 查詢所有資訊 SELECT * FROM employee; -- 查詢員工名字,工作 SELECT employeename,job FROM employee; -- 查詢員工名字,工作,年薪(月薪*12 使用別名annualsalary) SELECT employeename,job,salary*12 AS annualsalary FROM employee; -- 查詢員工名字(使用別名ename),工作,年薪(月薪*12 使用別名annualsalary) SELECT employeename AS ename,job,salary*12 annualsalary FROM employee;
條件查詢
如需有條件地從表中選取資料,可將 where 子句新增到 select 語句中。其中where要放到from 表名 的後面,也可以運用於 SQL 的 DELETE 或者 UPDATE 命令,對於條件中欄位是字元型別的,記得加引號
查詢語句中你可以使用一個或者多個表,表之間使用逗號, 分割,並使用WHERE語句來設定查詢條件
你可以使用 AND 或者 OR 指定一個或多個條件
where語句操作符
= 等號,檢測兩個值是否相等,如果相等返回true (A = B) 返回false。
<>, !=
> 大於號,檢測左邊的值是否大於右邊的值, 如果左邊的值大於右邊的值返回true (A > B) 返回false。
< 小於號,檢測左邊的值是否小於右邊的值, 如果左邊的值小於右邊的值返回true (A < B) 返回 true。
>= 大於等於號,檢測左邊的值是否大於或等於右邊的值, 如果左邊的值大於或等於右邊的值返回true (A >= B) 返回false。
<= 小於等於號,檢測左邊的值是否小於於或等於右邊的值, 如果左邊的值小於或等於右邊的值返回true (A <= B) 返回 true。
between … and … 在什麼什麼範圍之間,包括兩個端點的值
is null 選擇欄位值為null的資料時,可以用該表示式,還有is not null
and 表示且,可以在where後面可以新增多個限制條件
or 表示或,只要滿足多項條件中的一項條件即可
and和or表示式的優先順序 and優先順序高於or。不確定優先順序時,用小括號把你想要的優先順序高的表示式括起來
in (值1,值2,...)滿足括號裡的一項值即可,表示選中某欄位的值是括號裡的值,可以採用or來替代,但是使用in會更簡潔一些,同樣not in表示某欄位值不在括號中的資料
like 模糊查詢,在資料量較大的情況下,使用like會影響效能,其中%表示通配0個或者多個字元, _表示通配一個任意字元
示例:
-- 查詢工資等於3000的員工編號,姓名,工資
SELECT employeenumber,employeename,salary FROM employee WHERE salary =3000;
-- 查詢工作是'SALESMAN'的員工姓名,工資,工作
SELECT employeename,salary ,job FROM employee WHERE job='SALESMAN';
-- 查詢工作是薪水不等於300的員工編號,姓名,薪水
SELECT employeenumber,employeename,salary FROM employee WHERE salary !=3000;
-- 同上
SELECT employeenumber,employeename,salary FROM employee WHERE salary <>3000;
-- 使用and連線兩個條件 ,查詢薪水大於等於1600並且小於等於3000的員工編號,姓名,工資
SELECT employeenumber,employeename,salary FROM employee WHERE salary>=1600 AND salary<=3000;
-- 使用between and 查詢工資大於等於1600且小於等於3000的員工編號,姓名,工資
SELECT employeenumber,employeename,salary FROM employee WHERE salary BETWEEN 1600 AND 3000;
-- 查詢補貼comm欄位為null的員工編號,姓名,工資,補貼
SELECT employeenumber,employeename,salary ,comm FROM employee WHERE comm IS NULL;
-- 查詢補貼comm欄位不為null的員工編號,姓名,工資,補貼
SELECT employeenumber,employeename,salary,comm FROM employee WHERE comm IS NOT NULL;
-- and連線兩個或多個條件,表示並且
SELECT employeenumber ,employeename,salary,comm FROM employee WHERE salary>=2500 AND job='MANAGER';
-- or 連線兩個或多個條件,滿足一個即可,表示或
SELECT employeenumber ,employeename,job,comm FROM employee WHERE job='MANAGER' OR comm IS NOT NULL;
-- and 和or 的優先順序,下行表示查詢工資大於1600且在部門編號為20的,或者部門編號為30的,員工姓名,編號,工資
SELECT employeename,departmentnumber,salary FROM employee WHERE salary>1600 AND departmentnumber =20 OR departmentnumber =30;
-- 下行表示查詢 工資大於1600 並且部門編號是20或30 的員工姓名,部門編號,薪水
SELECT employeename,departmentnumber,salary FROM employee WHERE salary>1600 AND (departmentnumber =20 OR departmentnumber =30);
-- in 查詢工作是'MANAGER'或者'SALESMAN'的員工編號,姓名,工作,補貼
SELECT employeenumber ,employeename,job,comm FROM employee WHERE job IN ('MANAGER' ,'SALESMAN');
-- not in 查詢工作不是'MANAGER'或者'SALESMAN'的員工編號,姓名,工作,補貼
SELECT employeenumber ,employeename,job,comm FROM employee WHERE job NOT IN ('MANAGER' ,'SALESMAN');
-- 查詢薪水不是1600,也不是3000的員工編號,姓名,工作,補貼
SELECT employeenumber ,employeename,salary,comm FROM employee WHERE salary NOT IN (1600 ,3000);
-- like模糊查詢 查詢員工姓名中最後一個字元是'S'的員工編號,員工姓名,薪水,補貼
SELECT employeenumber ,employeename,salary,comm FROM employee WHERE employeename LIKE '%S';
-- 查詢員工姓名第一個字元是'M'的員工編號,姓名,薪水,補貼
SELECT employeenumber ,employeename,salary,comm FROM employee WHERE employeename LIKE 'M%';
-- 查詢員工姓名的第二個字元是'A'的員工編號,員工姓名,薪水,補貼
SELECT employeenumber ,employeename,salary,comm FROM employee WHERE employeename LIKE '_A%';
-- 查詢員工姓名中有一個字元是'A'的員工編號,姓名,薪水,補貼
SELECT employeenumber ,employeename,salary,comm FROM employee WHERE employeename LIKE '%A%';
參考:小猴子視訊