1. 程式人生 > >04 mysql DQL語句 基礎篇

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) 返回 true。
>    大於號,檢測左邊的值是否大於右邊的值, 如果左邊的值大於右邊的值返回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%';

參考:小猴子視訊