帶你走進MySQL數據庫(MySQL入門詳細總結一)

導讀:關於MySQL用三篇文章帶你進入MySQL的世界。

1.MySQL

MySQL開源免費,MySQL 是一個關係型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 公司。MySQL 是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。。MySQL 是最流行的關係型數據庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關係數據庫管理系統)應用軟件之一。
在這裏插入圖片描述
1.免安裝版MySQL的安裝
2.安裝版MySQL的安裝

2.MySQL的使用

MySQL的登錄:
1.在doc窗口下輸入:mysql -uroot -p加密碼。(也可以敲回車後輸入密碼,這樣密碼不可見)。
2.MySQL服務默認端口號:3306。
3.修改root密碼:
在這裏插入圖片描述
在這裏插入圖片描述
4.卸載MySQL

  • 雙擊原來的安裝包,然後點擊remove。卸載。
  • 手動刪除Program File中的MySQL目錄。
  • 手動刪除 ProgramDate目錄(一般爲隱藏)中的MySQL目錄。

3.MySQL概述

1.sql,DB,DBMS分別是什麼?他們之間是什麼關係?

  • DB:DataBase(數據庫,數據庫實際上在硬盤上以文件的形式存在)
  • 數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。
    2.什麼是表?
  • 表:table
  • 表是數據庫的基本組成單元,所有的數據都以表格的形式組織,目的是可讀性強。
  • 一個表包括行和列:
    行:被稱爲數據/記錄(data)
    列:被稱爲字段。(column)
  • 每個字段應該包括哪些屬性?
    字段名,數據類型,相關的約束。
    如:學號(int) 姓名(varchar)
  • RDBMS 即關係數據庫管理系統(Relational Database Management System)的特點:
    1.數據以表格的形式出現
    2.每行爲各種記錄名稱
    3.每列爲記錄名稱所對應的數據域
    4.許多的行和列組成一張表單
    5.若干的表單組成database
    RDBMS 術語
    在我們開始學習MySQL 數據庫前,讓我們先了解下RDBMS的一些術語:
  • 數據庫: 數據庫是一些關聯表的集合。
  • 數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
  • 列: 一列(數據元素) 包含了相同類型的數據, 例如郵政編碼的數據。
  • 行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
  • 冗餘:存儲兩倍數據,冗餘降低了性能,但提高了數據的安全性。
  • 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
  • 外鍵:外鍵用於關聯兩個表。
  • 複合鍵:複合鍵(組合鍵)將多個列作爲一個索引鍵,一般用於複合索引。
  • 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
  • 參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證數據的一致性。
    3.MySQL主要學習SQL語句,SQL語句怎麼分類呢?
  • DQL(數據查詢語言):查詢語句,凡是select語句都是DQL.
  • DML(數據操作語言):insert delete update,對錶當中的數據進行增刪改。
  • DDL(數據定義語言):create drop(刪除) alte(修改),對錶結構的增刪改。
  • TCL(事物控制語言):commit提交事務,rollback回滾事務。
  • DCL(數據控制語言):qrant授權,revoke撤銷權限。

4.導入數據

第一步:登錄mysql數據庫管理系統。(mysql -uroot -p)
第二步:查看有哪些數據庫
show databases;命令。(不是SQL語句,屬於MySQL命令)
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
±-------------------+
第三步:創建屬於我們自己的數據庫
create database xingkong;(這個是mysql命令)
第四步:使用xingkong數據庫
use xingkong;(mysql命令)
第五步:查看當前使用的數據庫有哪些表格(mysql命令)
show tables;(查看exam數據庫中的表:show tables from exam;)
第六步:初始化數據
source 路徑和文件名稱;(這裏自定義了一個數據庫,一下出現的代碼都是基於此)
5.xingkong.sql,這個文件以sql結尾,這樣的文件被稱爲“sql腳本”。
什麼是sql腳本?

  • 當一個文件的擴展名爲.sql,並且該文件中編寫了大量的sql語句,我們稱這樣的爲sql腳本。
  • 注意:直接使用source命令可以執行sql腳本。
  • sql腳本中的數據量太大的時候,無法打開,請使用source命令完成初始化。
    6.刪除數據庫:
    drop database xingkong;
    7.查看錶結構:
    desc dept;部門表(自定義表)
    desc emp;員工表(自定義表)
    desc salgrade;工資等級表(自定義表)
    8.表中的數據:
    select * from emp;
    select *from dept;
    9. 查看當前用的數據庫:
    select database();
    select version();版本
    10.常用命令
  • \c 命令 結束一條語句。
  • exit 命令,退出mysql;
    11.查看創建表的語句:
    show create table emp;

5.sql語句

1.查詢

1.簡單的查詢語句(DQL)

  • 語法格式:select 字段名1,字段名2,字段名3,…from 表名;
  • 提示:任何一個sql語句以“;”結尾。
  • sql語句不區分大小寫。(但對錶中存儲的數據就不一樣,mysql語法嚴格)
    *** 查詢的時候字段可以參與數學運算:**
    select ename,sal*12 as (新名字) from emp;(ename,sal 爲字段,emp爲表)名字如果爲中文需要用單引號括起來。(as關鍵字可以省略)
  • 字符串使用單引號括起來。
  • 查詢所有字段?
    select * from emp;(emp爲自定義的表),效率較低。
    2.條件查詢
  • 語法格式:selcet 字段,字段,… from 表名 where 條件;條件爲字符串需要單引號括起來。
    執行順序爲:from,然後where,最後select;
    不等於:<>符合。或!=。
  • select ename ,sal from emp where sal between 11 and 500;
    between …and 使用的時候必須左小右大,也可以使用在字符串方面。數字【左閉右閉】。
    在這裏插入圖片描述
    select ename from emp where ename between ‘a’ and ‘c’;首字母【左閉右開】。
  • 在數據庫中NULL不是一個之,代表什麼也沒有,不能用等號衡量,只能使用 is null 或者 is not null;(0和null表示的東西不一樣)
  • 找出工作崗位是xxx和xxxx的員工:
    用or:select ename,job from emp where job = ‘xxx’ or job=‘xxxx’;可以加小括號來搞定優先級。
    where job in (‘xxx’,‘xxxx’);不是一個區間,直接是一個值。
    not in 表示不在。
  • 模糊查詢like?
    找出名字當中含有嘉的?(模糊查詢需掌握兩個特殊的符號,一個是%,一個是_)
    %代表任意多個字符,_代表任意一個字符。
    如:*查找含A的(ename爲自定義字段,emp爲自定義表)
    select ename from emp where ename like ‘%O%’;
    *查找名字第二個字母是A的?
    select ename from emp where ename like ‘_A%’;
    *找出名字有下劃線的?(用下劃線轉義)
    select ename from emp where ename like ‘%\ _%’;
    *找出名字中最後一個是T的?
    select ename from emp where like ‘%T’;

2.排序(升序,降序)

1.按照工資升序,找出員工名和薪資?(默認升序)
select
ename,sal
from
emp
order by
sal;
注意:默認爲升序,指定升序:asc,指定降序desc
select ename, sal from emp order by sal desc;
2.按照工資的降序排列,當工資相同的時候,按照名字的升序排序。
select ename,sal from emp order by sal desc,ename asc;
多個排序,靠前面的字段更加重要,去主導作用,後面的字段可能都用不上。
3.找出工作崗位是xxxx的員工,並且要求按照薪資的降序排列。
select
ename,job,sal
from
emp
where
job =‘xxxx’
order by
sal desc;
order by是最後執行的。先from,後where,再select,最後order by.

3.分組函數

另稱:多行處理函數。

  • 一.那什麼是單行處理函數呢?
    輸入一行,輸出一行。
  • 計算每個員工的年薪?
    select ename ,(8000+NULL)*12 as yearsal from emp;(數據庫中數學表達式中有NULL,結果一定是NULL)
  • ifnull()空處理函數怎麼用?
    ifnull(可能爲null的數據,被當作什麼處理):屬於單行處理函數。
    select ename ,ifnull(comn,0)as comm from emp;
    二.分組函數(多行處理函數)
    1.count 計數
    2.sum 求和
    3.avg 平均值
    4.max 最大值
    5.min 最小值

    一共就這五個。
    注意:所有的分組函數都是對“某一組”數據操作。
  • 找出工資總和?
    select sum(sal) from emp;
  • 找出最高工資?
    select max(sal) from emp;
  • 找出平均工資?
    select avg(sal) from emp;
  • 找出總人數?
    select count(*) from emp;
    select count(ename) from emp;
  • 輸入多行,最終輸出爲一行。
  • 分組函數自動忽略NULL。(不會統計)
    所以:select sum(sal) from emp where sal is not nul;是沒有必要的。
    select count (comm)from emp;(comm自定義字段,含義:津貼)
  • 找出工資高於平均工資的員工?
  • select ename,sal from emp where sal>avg(sal);//這種寫法是錯誤的。
    原因:**SQL語句當中有一個語法規則,分組函數不可以直接使用在where字句當中。**因爲 group by是在where之後執行的。所以說還沒有分組,不能用分組函數,沒有group by 語句也自成一組,即有缺省的group by。
    因此:解決問題的方法爲:
    第一步:找出平均工資
    select avg(sal) from emp;
    第二步:找出高於平均工資的員工。
    select ename,sal,from emp where sal >2073.xx
    綜合起來:select ename ,sal from emp where sal>(select avg(sal) from emp);
    ±------±--------+
    | ename | sal |
    ±------±--------+
    | JONES | 2975.00 |
    | BLAKE | 2850.00 |
    | CLARK | 2450.00 |
    | SCOTT | 3000.00 |
    | KING | 5000.00 |
    | FORD | 3000.00 |
    ±------±--------+
  • count()和count(具體的某個字段),他們有什麼區別。
    count(
    ):不是統計某個字段中數據的個數,而是統計總記錄條數。(和某個字段無關)count(comm):表示統計comm字段中不爲NULL的數據總數量。

4.group by和having

group by:按照某個字段或者某些字段進行分組。
having :having 是對分組之後的數據進行再次過濾。
兩者必須聯合使用。
案例:找出某個崗位的最高薪資?
1.先進行分組。

  • select max(sal) from emp group by job;
    注意:分組函數一般和group by聯合使用,這也是爲什麼他被稱爲分組函數的原因。
  • 任何一個分組函數count sum avg max min)都是在group by 語句執行結束之後纔會執行的。當一條sql語句沒有group by 的話,整張表就會自成一組。
  • 當一條語句中有group by 時,select後面只能跟分組函數,和分組字段。
    案例:找出每個部門,不同工作崗位的最高薪資?(兩個字段聯合分組)
    select
    deptno,job,max(sal)
    from
    emp
    group by
    deptno,job;
  • 找出每個部門的最高薪資,要求顯示薪資大於2500的數據。

第一步:找出每個部門的最高薪資
select max(sal) ,deptno from emp group by deptno;
第二部:找出薪資大於2900
select max(sal) ,deptno from emp group by deptno having max(sal)>2900;//效率較低(較高的mysql版本不能用)
第二種方法:
select
max(sal) deptno
from
emp
where
sal>2900
group by
deptno;//效率較高
案例:找出每個部門的平均工資,要求顯示薪資大於2000的數據。
第一步:找出每個部門的平均工資。
select deptno ,avg(sal) from emp group by deptno;
第二步:要求顯示薪資大於2000的數據。
select deptno,avg(sal) from emp group by deptno having avg(sal) >2000;
在這裏插入圖片描述

  • select語句總結
    在這裏插入圖片描述
  • 關於查詢結果集的去重?
    在select後加distinct關鍵字去除重複記錄。
    distinct關鍵字只能出現在所有字段的最前面。(不然不均衡啊)如果有多個字段,聯合起來去重。
    如:select distinct deptno ,job from emp;
    結果:
    ±-------±----------+
    | deptno | job |
    ±-------±----------+
    | 20 | CLERK |
    | 30 | SALESMAN |
    | 20 | MANAGER |
    | 30 | MANAGER |
    | 10 | MANAGER |
    | 20 | ANALYST |
    | 10 | PRESIDENT |
    | 30 | CLERK |
    | 10 | CLERK |
    ±-------±----------+
  • 統計崗位的數量?
    select count(distinct job) from emp;
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章