1. 程式人生 > 其它 >2、DQL語言

2、DQL語言

2、DQL語言

DQL(Data Query Language)資料查詢語言

2.1.基礎查詢

語法:select 查詢列表 from 表名;

注:①起別名:select 查詢列表 as 別名 from 表名;

②去重:select distinct 查詢列表 from 表名;

③著重號" "用來區分關鍵字和欄位

2.2.條件查詢

語法:select 查詢列表 from 表名

where 篩選條件;

篩選條件:①按條件篩選,條件運算子> < != >= <=

     ②按邏輯表示式篩選,邏輯運算子 and(與) or(或) not(非)

     ③模糊查詢 like between and in is null is not null

注:①%為萬用字元,表示任意多個字元,包含0個字元,通常與like 搭配使用;_也為萬用字元,表示任意單個字元

  ②安全等於<=>,用於判斷是否等於,相當於=,可用於判斷null值

例1: 查詢工資大於12000的員工資訊

select * from employees

where salary>12000;

例2:查詢員工姓名包含字元a的員工資訊

select * from employees

where last_name like '%a%';

例3:查詢員工編號在100-120之間的員工資訊

select * from employees

where employee_id between 100 and 120;

例4:查詢員工的工種編號為 IT、AD、SQL中的一個的員工名和工種編號

select last_name, job_id from employees

where job_id in('IT','AD','SQL');

例5:查詢沒有獎金的員工名和獎金率

select last_name,commision_pact from employees

where commision_pact is null;

2.3.排序查詢

語法:select 查詢列表 from 表名

where 篩選條件

   order by 排序列表 asc/desc;

注:①asc表示升序,desc表示降序,不寫預設asc升序

②order by 一般放在最後,limit字句除外

③order by 可支援單個欄位、多個欄位、表示式、函式、別名進行排序

④排序除了order by 還有sort by,distribute by,cluster by

例6:查詢員工的姓名、部門號、年薪,按年薪降序,按姓名升序

select last_name,department_id,salary*12*(1+ifnull(commision_pact,0)) 年薪

from employees

order by 年薪 desc,last_name asc;

2.4常見函式

字元函式:length(),表示獲取位元組的個數

      concat(),表示拼接字元

      upper(),lower(),表示轉換大小寫

      substr(),表示擷取字串,索引從1開始

      instr(),表示子串第一次出現的索引,如果找不到返回0

      trim(),表示去前後空格,中間的不能去

     repalce(),表示替換

數學函式:round(),四捨五入

     ceil(),向上取整;floor(),向下取整

     truncate(數值,小數點後保留位數),截斷

     mod(被除數,除數),取餘

日期函式:now(),返回當前系統日期+時間

     str_to_date(),將日期格式的字元轉化為指定格式日期

     date_format(),將日期轉化為字元

其他函式:versin(),版本號;database(),資料庫

流程控制函式:if(條件表示式,真值,假值)

       case函式:語法一  case  要判斷的表示式

                  when  常量1  then  要顯示的值1

                  ……

                  else  要顯示的值n

                  end;

            語法二   case  

                  when  條件1  then  要顯示的值1

                  ……

                  else  要顯示的值n

                  end  case;

分組函式:sum()、avg()、max()、min()、count()

2.5分組查詢

語法1:select 分組函式 from 表名

where 篩選條件

   group by 分組列表  #分組前查詢,分組列表可為多個欄位

   order by  子句;

語法2:select 分組函式 from 表名

where 篩選條件

   order by  子句

   having by 分組列表  #分組後查詢;

2.6連線查詢(多表查詢)

SQL99標準的語法:select 查詢列表 

         from 表1 別名

         連線型別 jion 表2 別名

         on 連線條件

      [where 篩選條件];

分類:內連線、左外連線、右外連線、全外連線

   內連線:查詢交集部分  select 查詢列表 

               from 表1 別名A

               inner jion 表2 別名B

               on A.key=B.key;

   左外連線:查詢左邊主表A  select 查詢列表 

                 from 主表1 別名A

                 left jion 從表2 別名B

                 on A.key=B.key;

   右外連線:查詢右邊主表B  select 查詢列表 

                 from 從表1 別名A

                 right jion 主表2 別名B

                 on B.key=A.key;

   全連線:查詢表A和B   select 查詢列表 

                 from 表1 別名A

                 full jion 表2 別名B

                 on A.key=B.key;

2.7 子查詢

含義:出現在其他語句的select查詢語句,稱為子查詢或內查詢

分類:select後面僅僅支援標量子查詢

   from後面支援表子查詢

   where或having後面支援標量子查詢,列子查詢,行子查詢

   exists後面支援表子查詢

例1:查詢最低工資大於50號部門最低工資的部門id和最低工資

①查詢50號部門最低工資

select min(salary)

from employees

where department_id=50;

②組合起來

select department_id,min(salary)

from employees

group by department_id

having min(salary)>(

select min(salary)

from employees

where department_id=50;

);

例2:查詢每個部門的員工數

select d.*,(

    select count(*)

    from employees e

    where e.department_id=d.department_id;

) 員工數

from department d;

例3:查詢每個部門的平均工資的等級

①查詢每個部門的平均工資

select avg(salary),department_id

from employees

group by department_id;

②組合起來

select ag_dep.*,g.grade_level

from(

select avg(salary),department_id

from employees

group by department_id;

) ag_dep

inner jion job_grades g

on ag_dep.ag between lowest_sal and highest_sal;

2.8分頁查詢

語法:select 查詢列表

   from 表

   limit offset,size;  #offset為起始索引,從0開始;size為要顯示的條目數,limit子句要放在查詢語句最後

例:查詢有獎金的員工資訊,顯示工資最高的前10名

select *

from employess

where commison_pct is not null

order by salary desc

limit 10;

2.9 聯合查詢

語法:查詢語句1

   union

   查詢語句2

   ……

特點:要查詢的結果來自多表;要求查詢語句的列一致,型別和順序一致;union預設去重,union all 可以包含重複項

例:查詢中國使用者男性資訊和外國使用者男性資訊

select c_id,c_name,c_sex

from china

where c_sex="男"

union

select t_id,t_name,t_gender

from tokoyo

where t_gender="male";