第二章 SQL基礎
SQL分類
- DDL:數據定義語言。定義不同的數據段、數據庫、表、列、索引等數據庫對象的定義。常用的create、drop、alter等
- DML:數據操縱語句。用於添加、刪除、更新和查詢數據庫記錄,並檢查數據的完整性。常用的insert、delete、update和select等
- DCL:數據控制語句。用於控制不同數據段直接的許可和訪問級別的語句。這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別。主要的語句關鍵字包括 grant、revoke 等
SQL語句
show :查看數據庫創建的所有的數據表
show create table
:查看全面的表定義ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]:修改表類型
[FIRST | AFTER col_name]爲MySQL的擴展可選項,作用爲修改字段在表中的位置
ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]:增加表字段
ALTER TABLE tablename DROP [COLUMN] col_name:刪除表字段
ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition
[FIRST|AFTER col_name]:字段改名
ALTER TABLE tablename RENAME [TO] new_tablename:表改名
distinct 關鍵字:查詢不重複的記錄,如select distinct deptno from emp;
DESC 和 ASC 是排序順序關鍵字,DESC 表示按照字段進行降序排列,ASC 則表示升序
排列,如select * from emp order by deptno,sal desc;
SELECT ……[LIMIT offset_start,row_count]:LIMIT關鍵字,讓只顯示一部分,offset_start 表示記錄的起始偏移量,row_count 表示顯示的行數,如select * from emp order by sal limit 1,3(從第二條開始顯示三條)
聚合操作:
SELECT [field1,field2,……fieldn] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY field1,field2,……fieldn
[WITH ROLLUP]]
[HAVING where_contition]
- fun_name 表示要做的聚合操作,也就是聚合函數,常用的有 sum(求和)、count(*)(記錄數)、max(最大值)、min(最小值)
- GROUP BY 關鍵字表示要進行分類聚合的字段,比如要按照部門分類統計員工數量,部門就應該寫在 group by 後面。
- WITH ROLLUP 是可選語法,表明是否對分類聚合後的結果進行再彙總。
- HAVING 關鍵字表示對分類後的結果再進行條件的過濾。
having和where的區別
區別在於 having 是對聚合後的結果進行條件的過濾,而 where 是在聚合前就對記錄進行過濾,如果邏輯允許,我們儘可能用 where 先過濾記錄,這樣因爲結果集減小,將對聚合的效率大大提高,最後再根據邏輯看是否用 having 進行再過濾。
例子:
select deptno,count(1) from emp group by deptno with rollup:既要統計各部門人數,又要統計總人數
select deptno,count(1) from emp group by deptno having count(1)>1:統計人數大於 1 人的部門
count()函數:
關於mysql中的count()函數_數據庫_wendychiang1991的博客-CSDN博客
表連接:
作用:當需要同時顯示多個表中的字段
分類:內連接和外連接,它們之間的最主要區別是內連接僅選出兩張表中
互相匹配的記錄,而外連接會選出其他不匹配的記錄。
外連接分類:
- 左連接:包含所有的左邊表中的記錄和右表符合條件的記錄
- 右連接:包含所有的右邊表中的記錄和左表符合條件的記錄
圖解各種連接:
圖解MySQL 內連接、外連接、左連接、右連接、全連接…太多了_數據庫_plg17的專欄-CSDN博客
Mysql-- 內連接、左連接、右連接以及全連接查詢_數據庫_zjt980452483的博客-CSDN博客
子查詢:
作用:當我們查詢的時候,需要的條件是另外一個 select 語句的結果
關鍵字:in、not in、=、!=、exists、not exists 等
如:select * from emp where deptno in(select deptno from dept)
從 emp 表中查詢出所有部門在 dept 表中的所有記錄
注意:子查詢和表連接之間的轉換主要應用在兩個方面:
- MySQL 4.1 以前的版本不支持子查詢,需要用表連接來實現子查詢的功能
- 表連接在很多情況下用於優化子查詢
記錄聯合:
作用:將兩個表的數據按照一定的查詢條件查詢出來後,將結果合併
到一起顯示出來
關鍵字:union 和 union all
區別:UNION ALL 是把結果集直接合並在一起,而 UNION 是將
UNION ALL 後的結果進行一次 DISTINCT,去除重複記錄後的結果
例子:
不去重: select deptno from emp union all select deptno from dept;
去重:select deptno from emp union select deptno from dept;