【編測編學】MySQL數據庫基礎知識

一:數據庫的相關概念

1、 數據庫的好處

① 可以持久化數據到本地
② 結構化查詢

2、 數據庫的常見概念

① DB:數據庫、存儲數據的容器
② DBMS:數據庫管理系統,又稱之爲數據庫軟件或數據庫產品,用於創建和管理DB
③ SQL:結構化查詢語言,用於和數據庫通訊的語言,不是某個數據庫軟件特有的,而是幾乎所有主流的數據庫軟件通用的語言

3、 數據庫存儲數據的特點

① 數據存放到表中,表在放到庫中
② 一個庫可以由多張表,每張表具有唯一的表名來標識自己
③ 表中有一個或多個列,列又稱之爲字段,相當於java中得屬性
④ 表中每一行數據,相當於Java中對象


4、 常見的數據庫管理系統
Mysql oracle db2 sqlserver

二:MySQL

1、 優點

① 開源、免費、成本低
② 性能高、移植性好
③ 體積小、便於安裝

2、 MySQL的安裝
屬於C\S架構的軟件,一般來講安裝服務端

3、 MySQL服務的啓動和停止

① 通過命令
net start 服務名
net stop 服務名
② 計算機管理--------服務


4、 MySQL服務的登錄和退出
登錄:mysql –h主機名 –P端口號 –u用戶名 –p密碼(默認端口3306,用戶root)
退出:exit或者Ctrl+c

5、 mysql的語法規範

① 不區分大小寫,但是建議關鍵字大寫,表名、列名小寫
② 每條命令最好用分號結尾
③ 每條命令根據需要,可以驚醒縮進,或者換行(建議關鍵字放一行,要查詢的放一行)
④ 註釋
單行註釋:#註釋文字、--註釋文字
多行註釋:/註釋文字/
show database();//查看當前所有的數據庫
use+庫名;//打開指定的庫
(只要用了use你就在那個庫中了)
show tables;//查看當前庫所有的表
show tables from 庫名;//查看其他庫所有的表
create table 表名(
列名 列類型,
列名 列類型,
...
)//創建表
desc 表名;//查看錶的結構
查看服務器的版本:
方式一:登錄到mysql服務端
select version();
方式二:沒有登錄到mysql服務端
mysql --version或mysql --V




















三、MySQL一些基礎的查詢
1、基本要掌握的
select 查詢列表 from 表名
USE manba;


#1.查詢表中的單個字段
SELECT last_name FROM manba;

#2.查詢表中的多個字段
SELECT last_name,salary,email FROM manba;

#3.查詢表中所有字段(雙擊左側)
#方式一
SELECT
department_id,
department_name,
manager_id,
location_id
FROM
manba;
#方式二
SELECT * FROM manba ;









#4.查詢常量值
SELECT 100;
SELECT 'john';
#(不區分字符和字符串)


#5.查詢表達式
SELECT 100%98;

#6.查詢函數
SELECT VERSION();

#7.起別名
/
①便於理解
②如果要查詢的字段有重名的情況,使用別名可以區分開來


/
#方式一:用as
SELECT 100%98 AS 結果;
SELECT last_name AS 姓,first_name AS 名 FROM manba;



#方式二:空格
SELECT last_name 姓,first_name 名 FROM manba;
#案例:查詢salary,顯示結果爲output
SELECT salary AS "out put" FROM manba;


#8.去重

#案例:查詢員工表涉及到的所有部門編號
SELECT DISTINCT department_id FROM manba;

#9. +號的作用

/*
java中的+號:
①運算符:兩個操作數都爲數值型
②連接符:只要有一個操作數爲字符串


mysql中的+號:
僅僅只有一個功能:運算符

select 100+90;
select '123'+90; 其中一方爲字符型,會試圖將字符型數值轉換成數值型
如果轉換成功則繼續加法運算
select 'john'+90; 如果轉換失敗,則字符型數組值轉換成0;


select null+10;只要其中一方爲null,則結果爲null
*/

#案例:查詢員工名和姓連接成一個字段,並顯示爲 姓名

SELECT CONCAT(last_name,first_name) AS 姓名 FROM manba;

#10.判斷是否爲空
#commission_pct是否爲空?爲空返回0
SELECT
IFNULL(commission_pct,0) AS 獎金率,
commission_pct
FROM
manba;





2、條件查詢
2.1按條件表達式查詢
#案例1:查詢工資>12000的員工信息

SELECT * FROM manba WHERE salary>12000;

#案例2:查詢部門編號不等於90號的員工名和部門編號

SELECT last_name,department_id FROM manba WHERE department_id!=90;

2.2按邏輯表達式查詢
案例1:查詢工資在10000到20000之間的員工名,工資和獎金

SELECT last_name, salary,commission_pct FROM manba WHERE salary>=10000 and salary<=20000;

案例2:查詢部門編號不在90-110之間,或者工資高於15000的員工信息
SELECT * FROM manba WHERE department_id<90 OR department_id>110 OR salary>15000;

2.3模糊查詢
2.3.1一般和通配符搭配使用
通配符:% 任意多個字符,包含0個
_ 任意單個字符
案例1:查詢員工名中包含字符a的員工信息
SELECT * from manba where last_name like '%a%';
%代表通配符,代表任意個字符





案例2:查詢員工名中第3個字符爲n,第五個字符爲l的員工名和工資
SELECT last_name,salary from manba where last_name like '__n_l%';

#案例3:查詢員工名中第二個字符爲_的員工名(轉義字符)
SELECT last_name FROM manba WHERE lastname LIKE '_%';

2.3.2between and
①使用between and可以提高語句的簡潔度
②包含臨界值
③兩個臨界值順序不能調換


#案例1:查詢員工編號在100到120之間的員工信息

SELECT * from manba where manba_id between 100 and 200;

2.3.3.in
含義:用於判斷某字段的值是否屬於in列表中的某一項
特點:
①使用in提高語句簡潔度
②in列表的值類型必須統一或者兼容
③不支持通配符




#案例:查詢員工的工種編號是 IT_PROT, AD_VP, AD_PRES中的一個的員工名和工種編號
SELECT last_name,job_id FROMmanba WHERE
job_id='IT_PROT' OR job_id='AD_VP' OR job_id='AD_VP';

SELECT last_name,job_id FROMmanba WHERE job_id IN ('IT_PROT' ,'AD_VP' , 'AD_VP');

2.3.4. is null(is not null)
=或者<>不能用於判斷null值

#案例1:查詢沒有獎金的員工名和獎金率
SELECT last_name,commission_pct FROM manba WHERE commission_pct IS NULL;

#安全等於 <=> is null可以換成<=> null

#案例1:查詢沒有獎金的員工名和獎金率
SELECT last_name,commission_pct FROM manba WHERE commission_pct <=> NULL;

#案例12:查詢工資爲12000的員工信息
SELECT last_name,salary FROM manba WHERE salary <=> 12000;

3、排序查詢
引入:
select * from manba;
語法:
SELECT 查詢列表
from 表
[where 篩選條件]
order by 排序列表 [asc|desc]
特點:
asc代表升序,desc代表降序,默認不寫是升序
order by子句中可以支持單個字段、多個字段、表達式、函數、別名
order by子句一般是放在查詢語句的最後面,limit子句除外










#案例1:查詢員工信息,要求工資從高到低排序
SELECT FROM manba ORDER BY salary DESC;
SELECT
FROM manba ORDER BY salary ASC;

#案例2:查詢部門編號>=90的員工信息,按入職時間的先後進行排序

SELECT *
FROM manba
WHERE department_id>=90
ORDER BY hiredate ASC;


#案例3:按年薪高低顯示員工的信息和年薪[按表達式排序]
SELECT , salary12(1+IFNULL(commission_pct,0)) AS 年薪
FROM manba
ORDER BY salary

12*(1+IFNULL(commission_pct,0)) DESC;

#案例4:按年薪高低顯示員工的信息和年薪[按別名排序]
SELECT , salary12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
ORDER BY 年薪 DESC;


#案例5:按姓名的長度顯示員工的姓名和工資 [按函數排序]
SELECT LENGTH(last_name) AS 字節長度, last_name,salary
FROM manba
ORDER BY LENGTH(last_name) DESC;


#案例6:查詢員工信息,要求先按工資升序,再按員工編號降序 [按多個字段排序]
SELECT * FROM manba
ORDER BY salary ASC,employee_id DESC;
#整體按工資排序,工資相同時,按員工編號降序


4.常見函數的運用
概念:類似java的方法,將一組邏輯語句封裝在方法體中,對外暴露方法名
好處:隱藏了實現細節、提高代碼的重用性
調用:select 函數名(實參列表) [from 表(根據需要)];
特點:
①叫什麼(函數名)
②幹什麼(功能)
分類:
字符函數:length concat substr instr trim upper lower lpad rpad replace







數學函數: round ceil floor truncate mod

日期函數:now curdate curtime year month monthname 
day hour minute second str_to_date  date_format

其他函數:version database user

控制函數: if case

下期我們就函數的應用,還有其他的查詢做一個彙總

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章