DB: DataBase (數據庫, 實際上在硬碟上以檔案的形似存在)
DBMS: Database Management System(數據庫管理系統,常見的有:MySQL, Oracle DB2 Sybase, SqlServer…)
SQL: 結構化查詢語言, 是一門標準通用語言, 標準的sql語句適用於所有的數據庫產偶
DBMS 負責執行 sql 語句, 通過執行 sql 語句來操作 db 中的數據
DBMS -----(執行)> SQL 語句 -(操作)-> DB
表(table)是數據庫的基本組成單元, 所有的數據都以表格的格式組織 一個表包括行和列:
行: 被稱爲數據/記錄(date) 列: 被稱爲欄位(column) 字串(varchar)
每個欄位名包含哪些資訊: 欄位名, 數據型別, 相關約束
DQL(數據查詢語言):
查詢語句, 凡是 select 語句都是 DQL
DML(數據操作語言):
insert /delete /update 對錶當中的數據進行增刪改
DDL(數據定義語言):
create drop alter , 對錶結構的增刪改
TCL(事務控制語言):
commit 提交事務, rollback 回滾事務
DCL(數據控制語言):
grant 授權, revoke 復原許可權等
xxxxxxx.sql, 這個檔案以sql結尾,這樣的檔案被稱爲 「sql指令碼」。
當一個檔案的擴充套件名是.sql,並且該檔案中編寫了大量的sql語句,我們稱這樣的檔案爲sql指令碼。
注意:直接使用source命令可以執行sql指令碼。
sql指令碼中的數據量太大的時候,無法開啓,請使用source命令完成初始化。
刪除數據庫:drop database xxxxx;
select datebase(); 檢視當前使用的是哪個數據庫
select version(); 檢視mysql的版本號
\c 命令,結束一條語句
exit 命令,退出mysql
show create table emp; 檢視建立表的語句
語法格式:
select 欄位1,欄位2,欄位名,... from 表名;
提示:
select ename,sal*12 as yearsal from emp;
select ename,sal*12 as '年薪' from emp;
注意:
標準sql語句中要求字串使用單引號括起來。倏然mysql支援雙引號,儘量別用。
as關鍵字可以省略。
查詢所有欄位?
select * from emp; // 實際開發中不建議使用*,效率較低!!!
語法格式:
select 欄位,欄位... from 表名 where 條件;
執行順序:先from,然後where,最後select
between…and… 使用時左小右大[…~…]
between…and…還可以使用在字串方面[…~…)
模糊查詢like //在模糊查詢當中,必須掌握兩個特殊的符號,一個是 % ,一個是 _
select ename , sal from emp order by sal; //升序(預設)
select ename , sal from emp order by sal asc; //升序
select ename , sal from emp order by sal desc; //降序
select 執行順序
欄位 ------>3
from
表名 ------->1
where
條件 ------->2
order by
… ------->4
order by 是最後執行的。
count 計數
sum 求和
avg 平均值
max 最大值
min 最小值
記住: 所有的分組函數都是對"某一組"數據進行操作。
記住:所有的分組函數都是對"某一組"數據進行操作。
select sum(sal) from emp; // 找出工資總和
select max(sal) from emp; // 找出最高工資
select min(sal) from emp; // 找出最低工資
select avg(sal) from emp; // 找出平均工資
select count(*) from emp; // 找出總人數
分組函數一共5個。
分組函數還有另一個名字:多行處理常式。
多行處理常式的特點:輸入多行,最終輸出的結果是1行
ifnull()空處理常式
ifnull(可能爲null的數據,被當做什麼處理)
分組函數自動忽略NULL
重點:所有的數據庫都是這樣規定的,只要有NULL參與的運算結果一定是NULL。
單行處理常式
什是單行處理常式?
輸入一行,輸出一行。
count(*)和count(具體的某個欄位),他們有什麼區別?
count(*): 不是統計某個字中數據的個數,而是統計總記錄條數。(和某個欄位無關)
count(comm): 表示統計comm欄位中不爲NULL的數量總數量。
group by : 按照某個欄位或者某些欄位進行分組。
having : having是對分組之後的數據進行再次過濾。
注意: 分組函數一般都會和group by聯合使用,這也是爲什麼它被稱爲分組函數的原因。
並且任何一個分組函數(count sum acg max min)都是group by語句執行結束之後纔會執行的。
當一條sql語句沒有group by的話,整張表的數據會自成一組。
select ename,max(sal),job from emp group by job;
以上在mysql當中,查詢結果是有的,但是結果沒有意義,在Oracle數據庫當中會報錯。語法錯誤。
記住一個規則: 能跟分組函數和參與分組欄位。