文章目錄
- 1、什么是資料庫?什么是資料庫管理系統?什么是SQL?他們之間的關系是什么?
- 2、怎么在cmd里面使用命令啟動和關閉服務?
- 3、使用bin目錄下的mysql.exe 命令來連接mysql資料庫服務器
- 4、mysql常用命令:
- 5、資料庫當中最基本的單元是表:table
- 6、關于SQL陳述句的分類?
- 7、簡單查詢
- 7.1、查詢一個欄位
- 7.2、查詢多個欄位
- 7.3、查詢所有欄位
- 7.4、給查詢的列起別名
- 7.5、使用數學運算式
- 8、條件查詢
- 8.1、什么是條件查詢:
- 8.2、都有哪些條件符
- 9、排序
- 9.1、升序或降序
- 9.2、多個欄位排序
- 9.3、根據欄位的位置排序
- 9.4、關鍵字的執行順序
- 10、資料處理函式
- 10.1、單行處理函式
- 10.2、常見的單行處理函式
- 11、分組函式(多行處理函式)
- 11.1、分組函式在使用的時候需要注意
- 12、分組查詢
- 12.1、什么是分組查詢?
- 12.2、關鍵字的執行順序
- 結論:
- 12.3、使用having可以對分完組之后的資料進一步過濾,
- 13、大總結(單表查詢學完了)
1、什么是資料庫?什么是資料庫管理系統?什么是SQL?他們之間的關系是什么?
資料庫:
英文單詞DataBase,簡稱DB,按照一定格式存盤資料的一些檔案的組合,
顧名思義:存盤資料的倉庫,實際上就是一堆檔案,這些檔案中存盤了
具有特定格式的資料,
資料庫管理系統:
DataBaseManagement,簡稱DBMS,
資料庫管理系統是專門用來管理資料庫中資料的,資料庫管理系統可以
對資料庫當中的資料進行增刪改查,
常見的資料庫管理系統:
MySQL、Oracle、MS SqlServer、DB2、sybase等…
SQL:結構化查詢語言
程式員需要學習SQL陳述句,程式員通過撰寫SQL陳述句,然后DBMS負責執行SQL
陳述句,最終來完成資料庫中資料的增刪改查操作,
SQL是一套標準,程式員主要學習的就是SQL陳述句,這個SQL在mysql中可以使用,
同時在Oracle中也可以使用,在DB2中也可以使用,
2、怎么在cmd里面使用命令啟動和關閉服務?
語法:
net stop 服務名稱;
net start 服務名稱;
3、使用bin目錄下的mysql.exe 命令來連接mysql資料庫服務器
本地登錄命令(顯示撰寫密碼的形式):
mysql -u用戶名(root) -p密碼
本地登錄(隱藏密碼的形式):
mysql -u用戶名(root) -p(回車)
Enter password:(密碼)
4、mysql常用命令:
退出mysql
exit
查看mysql中有哪些資料庫
show databases;
選擇使用某個資料庫
use (資料庫名稱)
創建資料庫
create database (資料庫名稱);
查看mysql資料庫的版本號:
select version();
查看當前使用的資料庫
select database();
匯入資料
source (完整路徑名稱)
查看表結構
desc (表名);
注意:mysql命令是不見 “;” 不執行,";"表示結束
"\c"用來終止一條命令的輸入,
5、資料庫當中最基本的單元是表:table
什么是表table?
姓名 性別 年齡(列:欄位) --------------------------- 張三 男 20 ------->行(記錄) 李四 女 21 ------->行(記錄) 王五 男 22 ------->行(記錄)
資料庫當中是以表格的形式表示資料的,因為表比較直觀,
任何一張表都有行和列:
行(row):被稱為資料/記錄,
列(column):被稱為欄位,
6、關于SQL陳述句的分類?
分為:
DQL:
資料查詢語言(凡是帶有select關鍵字的都是查詢陳述句)
select...
DML:
資料操作語言(凡是對表當中的資料進行增刪改的都是DML)
insert delete update
insert 增
delete 刪
update 改
這個主要是操作表中的資料data,
DDL:
資料定義語言
凡是帶有create、drop、alter的都是DDL,
DDL主要操作的是表的結構,不是表中的資料,
create:新建,等同于增
drop:洗掉
alter:修改
這個增刪改和DML不同,這個主要是對表結構進行操作,
TCL:
不是王牌電視,
是事務控制語言
包括:
事務提交:commit;
事務回滾:rollback;
DCL:
是資料控制語言,
例如:授權grant、撤銷權限revoke....
7、簡單查詢
7.1、查詢一個欄位
select (欄位名) from (表名);
注意:
select 和 from 都是關鍵字
強調:
對于SQL陳述句來說,是通用的,
所有的SQL陳述句以“;”結尾,
另外SQL陳述句不區分大小寫,都行,
7.2、查詢多個欄位
使用逗號隔開 “,”
select (欄位名1),(欄位名2) from (表名);
7.3、查詢所有欄位
第一種方式:
select (欄位名1),(欄位名2),(欄位名3)…… from (表名);
第二種方式:
select * from (表名);
7.4、給查詢的列起別名
使用as關鍵字起別名
select (欄位名) as (別名) from (表名);
注意:
起別名只是將顯示的查詢結果列明顯示為 別名 ,原列名不會發生改變
記住:
select 陳述句是永遠都不會進行修改操作的,(因為只負責查詢)
as 關鍵字可以省略
select (欄位名) (別名) from (表名);
如果起別名的時候,別名里面有空格需要加 單引號 或者 雙引號
select (欄位名) '別 名' from (表名);
select (欄位名) "別 名" from (表名);
注意:
注意:在所有的資料庫當中,字串統一使用單引號括起來,
單引號是標準,雙引號在oracle資料庫中用不了,但是在mysql
中可以使用,
強調:
資料庫中的字串采用單引號括起來是標準的,雙引號不標準
7.5、使用數學運算式
欄位可以使用數學運算式,如:
select (年薪)* 12 from (表名)
8、條件查詢
8.1、什么是條件查詢:
不是將表中所有資料都查出來,是查詢出來符合條件的,
語法格式:
select (欄位名1),(欄位名2),(欄位名3)……
from (表名)
where (條件)
8.2、都有哪些條件符
基本的:
1、= 等于
2、<> 或 != 不等于
3、< 小于
4、<= 小于等于
5、> 大于
6、>= 大于等于
特殊的:
1、between … and … (兩個值,等同于 >= and <=)
2、in null 為 null (is not null 不為空)
注意:
在資料庫當中null不能使用等號進行衡量,需要使用is null
因為資料庫中的null代表什么也沒有,它不是一個值,所以不能使用
等號衡量,
3、and 并且
4、or 或者
注意:
and和or同時出現的話,會有優先級的問題
and優先級比or高,
以上陳述句會先執行and,然后執行or,
使用 小括號 避免優先級問題
5、in 包含,相當于多個 or (not in 不在這個范圍中)
使用 or
select (欄位名1),(欄位名2),(欄位名3)……
from 表名
where (欄位名1) = 'zhangsan' or (欄位名1) = 'lisi';
使用 in
select (欄位名1),(欄位名2),(欄位名3)……
from 表名
where (欄位名1) in('zhangsan','lisi');
注意:
in不是一個區間,in后面跟的是具體的值,
6、not 取非,主要用在 is 或 in 中
is null
is not null
in
not in
7、like
稱為模糊查詢,支持%或下劃線匹配
%匹配任意多個字符
下劃線:任意一個字符,
(%是一個特殊的符號,_ 也是一個特殊符號)
如:
找出名字以T結尾的?
select ename from emp where ename like '%T';
找出名字以K開始的?
select ename from emp where ename like 'K%';
找出第二個字每是A的?
select ename from emp where ename like '_A%';
找出第三個字母是R的?
select ename from emp where ename like '__R%';
注意:如果名字中有"_"
找出名字中有“_”的?
select name from t_student where name like '%_%'; //這樣不行,
mysql> select name from t_student where name like '%\_%'; // \轉義字符,
9、排序
9.1、升序或降序
使用 order by 進行排序,默認是升序 如:
select
(欄位名1),(欄位名2)
from
(表名)
order by
(用戶工資); // 默認是升序!!!
使用 desc 指定降序,如:
select
(欄位名1),(欄位名2)
from
(表名)
order by
(用戶工資) desc; // 降序
使用 asc 指定升序,如:
select
(欄位名1),(欄位名2)
from
(表名)
order by
(用戶工資) asc; // 升序
9.2、多個欄位排序
多個欄位排序使用逗號隔開,如:
select
(欄位名1),(欄位名2)
from
(表名)
order by
(用戶工資) asc,(用戶姓名) asc; // (用戶工資)在前,起主導,只有(用戶工 資)相等的時候,才會考慮啟用(用戶姓名)排序,
9.3、根據欄位的位置排序
用數字表示需要排序的列,如:
select (欄位名1),(字段名2)
from (表名)
order by 2; // 2表示第二列,
9.4、關鍵字的執行順序
關鍵字順序不能變:
select
…
from
…
where
…
order by
…
以上陳述句的執行順序必須掌握:
第一步:from
第二步:where
第三步:select
第四步:order by(排序總是在最后執行!)
10、資料處理函式
10.1、單行處理函式
單行處理函式的特點:一個輸入對應一個輸出,
和單行處理函式相對的是:多行處理函式,(多行處理函式特點:多個輸入,對應1個輸出!)
10.2、常見的單行處理函式
1、lower 轉換小寫
select lower((欄位名)) from (表名);
2、upper 轉換大寫
select upper((欄位名)) from (表名);
3、substr 取子串 (substr(別截取的字串,起始下標,截取的長度))
select substr((欄位名),(起始下標),(截取的長度)) from (表名);
4、concat 函式進行字串的拼接
select concat((欄位1),(欄位2)) from (表名);
欄位1 與 欄位2 進行字串拼接
5、length 取長度
select length((欄位名)) from (表名);
6、trim 去空格
select * from (表名) where (姓名) = trim(' 姓名');
使用 trim 去掉前后的空格
7、str_to_date 將字串轉換成日期
8、date_format 格式化日期
9、format 設定千分位
10、case…when…then…when…then…else…end
select (員工姓名),(員工崗位),(員工工資),
(case (員工崗位) when 'MANAGER' then (員工工資)*1.1 when 'SALESMAN' then (員工工資)*1.5 else (員工工資) end) as '員工工資'
from (表名);
當員工的作業崗位是MANAGER的時候,工資上調10%,當作業崗位是SALESMAN的時候,工資上調50%,其它正常,
(注意:不修改資料庫,只是將查詢結果顯示為工資上調)
11、round 四舍五入
select round(1236.567, 0) as result from (表名);//保留整數位,
select round(1236.567, 1) as result from (表名); //保留1個小數
select round(1236.567, 2) as result from (表名); //保留2個小數
select round(1236.567, -1) as result from (表名); // 保留到十位,
12、rand() 生成亂數
select round(rand()*100,0) from (表名);// 100以內的亂數
13、ifnull 可以將 null 轉換成一個具體值
ifnull是空處理函式,專門處理空的,
在所有資料庫當中,只要有NULL參與的數學運算,最終結果就是NULL,
select (工資) + (獎金) from (表名);
當獎金存在 null 的情況下與 工資相加 結果會為 null
注意:
NULL只要參與運算,最終結果一定是NULL,為了避免這個現象,需要使用ifnull函式,
ifnull函式用法:ifnull(資料, 被當做哪個值)
select (姓名), ((工資) + ifnull((獎金), 0)) * 12 as (年薪)
from (表名);
獎金為NULL的時候,將獎金當做0
11、分組函式(多行處理函式)
多行處理函式的特點:輸入多行,最終輸出一行,
5個:
count 計數
sum 求和
avg 平均值
max 最大值
min 最小值
注意:
分組函式在使用的時候必須先進行分組,然后才能用,
如果你沒有對資料進行分組,整張表默認為一組,
分組函式的用法:
//找出最高工資?
mysql> select max((工資)) from (表名);
//找出最低工資?
mysql> select min((工資)) from (表名);
//計算工資和:
mysql> select sum((工資)) from (表名);
//計算平均工資:
mysql> select avg((工資)) from (表名);
//計算員工數量?
mysql> select count((工資)) from (表名);
11.1、分組函式在使用的時候需要注意
1、分組函式自動忽略NULL,你不需要提前對NULL進行處理,
2、分組函式中count(*)和count(具體欄位)有什么區別?
count(具體欄位):表示統計該欄位下所有不為NULL的元素的總數,
count(*):統計表當中的總行數,(只要有一行資料count則++)
因為每一行記錄不可能都為NULL,一行資料中有一列不為NULL,則這行資料就是有效的,
3、分組函式不能夠直接使用在where子句中,
因為分組函式在使用的時候必須先分組之后才能使用,
where執行的時候,還沒有分組,所以where后面不能出現分組函式,
select sum((工資)) from 表名;
這個沒有分組,為啥sum()函式可以用呢?
因為 select 在 group by 之后執行,
4、所有的分組函式可以組合起來一起用,
select sum((工資)),min((工資)),max((工資)),avg((工資)),count(*)
from (表名);
12、分組查詢
12.1、什么是分組查詢?
在實際的應用中,可能有這樣的需求,需要先進行分組,然后對每一組的資料進行操作,
這個時候我們需要使用分組查詢,怎么進行分組查詢呢?
(假如計算每個部門的工資和,就要對部門進行分組)
select
...
from
...
group by
...
分組查詢使用 group by 子句
12.2、關鍵字的執行順序
select
...
from
...
where
...
group by
...
order by
...
以上關鍵字的執行順序:
- from
- where
- group by
- select
- order by
結論:
在一條select陳述句當中,如果有group by陳述句的話,
select后面只能跟:參加分組的欄位,以及分組函式,
其它的一律不能跟,
兩個欄位聯合分組使用逗號隔開
12.3、使用having可以對分完組之后的資料進一步過濾,
having 不能單獨使用,having 不能代替 where,having 必須
和 group by聯合使用,
13、大總結(單表查詢學完了)
select
...
from
...
where
...
group by
...
having
...
order by
...
以上關鍵字只能按照這個順序來,不能顛倒,
執行順序?
```執行順序 1. from 2. where 3. group by 4. having 5. select 6. order by ```
從某張表中查詢資料, 先經過where條件篩選出有價值的資料, 對這些有價值的資料進行分組, 分組之后可以使用having繼續篩選, select查詢出來, 最后排序輸出!
select后面只能跟:參加分組的欄位,以及分組函式,
其它的一律不能跟,
兩個欄位聯合分組使用逗號隔開
如有錯誤還請大佬指出
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/353510.html
標籤:其他
