MySQL資料庫數據庫學習之查詢語句

第一:select 語句包含的對象

select 表中存在的列、內置函數【upper(),round()等】、邏輯運算【+-*/等】、新加列【‘’單引號內引用名】 from

表名;

select emp_id ,'ACTIVE',emp_id * 3.14,upper(lname) from `employee`;

註意:from 表名;語句可以省略,例如:執行一個內建函數,或者簡單表達事

select user(),database();

第二:列的別名【as 關鍵字】

意思:原本表中列名含義模糊,或者對操作的描述

select emp_id ,'ACTIVE' as status,
emp_id *3.14 as empid_x_pi,
upper(lname) as last_name_upper
from `employee`;

怎麼樣實現別名:在原始表名後面加加上關鍵字as即可;新加入的列,也同樣操作,比如樓上的‘ACTIVE' as status 語句。

註意:關鍵字在mysql命令行中可以省略。

第三:去除重復行【distinct 關鍵字】

select distinct cust_id from `account`;

註意:該關鍵字distinct 消耗較多資源,因此不建議隨意使用

第四:from 語句

from語句設定瞭查詢中所使用的表,以及鏈接這些表的方式。

寬泛設定下,存在三種類型的表:

1、永久表 create table 語句創建

2、臨時表 select 子查詢語句返回的表

3、虛擬表 使用create view 子句所創建的視圖

a、子查詢語句產生的表【相當於嵌套select語句】

語法:select 別名.列名1,別名.列名2,別名.列名3 from (select 列名1,列名2,列名3,列名4,,from 表名)as 別名;

select e.emp_id,e.fname,e.lname from (select emp_id,fname,lname,start_date,title from 
`employee`) as e;

外圍查詢需要通過別名來引用 子查詢;

b、視圖

視圖:實際上不擁有任何數據,隻是行為表現的像一個表,針對視圖的查詢,實際上針對視圖設定的查詢。

1、設定視圖

create view  employee_vw  as
select emp_id,fname,lname,YEAR(start_date) as start_year from `employee`;

語法 :create view 視圖名(列1,列2,,,) as select 。。from 表名;

如果 視圖名(列1,列2,,,)中沒設定括號的列名,那麼直接引用子查詢的列名。

以上語句,對原始表start_date語句應用瞭個取年份的year函數,並且設置瞭 start_year的別名。

2、查詢視圖

select emp_id,start_year from employee_vw;

查詢操作時,可以直接把視圖當作表來處理。

c、from 子句 表連接

如果 from 語句中出現瞭多個表,那麼語句要包含各表之間的連接條件。

語法:select 表1.列1,表1.列2 ,,,表2.列1 as 別名 from

表1 INNER JOIN 表2

ON 表1.某列=表2.某列;

1、語法中表1,表2既可以引用全名,如下

select employee.emp_id ,employee.fname,
employee.lname,department.name as dept_name 
from employee INNER JOIN department ON employee.dept_id = department.dept_id;

2、也可以在from 語句中設定別名

select e.emp_id,e.fname,e.lname,d.name as dept_name
from `employee` as e inner join `department` as d on e.dept_id = d.dept_id;

連接兩張表的機制,此處時join方式;

兩張表的連接條件由ON 語句指定,本例是 on employee.dept_id = department.dept_id確定。

第五:where 語句

提取符合條件的行,過濾不需要的行。

1、單個過濾條件

select * from `employee` where title='Teller';

2、多個過濾條件,即通過與或非語句 設定 過濾條件。

select * from `employee` where title='Teller' and start_date > '2006-1-1';

3、同時使用and or操作符,則需要使用圓括號()

select * from `employee` where (title='Head Teller' and start_date >'2006-1-1') or (title='Teller' and start_date >'2007-1-1');

混合使用不同操作符,需要用圓括號來分隔成組條件。

第六:group by 語句 having子句

之前語句隻是提出數據,並沒有做任何加工,本節語句能夠以where語句類似的方式對分組數據進行加工過濾。

select d.name,count(e.emp_id) as num_employee from
`department` as d inner join `employee` as e on d.dept_id = e.dept_id
group by d.name having count(e.emp_id)>2;

分組計算各部門雇員人數,並且隻提取雇員大於2的部門。

group by 條件,以某種條件分組,having 子句,則對分組條件,進一步限制。

第七:order by 子句

1、對原始列數據/根據列數據計算的表達式結果,進行排序。

select open_emp_id,product_cd from account order by open_emp_id,product_cd;

結果,先按照open_emp_id排序,在按照product_cd排序。默認的都是升序。

2、關鍵字:desc 降序,asc升序。

select open_emp_id,product_cd from account order by open_emp_id desc ,product_cd desc; 

3、根據表達式進行排序

排序的條件並沒有出現在查詢內容中

select * from `customer` order by right(fed_id,3);

根據fed_id列是值,應用right()函數,取最後3位數字進行排序。

4、根據占位符排序

如果根據select 子句中的列來排序可以用占位符。

註意:如果是用表中其他的列或者表達式,肯定就不能應用占位符。

select emp_id,title,start_date,fname,lname
from `employee`
order by 2,5;

You May Also Like