mysql中怎么實現查詢操作
這篇文章將為大家詳細講解有關mysql中怎么實現查詢操作,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
1、選擇所有的記錄
select * from table_name;
其中*表示表中的所有字段。
2、查詢不重復的記錄
用關鍵字distinct
select distinct 字段名 from 表名;
3、條件查詢
用關鍵字where
select * from 表名 where 條件;
where后面的條件是一個字段的比較,可以使用=、>、<、>=、<=、!=等比較運算符;多個條件還可以使用or、and等邏輯運算。
4、排序和限制
用關鍵字order by desc(降序), asc(升序),limit(排序結果顯示一部分)
order by后面可以跟多個不同的排序字段,并且每個排序字段可以有不同的排序順序。
例如:把emp表中的記錄按照工資sal的高低順序排序。
select * from emp order by sal;
select * from emp order by sal,deptno desc;(sal升序,septno降序)
先按第一個字段排序,當第一個字段相同時,按照第二個字段排序。
select······limit offset_start, row_count;
offset_start表示起始偏移量,默認值為0。 row_count表示顯示的行數。
例如:select * from emp order by sal limit 1,3;
顯示前3條記錄,起始偏移量為1,從第二條記錄開始顯示。
order by 和limit 通常一起使用來控制記錄的分頁顯示。
5、聚合
很多情況下,用戶需要一些匯總操作,例如統計整個公司的人數或者每個部門的人數。
語法:
select 字段1,字段2.。。函數名 from 表名 where where_condition1 group
by 字段11,字段12 with rollup having where_condition2;
函數名表示要做的聚合操作,就是聚合函數,常用的有sum(求和)、count(*)(記錄數)、max(最大值)、min(最小值)。
group by 關鍵字表示要進行分類聚合的字段、
having 關鍵字表示對分類后的結果在進行條件的過濾。
having和where的區別是having是對聚合后的結果進行條件的過濾,而where是在聚合前就對記錄進行過濾,如果邏輯允許,我們可以用where先進行過濾,這樣結果集變小了,將對聚合的效率大大的提高,最后在根據邏輯看是否用having進行再過濾。
select sum(sal), max(sal), min(sal) from emp;
6、表連接
當需要同時顯示多個表中的字段時,就可以用表連接來實現這樣的功能。
從大類上分,表連接分為內連接和外連接,它們之間的最主要的區別是內連接僅選出兩張表中互相匹配的記錄,而外連接會會選出其他不匹配的記錄。我們最常用的是內連接。
例如:查詢出所有雇員的名字和所在的部門名稱,因為雇員名稱和部門分別放在表emp和表dept中,因此,需要使用表連接來進行查詢。
select ename, deptname from emp, dept where emp.deptno=dept.deptno;
(ename是表emp中的字段,deptname是dept表中的字段)
外連接又分為左鏈接和右連接(關鍵字left join和 right join)
左連接:包含所有的左邊表中的記錄甚至是右邊表中沒有和他匹配的記錄。
右連接:包含所有的右邊表中的記錄甚至是左邊表中沒有和他匹配的記錄。
例如:select ename, deptname from emp left
join dept on emp.deptno=dept.deptno;
select ename, deptname from dept right join emp on emp.deptno=dept.deptno;
ename是表emp中的字段,deptname是dept表中的字段。 就是包含表emp中的所有記錄。 以上兩條語句等價。
7、字查詢
在某些情況下,當進行查詢的時候,需要的條件是另外一個select語句的結果,這個時候,就要用到子查詢。用于子查詢的關鍵字主要包括in、not in、=、!=、exists、not exists等。
select * from emp where deptno in (select deptno from dept);
(表示的意思就是就表emp中的所有記錄,除去dept表對應的部門不存在的刪掉。)
在某些情況下,子查詢可以轉化成表連接。例如,上面的語句可以寫成:
select emp.* from emp, dept where emp.deptno=dept.deptno;
8、記錄聯合
我們經常會碰到這樣的應用,將兩個表的數據按照一定的查詢條件查詢出來后,將結果合并到一起顯示出來。這個時候,就需要用到union和 union all關鍵字來實現這樣的功能。union和union all的區別:union all 是把結果集合并在一起,而union是將union all后的結果進行一次distict,去除重復記錄。
select * from table1 union| union all select * from table2;
例如:
① select deptno from emp union
all select deptno from dept;
② select deptno from emp union
select deptno from dept;
①中的記錄將會有重復記錄,②中沒有重復記錄。
關于mysql中怎么實現查詢操作就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。